Avatar billede hurra Novice
24. august 2001 - 11:29 Der er 7 kommentarer og
1 løsning

ShellExecute vs. spawnl

Jeg har lavet et program, hvor i jeg kalder et andet program. I indstillinger til mit program, kan man vælge om det skal vise et console-vindue, når det andet program køres. Oprindeligt havde jeg brugt ShellExecute til at kalde det andet program med, men pga. nogle små detajler, bruger jeg nu spawnl til at kalde det andet program med. Med ShellExecute kunne jeg bruge SW_HIDE eller SW_NORMAL alt efter om consolen skulle vises eller ikke. Kan jeg gøre noget lignende med spawnl ? Er der evt. nogle af de andre spawn kommandoer jeg kan bruge isteddet ?
PS. jeg bruger Borland Builder
Avatar billede hurra Novice
24. august 2001 - 11:31 #1
PPS. på windows 2k
Avatar billede soepro Nybegynder
30. august 2001 - 08:07 #2
Hvorfor gik du væk fra ShellExecute ??? Fordi du vil vente på at kørslen er færdig ??? Der findes metoder til at checke om en givn process kører endnu via det process ID du får tilbage fra en successfuld ShellExecute.
Avatar billede hurra Novice
30. august 2001 - 20:10 #3
Ja, det ved jeg (altså at man kan vente til processen er færdig). Programmet jeg har lavet, gør ikke noget mens computeren kører, først når man lukker computeren ned, kaldes det andet program. Og der opstod problemet, ShellExecute kunne ikke starte et andet program op, mens computeren var ved at lukke ned. Så jeg blev anbefalet at bruge spawnl istedet for.
Det kan da forresten også være at du kan fortælle mig om/hvad/hvis jeg gør noget forkert siden ShellExecute ikke vil starte det andet program op?
Avatar billede soepro Nybegynder
31. august 2001 - 10:42 #4
Nå, så forstår jeg bedre. ShellExecute beder jo Windows om at starte et program op - og det får du ikke lov til når du er \"på vej ned\". Med spawnl startes blot en ny tråd indenfor samme process - så måske skal du søge in WinSDK hjælpen efter en beskrivelse af StartThread - så mener jeg du kan styre om den nye tråd skal køre minimized, normal eller maximized.
Avatar billede reficul Nybegynder
12. september 2001 - 21:14 #5
Her er min metode:

//To global variabeler:
HANDLE hProcess, hThread;


//Når programmet skal startes:
STARTUPINFO sStartupInfo;
PROCESS_INFORMATION sProcessInformation;

ZeroMemory(&sStartupInfo, sizeof(sStartupInfo));
sStartupInfo.cb = sizeof(sStartupInfo);
sStartupInfo.wShowWindow = SW_SHOW;

if (!CreateProcess(NULL,\"program.exe\",NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&sStartupInfo,&sProcessInfo))
    MessageBox(NULL, \"Der opstod en fejl\", \"Fejl\", MB_ICONINFORMATION);
else {
    hProcess = sProcessInfo.hProcess;
    hThread = sProcessInfo.hThread;
}

//Når programmet vil vente på at programmet afslutter:
WaitForSingleObject(hProcess);
CloseHandle(hProcess);
CloseHandle(hThread);


PS. jeg laver ofte trykfejl o.l., når jeg skriver kode. Kig evt. på http://msdn.microsoft.com/library der er dokumentation til CreateProcess
Avatar billede soepro Nybegynder
14. september 2001 - 08:30 #6
Som jeg skrev - lav en ny tråd !
Avatar billede hurra Novice
14. september 2001 - 18:28 #7
Tak for det, og undskyld jeg ikke lige fik svaret hurtigt. Men jeg er på ferie. Jeg vil lige kikke på det når jeg kommer hjem.
Avatar billede hurra Novice
22. september 2001 - 14:03 #8
Det virker fint. Mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester