![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пропадает Task bar,tray,start. [D7, WinXP]
Pit © (2006-01-31 21:25:00)Помогите решить проблему, после выполнения, пропадает Task bar,tray,start.
Это относится только к не отвечающим программам и My Computer.
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(nil,' My Computer'); \\ или FindWindow(nil,' Untitled - Notepad');
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessID);
TerminateProcess(ProcessHandle,4);
При явном указании TheWindow :=FindWindow( 'notepad',' Untitled - Notepad');все работает нормально.
System Error. Code: 1400.
Invalid window handel.
kaZaNoVa (2006-02-01 13:25:00) [1]при чем разницы не было, от кого был запущен калькулятор .. (родительский процесс) , следовательно думаю проблема в "некорретном" идентификаторе или просто "не том" который возвращет
FindWindow.. (ноGetWindowTextпочему-то нормально с ним работает)
kaZaNoVa (2006-02-01 13:18:00) [2]Pit © (01.02.06 12:49) [12]
забавно, но ты прав .. у меня так же ..
0-лей там не наблюдал, тока другой ID окна наGetWindowText- выдаёт калькулятор а наGetWindowThreadProcessID- Explorer (!) ...
Pit (2006-02-01 12:49:00) [3]Например открываешь блокнот и пихаешь туда 100 мегабайт текста.
Я пробую на 86 примерно.
Когда он виснит пытаюсь его убить, дальше знаешь сам.
kaZaNoVa (2006-02-01 12:42:00) [4]Pit © (01.02.06 12:39) [10]
> 'Любое зависшее приложение'
а по какому принципу приложение считается "зависшим" ?
Pit (2006-02-01 12:39:00) [5]Почему при таком раскладе пропадает дектоп
TheWindow := FindWindow(nil, 'Любое зависшее приложение');
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
Pit (2006-02-01 12:33:00) [6]Попробуй сам вот это
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(nil,' My Computer');
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
А потом это
TheWindow := FindWindow(nil,'Сalculator');
Pit (2006-02-01 12:23:00) [7]на это MessageBox(0,Pchar(SysErrorMessage(GetLastError)),Pchar(Inttostr(GetLastError)),0);
пишит
The operation completed successfully
kaZaNoVa (2006-02-01 11:59:00) [8]Pit © (31.01.06 22:12) [3]
для выяснения ошибок можно еще попробовать:
MessageBox(0,Pchar(SysErrorMessage(GetLastError)),Pchar(Inttostr(GetLastError)),0);
Rouse_ (2006-02-01 10:25:00) [9]
> По всей видимости это так.
Но соответвтует десктопу. Его ты и грохаешь...
Pit (2006-01-31 22:38:00) [10]Удалено модератором
Игорь Шевченко (2006-01-31 22:29:00) [11]Возвращаемое функциями значение надо проверять.
Pit (2006-01-31 22:12:00) [12]> TheWindow := FindWindow(nil,' My Computer');
результат этой функции по всей видимости ноль лежащий в TheWindow ?
По всей видимости это так.
> kaZaNoVa
Да код убивает приложение по окну, но я не пойму по чему пропадает оболочка Explorer и почему когда убиваешь
зависший блокнот или любое другое зависшее приложение пропадает оболочка Explorer, любое нормальноработающее окно убивает без проблем.
kaZaNoVa (2006-01-31 21:55:00) [13]Pit © (31.01.06 21:25)
> TheWindow := FindWindow(nil,' My Computer');
> TerminateProcess(ProcessHandle,4);
ты убиваешь Explorer и конечно пропадет оболочка ..
а в чем смысл кода? убивать приложение по окну ?
Rouse_ (2006-01-31 21:36:00) [14]
> TheWindow := FindWindow(nil,' My Computer');
результат этой функции по всей видимости ноль лежащий в TheWindow ?