PDA

View Full Version : [C] Funzione Kill in Windows XP


osa
04-08-2005, 21:24
Salve, quando voglio eseguire un programma da un programma in C utilizzo la funzione system(), volevo chiedervi se esiste una funzione che "uccide" il processo, l'equivalente di kill() in Unix. Inoltre, esiste l'equivalente di exec, la funzione system mi sembta un pocp riduttiva. Grazie.

ilsensine
04-08-2005, 21:36
Guarda se mi tocca dare supporto anche per la concorrenza... :D google e msdn fanno miracoli, sapete? ;)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminating_a_process.asp

71104
05-08-2005, 10:07
TerminateProcess; devi avere un handle aperto del processo target coi permessi necessari.

osa
05-08-2005, 11:38
Abbiate pazienza, potete farmi un esempio? Ho usato gli header <w32api.h>, <Winbase.h> ,<Windows.h>; ma Visual C++ mi dà questo errore: fatal error C1083: Cannot open include file: 'w32api.h': No such file or directory
Error executing cl.exe. Se tolgo l'header <w32api.h>, sono rilevati 79 errori!
Datemi una mano. Grazie mille

71104
05-08-2005, 11:43
infatti l'header w32api.h non esiste, non so da dove tu l'abbia preso... devi includere solamente windows.h ;)
windows.h non provoca errori se abiliti le estensioni Microsoft del C (abilitate di default); se ci sono errori probabilmente dipendono dal resto del codice :)

osa
05-08-2005, 11:52
Ammettiamo solo che volessi far partire solo il Notepad potresti scrivermi la sintassi corretta della funzione?

71104
05-08-2005, 12:17
Ammettiamo solo che volessi far partire solo il Notepad potresti scrivermi la sintassi corretta della funzione? pensavo che lo volessi terminare il notepad :p
per avviarlo in Visual C++ esistono diversi modi:
system("notepad.exe");
ShellExecute(NULL, TEXT("open"), TEXT("notepad.exe"), NULL, NULL, SW_SHOW);
WinExec("notepad.exe", SW_SHOW);
STARTUPINFO si = {
sizeof(STARTUPINFO)
};
PROCESS_INFORMATION pi;
CreateProcess(TEXT("notepad.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
ti ho risparmiato spawn e ShellExecuteEx :p

osa
05-08-2005, 12:27
pensavo che lo volessi terminare il notepad :p
per avviarlo in Visual C++ esistono diversi modi:
system("notepad.exe");
ShellExecute(NULL, TEXT("open"), TEXT("notepad.exe"), NULL, NULL, SW_SHOW);
WinExec("notepad.exe", SW_SHOW);
STARTUPINFO si = {
sizeof(STARTUPINFO)
};
PROCESS_INFORMATION pi;
CreateProcess(TEXT("notepad.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
ti ho risparmiato spawn e ShellExecuteEx :p

Scusami, con CreateProcess il Notepad non parte....

osa
05-08-2005, 13:40
Sono riuscito far funzionare CreateProcess, ho tolto (TEXT) dai parametri, ora vorrei usare TerminateProcess, uno dei parametri è l' handle del processo, come faccio a rilevare l'handle del processo in esecuzione?

osa
05-08-2005, 16:06
Ok grazie per gli aiuti ho capito :D