Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пропадает 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 ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо