HANDLE in HWND umwandeln ??
-
Bist du denn jetzt weitergekommen mit deinem Problem?
-
Ja WebFritzi,
deine Funktionen funktionieren einwandfrei
, aber ich hätte doch gern noch gewusst, wie ich das selber in meinen Code einbauen kann.
-
Schau in meinen Code rein. Viel ist es ja nicht.
-
tsp schrieb:
Ich habe zu Testzwecken notepad.exe beendet. Danach war trotzdem noch notepad.exe im task-Manager zu sehen, ...
Passiert das ständig, öfters oder ganz selten, bzw. nur bei notepad.exe oder auch bei anderen Prozessen ?
-
@tsp: Du hast meinen Post aber bemerkt oder *grinz* ?
-
@merker:
Es passiert ständig bei jedem Prozess!
-
tsp schrieb:
Es passiert ständig bei jedem Prozess!
Poste nochmal die Schleife in der Du TerminateProcess () aufrufst.
Im Augenblick sorgst Du für eine mittelschwere Sensation :
TerminateProcess () erzeugt "Zombies" ?!?//EDIT : Nachtrag hinzugefügt
-
Hier noch mal die Loop:
int isRun(string file) { HANDLE hSnapShot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 processInfo; processInfo.dwSize = sizeof (processInfo); /*PROCESSENTRY32* processInfo = new PROCESSENTRY32; processInfo->dwSize = sizeof ( PROCESSENTRY32);*/ while ( Process32Next ( hSnapShot,&processInfo ) != FALSE) { if (strcmpi(processInfo.szExeFile,file.c_str())==0)return rocessInfo.th32ProcessID; }; CloseHandle ( hSnapShot); //delete processInfo; return 0; } void lock(string file) { while (true) { Sleep(5); int i=isRun(file); if (i!=0) { TerminateAppByWindowClosing(i, 0); //HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,i); //TerminateProcess(h,12); //CloseHandle(h); } } } int main() { while (true) { Sleep(5); int i=isRun("notepad.exe"); if (i!=0) { HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,i); TerminateProcess(h,12); CloseHandle(h); } } return 0; }
Bitteschön.
-
Die Loop ist ok.
Wie hoch ist die Aktualisierungsgeschwindigkeit vom Taskmanager ?
-
Keine Ahnung, ich schätze mal so 10-100 ms.
-
Wird langsam unheimlich die Sache. Funktioniert die "hardcoded" Variante von TerminateProcess () ohne Loop?
Falls nicht, was liefert GetLastError () zurück ?// notepad starten, pid dem taskmanager entnehmen und eintragen, kompilieren und starten DWORD pid = 1234; HANDLE h = OpenProcess (PROCESS_ALL_ACCESS,FALSE,pid); TerminateProcess (h,1); DWORD error = GetLastError (); CloseHandle (h);
-
Der Code funktioniert!!!!!
Mich laust der Affe.Ich versuch mal, den Unterschied zwischen deinem und meinem zu finden (
kann ja nich so schwer sein!?)
-
Hey, also ... ich weiß nich ... jetzt funktioniert meine loop, aber ich hab nix verändert!!
Danke für deine umfangreiche Hilfe merker!
PS: Wenn du noch was interessantes hast, dann post es .
-
tsp schrieb:
Wenn du noch was interessantes hast, dann post es.
Sobald Du "Prozessstrukturen", d.h. einen Parent- und seine Childprozesse beenden willst, wird es wieder interessant.
Aber das wäre ein neues Thema.