Witam !
Mam taki problem mianowicie chiałbym "zabić" pewien proces i zabardzo nie wiem jak to zrobić. Znalazłem na forum o zabijaniu procesów ale to było w Delphi ja tymczasem programuje w C++, jeśli ktoś wie jak to zrobić proszę go o pomoc.
Mam jeszcze jedno pytanie gdybym chciał zabić jakiś proces na stałe to zn by się <ort>nieuruchamiał </ort>to jak mam to zrobić, czy np zabicie w pętli było by dobrym sposobem taki program byłby ukryty i dodany w rejestrze. Co o tym myslicie ?
mam coś takiego : wyskakuje błąd "syntax error before *"
#include <iostream>
#include <windows.h>
#include <shellapi.h>
int main() {
long *yo = new long;
BOOL GetExitCodeProcess(
HANDLE ("notepad.exe"),
LPDWORD *yo
);
}
n1x0n napisał(a)
BOOL GetExitCodeProcess(
HANDLE ("notepad.exe"),
LPDWORD *yo);
}
co to za twór ??
co to za twór ??
jakis builderowy pewnie :)
To może ktoś podać przykład dla winapi ?
Przyklad pierwszy z netu dla Delphi. Przerobiony na c++:
HWND hwnd, hProc;
DWORD pId;
hwnd = FindWindow("Winamp v1.x", NULL);
GetWindowThreadProcessId(hwnd, &pId);
hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pId);
TerminateProcess(hProc, 0);
A co to jest PROCESS_TERMINATE ?
Poczytaj dokumentacje troszke :)
Malcolm napisał(a)
A co to jest PROCESS_TERMINATE ?
Poczytaj dokumentacje troszke :)
a to pytanie do mnie ?
Tak.
hmmm.... więc tak :
#include <iostream>
#include <windows.h>
using namespace std;
int main () {
HWND hwnd, hProc; // utworzenie uchwytu o nazwie hProc
DWORD pId; // utworzenie jakiejs zmiennej dword
hwnd = FindWindow("NOTEPAD.exe", NULL); // przypisanie uchwytu do procesu
GetWindowThreadProcessId(hwnd, &pId); // - moze ktos to wyjasnic
hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pId); // i to
TerminateProcess(hProc, 0); // zakonczenie procesu
int u;
cin >> u;
}
niemoge skompilowac bo wyskakuje ze "invalid conversion from void* to HWND__" w linijce zaczynającej sie od hProc. Ma ktoś jakąś idee
tak to bywa z pierwszymi przykladami z netu dla delphi przerobionymi na C++ ;)
Jesli juz to tak raczej powinno byc:
<cpp> void main () { HWND hwnd; HANDLE hProc; DWORD pId;hwnd = FindWindow(className, windowName);
if(!hwnd)
return;
/* Masz wyjasnienie: This function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window.
*/
GetWindowThreadProcessId(hwnd, &pId);
/* This function returns a handle to an existing process object. */
hProc = OpenProcess(0, FALSE, pId);
if(hProc)
TerminateProcess(hProc, 0);
return;
}
No elegancko Malcolm, ale to co napisales nie dziala - przynajmniej u mnie (sprawdzalem na BCB 6)
Dziala za to z linia:
hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pId);
P.S. Ja nie chce byc zlosliwy, bo WinApi raczej nie znam.
TAK MA BYĆ
HWND hwd;
HANDLE hProc;
DWORD pId;
hwd = FindWindow(NULL, "Bez tytułu - Notatnik");
GetWindowThreadProcessId(hwd, &pId);
hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pId);
TerminateProcess(hProc, 0);
emte napisał(a)
No elegancko Malcolm, ale to co napisales nie dziala - przynajmniej u mnie (sprawdzalem na BCB 6)
A kto tu mowil o BCB?
U mnie hula.
BTW: Patrz co pisze dokumentacja (Znaczy przynajmniej ta microsoftowa)
HANDLE OpenProcess(
DWORD fdwAccess,
BOOL fInherit,
DWORD IDProcess
);
Parameters
fdwAccess
[in] Not supported; set to zero.
fInherit
[in] Not supported; set to FALSE.
IDProcess
[in] Specifies the process identifier of the process to open.
P.S. Mam nadzieje, ze to nie z powodu className i windowName w FindWindow u was nie dzialalo :P
Patrzylem do dokumentacji:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/openprocess.asp
Malcolm napisał(a)
Mam nadzieje, ze to nie z powodu className i windowName w FindWindow u was nie dzialalo :P
Żeby rozwiac twoje watpliwosci powiem ci ze nie. Skoro napisalem ze z parametrem PROCESS_TERMINATE u mnie dziala tzn ze za className i windowName cos wpisalem.
Zreszta malo wazne. Zakonczmy ten temat.
Faktycznie.
Zebys widzial moje zdziwienie :D
Tam na dole tej strony jest takie cos:
Last updated: March 2005
A ja mam lokalnie msdn ze stycznia, wiec pewnie przez to wkradl sie maly blad.
Ale w sumie dobrze wiedziec :)
Przyznam ze sam sie zdziwilem jak napisales ze to z dokumentacji microsoftu :)
Zatem wszelkie niejasnosci wyjasnione:)