View Full Version : [Win32] Inviare Ctrl+C ad un altro processo
sembrerà banale come domanda (specie fatta da me che passo le mie ore sul forum a propagandare Windows e Win32 :p) ma non riesco a trovare un modo... :wtf:
come si fa a simulare Ctrl+C in un altro processo, sapendo ovviamente che si tratta di un programma console? è possibile?
Rubberick
24-03-2007, 14:43
in pratica il problema che vorremmo risolvere sarebbe quello di mandare un comando di "term" cioe' non il kill classico, il comando di chiusura della console, come se cliccassi sulla X di chiusura della finestra
c'e' modo di emularlo in qualche modo avendo i diritti di admin? grazie :)
oddio alla X di chiusura non c'avevo pensato... :D :D :D
faccio un tentativo di WM_SYSCOMMAND :mc:
ehm, ora il bello però è capire se effettivamente il processo è basato su un eseguibile CUI o GUI... :|
esiste un'API che mi permette di saperlo? :D
non mi dite che devo andare a leggere gli headers dell'eseguibile :mc:
Rubberick
24-03-2007, 19:53
oddio alla X di chiusura non c'avevo pensato... :D :D :D
faccio un tentativo di WM_SYSCOMMAND :mc:
:mbe: e tu saresti un programmatore? :stordita:
ehm, ora il bello però è capire se effettivamente il processo è basato su un eseguibile CUI o GUI... :|
esiste un'API che mi permette di saperlo? :D
non mi dite che devo andare a leggere gli headers dell'eseguibile :mc:
ehm non ho idea di come fare in C, ma in python si farebbe qualcosa di simile:
def kill(pid):
import win32api
handle = win32api.OpenProcess(1, 0, pid)
return (0 != win32api.TerminateProcess(handle, 0))
In teoria OpenProcess e TerminateProcess dovrebbero essere api standard di Windows, per cui la traduzione dovrebbe essere abbastanza banale.
ehm non ho idea di come fare in C, ma in python si farebbe qualcosa di simile:
def kill(pid):
import win32api
handle = win32api.OpenProcess(1, 0, pid)
return (0 != win32api.TerminateProcess(handle, 0))
In teoria OpenProcess e TerminateProcess dovrebbero essere api standard di Windows, per cui la traduzione dovrebbe essere abbastanza banale. ti ringrazio, ma questa è terminazione brutale, non è quello che cerco; senza contare che ti sei scordato di chiudere l'HANDLE :D
a dire il vero Ctrl+C è implementato tramite SEH: fa saltare un'eccezione che risale fino all'handler di qualche DLL di Windows (presumibilmente kernel32.dll), il quale esce dal processo in una maniera che somiglia molto alla terminazione brutale; di conseguenza TerminateProcess dovrebbe essere la stessa cosa in molti casi. ma in teoria un programma potrebbe aver installato un handler per Cltr+C, il quale non verrebbe eseguito in seguito a una TerminateProcess.
MHWUAMWHAUWMAHWAUWMAHWUAMWHAUWAMHWUA (http://msdn2.microsoft.com/en-us/library/ms683155.aspx) XDXDXDXD
però resta il problema di come fare a sapere se è CUI o GUI... :mbe:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.