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á
Samozřejmě předpokládám, že se jedná o konzolovou aplikaci ... A co napsat?
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
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...
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?
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);
}
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.
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 :)
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
);
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);
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
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)
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku