Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизПропадает Task bar,tray,start. Найти похожие ветки
← →
Pit © (2006-01-31 21:25) [0]Помогите решить проблему, после выполнения, пропадает 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.
← →
Rouse_ © (2006-01-31 21:36) [1]
> TheWindow := FindWindow(nil," My Computer");
результат этой функции по всей видимости ноль лежащий в TheWindow ?
← →
kaZaNoVa © (2006-01-31 21:55) [2]Pit © (31.01.06 21:25)
> TheWindow := FindWindow(nil," My Computer");
> TerminateProcess(ProcessHandle,4);
ты убиваешь Explorer и конечно пропадет оболочка ..
а в чем смысл кода? убивать приложение по окну ?
← →
Pit © (2006-01-31 22:12) [3]> TheWindow := FindWindow(nil," My Computer");
результат этой функции по всей видимости ноль лежащий в TheWindow ?
По всей видимости это так.
> kaZaNoVa
Да код убивает приложение по окну, но я не пойму по чему пропадает оболочка Explorer и почему когда убиваешь
зависший блокнот или любое другое зависшее приложение пропадает оболочка Explorer, любое нормально работающее окно убивает без проблем.
← →
Игорь Шевченко © (2006-01-31 22:29) [4]Возвращаемое функциями значение надо проверять.
← →
Pit © (2006-01-31 22:38) [5]Удалено модератором
← →
Rouse_ © (2006-02-01 10:25) [6]
> По всей видимости это так.
Но соответвтует десктопу. Его ты и грохаешь...
← →
kaZaNoVa © (2006-02-01 11:59) [7]Pit © (31.01.06 22:12) [3]
для выяснения ошибок можно еще попробовать:MessageBox(0,Pchar(SysErrorMessage(GetLastError)),Pchar(Inttostr(GetLastError)),0);
← →
Pit © (2006-02-01 12:23) [8]на это MessageBox(0,Pchar(SysErrorMessage(GetLastError)),Pchar(Inttostr(GetLastError)),0);
пишит
The operation completed successfully
← →
Pit © (2006-02-01 12:33) [9]Попробуй сам вот это
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:39) [10]Почему при таком раскладе пропадает дектоп
TheWindow := FindWindow(nil,"Любое зависшее приложение");
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
← →
kaZaNoVa © (2006-02-01 12:42) [11]Pit © (01.02.06 12:39) [10]
> "Любое зависшее приложение"
а по какому принципу приложение считается "зависшим" ?
← →
Pit © (2006-02-01 12:49) [12]Например открываешь блокнот и пихаешь туда 100 мегабайт текста.
Я пробую на 86 примерно.
Когда он виснит пытаюсь его убить, дальше знаешь сам.
← →
kaZaNoVa © (2006-02-01 13:18) [13]Pit © (01.02.06 12:49) [12]
забавно, но ты прав .. у меня так же ..
0-лей там не наблюдал, тока другой ID окна наGetWindowText
- выдаёт калькулятор а наGetWindowThreadProcessID
- Explorer (!) ...
← →
kaZaNoVa © (2006-02-01 13:25) [14]при чем разницы не было, от кого был запущен калькулятор .. (родительский процесс) , следовательно думаю проблема в "некорретном" идентификаторе или просто "не том" который возвращет
FindWindow
.. (ноGetWindowText
почему-то нормально с ним работает)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c