Mam taki, poniższy kod, ktory ma zamknąć aplikację explorer.exe - zamyka, jednak zwraca mi mały błąd w postaci okienka z napisem "System Error, Code: 1400 / Nieprawidłowe dojście do okna" - wydaje mi się, że to nie moja aplikacja, ale system zwraca taki błąd. Dlaczego? Poniżej kod jaki wykonuję:
- Kod: Zaznacz cały
void __fastcall GetProcess(TStrings *ProcList)
{
HWND Snap;
PROCESSENTRY32 proces;
Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
proces.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(Snap, &proces))
{
do
{
if(proces.szExeFile[0] != '[')
{
ProcList->Add((String)(String)proces.szExeFile + "=" + (String)proces.th32ProcessID);
}
}
while(Process32Next(Snap , &proces));
}
CloseHandle(Snap);
}
//---------------------------------------------------------------------------
bool CloseProcess(DWORD ID)
{
DWORD ExitCode;
HWND hWnd;
bool Result = true;
if(ID)
{
hWnd = OpenProcess(PROCESS_ALL_ACCESS, true, ID);
if(hWnd)
{
GetExitCodeProcess(hWnd, &ExitCode);
Result = TerminateProcess(hWnd, ExitCode);
}
else return false;
}
else return false;
CloseHandle(hWnd);
return Result;
}
Oczywiście mam:
- Kod: Zaznacz cały
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
WindowList = new TStringList;
}
i zadeklarowane:
- Kod: Zaznacz cały
private: // User declarations
TStringList *WindowList;
A to jest wywołanie:
- Kod: Zaznacz cały
try
{
WindowList->Clear();
GetProcess(WindowList);
CloseProcess((DWORD)WindowList->Values["explorer.exe"].ToInt());
}
catch(...)
{
}
Co zrobić, by nie pojawiał się ten błąd?



