Spuštění programu na pozadí – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spuštění programu na pozadí – C / C++ – Fórum – Programujte.comSpuštění programu na pozadí – C / C++ – Fórum – Programujte.com

 

dragon124-10
Stálý člen
18. 10. 2011   #1
-
0
-

dobrý den,

potřebuji nějak udělat aby programběžel jako proces-to znamená že nemá být otevřené okno aplikace a pořád bude dělat to co dělat má

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #2
-
0
-

Spustíš program přes CreateProcess s nastaveným CREATE_NO_WINDOW.

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #3
-
0
-

aha to zní dobře a jak to v praxi udělat?

co napsat do zdrojáku?
 

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #4
-
0
-

Samozřejmě předpokládám, že se jedná o konzolovou aplikaci ... A co napsat?

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #5
-
0
-

ted pul hodiny googlim a nemuzu vygooglit pls poraď mi co mám napsat pokud chci spustit program do pozadí

vygooglil jsem toto:

#include <windows.h>
#include <stdio.h>

BOOL SpustProgram (char *CestaVcetneParametru, DWORD *KodChyby)
{
  BOOL Ret;
  STARTUPINFO si; 
  PROCESS_INFORMATION pi; 
  if (KodChyby) *KodChyby = 0;
  memset(&si,0,sizeof(STARTUPINFO)); 
  memset(&pi,0,sizeof(PROCESS_INFORMATION)); 
  si.cb = sizeof(STARTUPINFO); 
  si.dwFlags = STARTF_USESHOWWINDOW; 
  si.wShowWindow = SW_SHOWNORMAL; 
  Ret = CreateProcess(NULL,CestaVcetneParametru,NULL,
                      NULL,FALSE,0,NULL,NULL,&si,&pi); 
  if (!Ret) {
    if (KodChyby) *KodChyby = GetLastError();
  };
  return Ret; 
};

int main (void)
{
  DWORD KodChyby = 0;
  char CestaVcetneParametru[500];
  lstrcpy(CestaVcetneParametru,"c:\\windows\\notepad.exe c:\\soubor.txt");
  if (SpustProgram(CestaVcetneParametru,&KodChyby)) {
    printf("Program\n%s\nbyl spusten OK\n",CestaVcetneParametru);
  } else {
    printf("Chyba pri spousteni programu\n%s\nKod chyby %lu\n",
           CestaVcetneParametru,KodChyby);
  };
  system("PAUSE");
  return 0;
};

ale nevím kam napsat to Create No Window

Nahlásit jako SPAM
IP: 89.235.32.–
KIIV
~ Moderátor
+43
God of flame
19. 10. 2011   #6
-
+1
-
Zajímavé

tak prekvapive patri nekam do CreateProcess... usetrim te te agonie hledani v google: najdes to tady http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

(mimochodem prvni odkaz na google pro  "CreateProcess")

UPOZORNUJU ZE JE TO TAM!!! (jen nenajdes primo ten flag CREATE_NO_WINDOW ten je schovanej na jedne podstrance)

jestli to nenajdes tak se asi ani neobtezujes ctenim a cekas ze za tebe vse vyresime...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
dragon124-10
Stálý člen
19. 10. 2011   #7
-
0
-

ja tam nasel toto

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

ale ono to hlásí spoustu chyb!!!

co s tim mam dělat?

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #8
-
+1
-
Zajímavé

Napsat sem i ty chyby ... :)

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #9
-
0
-

   

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #10
-
0
-

Píše ti to, že funkce main musí vracet int (protože je tak definovaná). Takže místo return; má být return(nějakéHezkéČíslo); a na konci programu ti chybí úplně.

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #11
-
0
-

aha tak jsem u věech returnů udělal (0) a co te´ˇd když to hlásí jen že main must return int?

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #12
-
0
-

a na konci programu ti chybí úplně.

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #13
-
0
-

v tom to ale neni:

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return(0);
    }

    // Start the child process.
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    )
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return(0);
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles.
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
        return(0);
}

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #14
-
0
-

   

int _tmain
Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #15
-
0
-

jj dik uz sem to nasel ve zvucich v c++

ted uz to nic nehlasi ale kam mam napsat co chci spustit a  kam to že nechci okno?

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #16
-
0
-

Ten program, co si "vytvořil", spustí jinou aplikaci, kterou předáš jako parametr při spouštění.

A CREATE_NO_WINDOW je parametr volání CreateProcess a funguje jenom pro spouštěné konzolové aplikace. Nejlépe hledat v dokumentaci této funkce, jak ti radil KIIV.

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #17
-
0
-

aha takže prostě běží nějaká konzolová aplikace a já tim udělam aby neměla okno?

Nahlásit jako SPAM
IP: 89.235.32.–
dragon124-10
Stálý člen
19. 10. 2011   #18
-
0
-

moment,

spustim program přes system(""); a jak potom na to zavolam to aby to nemělo žádný okno?

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #19
-
0
-

system je funkce vykonání systémových příkazů. Pokud chceš vykonat nějaký takový příkaz, tak nemůžeš použít system, ale CreateProcess, kterým otevřeš konzoli (cmd.exe) a předáš ji spouštěcí parametry: /C tebouPožadovanýPříkaz ... no a flag dwCreationFlags nastavíš na CREATE_NO_WINDOW.

Nezkoušel jsem to, ale snad by to mohlo chodit :)

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #20
-
0
-

pockat a kam mam napsat to CREATE_NO_WINDOW?

nemuzu najit dwCreationFlags

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #21
-
0
-

   

BOOL WINAPI CreateProcess(
  __in_opt     LPCTSTR lpApplicationName,
  __inout_opt  LPTSTR lpCommandLine,
  __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in         BOOL bInheritHandles,
  __in         DWORD dwCreationFlags,
  __in_opt     LPVOID lpEnvironment,
  __in_opt     LPCTSTR lpCurrentDirectory,
  __in         LPSTARTUPINFO lpStartupInfo,
  __out        LPPROCESS_INFORMATION lpProcessInformation
);
Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
19. 10. 2011   #22
-
0
-

aha děkuji a kam mam napsat co se má spustit?

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
19. 10. 2011   #23
-
0
-

lpApplicationName pro jméno spouštěné aplikace a lpCommandLine pro jméno spouštěné aplikace a předávané parametry.

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
20. 10. 2011   #24
-
0
-

pockat to nechapu 

co mam dělat pokud chci aby mi to aplikaci cmd.exe udělalo aby neměla okno?

Nahlásit jako SPAM
IP: 89.235.32.–
KIIV
~ Moderátor
+43
God of flame
20. 10. 2011   #25
-
+1
-
Zajímavé

proc sakra chces terminal bez terminalu?

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
dragon124-10
Stálý člen
20. 10. 2011   #26
-
0
-

aby se mohlo dit neco i kdyz to neni videt (spehovat pocitac, odesílat něco na nějakej server a pod.)

Nahlásit jako SPAM
IP: 89.235.32.–
KIIV
~ Moderátor
+43
God of flame
20. 10. 2011   #27
-
0
-

#26 dragon124
tim spis mi neni jasne na co cmd.exe ... chces spustit worma ne konzoli, kterou nemuzes ovladat

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
dragon124-10
Stálý člen
20. 10. 2011   #28
-
0
-

to je jedno tak třeba worm.exe a udělat to tak aby to nebylo vidět

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
21. 10. 2011   #29
-
0
-

Ukončíme toto vlákno :)

STARTUPINFO		sStartupInfo;
PROCESS_INFORMATION	sProcessInfo;

ZeroMemory(&sStartupInfo, sizeof(sStartupInfo));
sStartupInfo.cb = sizeof(sStartupInfo);
ZeroMemory(&sProcessInfo, sizeof(sProcessInfo));

CreateProcess("C:\\Windows\\System32\\ping.exe", " -t 127.0.0.1", NULL, NULL, TRUE, /*CREATE_NO_WINDOW |*/ NORMAL_PRIORITY_CLASS, NULL, NULL, &sStartupInfo, &sProcessInfo);
Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
21. 10. 2011   #30
-
0
-

děkuji,

už to funguje jen s jedním malým problémem.

dal jsem to na muj program.

v tomto "odkazu" na ten program se objěvilo pokračujte stisknutím jakékolivklávesy ale pod tím běžel ten program ale já chci abych toto okno mohl zavřít a ono to dál běželo

Nahlásit jako SPAM
IP: 89.235.32.–
liborb
~ Redaktor
+18
Guru
24. 10. 2011   #31
-
0
-

Kdo koho spouští? Dej jsem příklad (a.exe spouští b.exe ...), protože v tuto chvíli absolutně netuším, co je cílem cvičení.

Nahlásit jako SPAM
IP: 78.80.52.–
dragon124-10
Stálý člen
24. 10. 2011   #32
-
0
-

skratka program a.exe spouští program b.exe a v programu a.exe se zobrazí:

pokračujte stiskem jakékoliv klávesy a pod tím je vidět obsah b.exe.

já chci abych pak mohl vypnout program a a béčko bypořád běželo (ale nebylo by v žádném oknu)

Nahlásit jako SPAM
IP: 217.169.180.–
KIIV
~ Moderátor
+43
God of flame
24. 10. 2011   #33
-
0
-

mozna se zbavit zverstev jako  system("pause")

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
dragon124-10
Stálý člen
24. 10. 2011   #34
-
0
-

no dobře ale jak udělat abych to vzpnul a abz to dál běželo

Nahlásit jako SPAM
IP: 217.169.180.–
liborb
~ Redaktor
+18
Guru
25. 10. 2011   #35
-
0
-

Pokud a.exe spouští b.exe, tak b.exe běží (pokud má) i po skončení a.exe. Jenže běží bez okna, když sis ho tak pracně vypnul, takže ho uvidíš jen mezi běžícími procesy.

Nahlásit jako SPAM
IP: 78.80.52.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Spuštění mp3 na pozadí — založil MASTERMAN

Beh programu v pozadi — založil aranes

Beh programu v pozadi — založil noel

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý