Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TerminateProcess, Нето закрывает 
V
    Опции темы
Ak47black
  Дата 16.5.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здраствуйте.
Вообшем у меня такая ситуация получилась
Вот код
Код

  GetWindowThreadProcessId(h, @dPID);
  AppWnd:= OpenProcess(PROCESS_ALL_ACCESS, True, dPID);
  TerminateProcess(AppWnd,0);
  CloseHandle(AppWnd);

Который закрывает любое окно по Handle.
Но когда я пытаюсь при помоши этого кода закрыть например окно 'My Computer', то не только это окно закрываеться ,а сам Explorer.exe тоже, а мне нужно закрыть в этом случае только само окно 'My Computer'.
Подскажите пожалуйста как-бы мне тут сделать?  smile 
PM MAIL   Вверх
Yanis
Дата 16.5.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Ak47black
Это вопрос для другого раздела! Последнее китайское предупреждение!


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 16.5.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Ak47black
TerminateProcess убивает процесс, а не окно...



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Yanis
Дата 16.5.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(Ak47black @  16.5.2007,  15:19 Найти цитируемый пост)
Подскажите пожалуйста как-бы мне тут сделать?

Покажи строчку которой закрывается окно.
Подсказка: её тут нет.
Это код убивания процесса, а не закрытия окна. Окно закрывается посылом сообщения WM_CLOSE этому окну.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 16.5.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



А тфу не заметил что AppWnd это хэндл процесса, ща посмотрим что к чему.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ak47black
Дата 16.5.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Цитата

Это вопрос для другого раздела! Последнее китайское предупреждение! 

Сори, промазал, знаю надо было в WinApi

Но   
Код

SendMessage(h, WM_CLOSE, 0, 0);

Чето у меня не идёт  smile .
PM MAIL   Вверх
W4FhLF
Дата 16.5.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Handle правильно опеределил? Попробуй ещё WM_DESTROY


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Ak47black
Дата 16.5.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Цитата

WM_DESTROY 

Чтото закрывает, ео не все окно
Цитата

Handle правильно опеределил?

Ну вот так я определяю
Код

var
  Wnd : hWnd;
  buff: array [0..127] of Char;
  lpFilename: string;
  TempIcon: TIcon;
  i: Integer;
begin
  for i:=0 to Length(VisibleWnds)-1 do
  begin
    VisibleWnds[i].Icon.Free;
  end;
  SetLength(VisibleWnds,0);
  
  Wnd := GetWindow(Application.Handle, gw_HWndFirst);
  while Wnd <> 0 do
  begin
    if IsWindowEnabled(Wnd) and IsWindowVisible(Wnd) and (GetWindow(Wnd, gw_Owner) = 0) and (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
    begin
      if StrPas(buff)<>'Program Manager' then
      begin
        SetLength(VisibleWnds, Length(VisibleWnds)+1);
        GetWindowText(Wnd, buff, sizeof(buff));
        SetLength(lpFilename, MAX_PATH);
        VisibleWnds[Length(VisibleWnds)-1].Icon:= TIcon.Create;
        VisibleWnds[Length(VisibleWnds)-1].Icon.Handle:= CopyIcon(GetClassLong(Wnd, GCL_HICONSM ));

        VisibleWnds[Length(VisibleWnds)-1].Caption:= StrPas(buff);
        if AppIsResponding(Wnd) then
          VisibleWnds[Length(VisibleWnds)-1].Status:= 'Running' else VisibleWnds[Length(VisibleWnds)-1].Status:= 'Not Responding';
        VisibleWnds[Length(VisibleWnds)-1].Handle:= Wnd;
      end;
    end;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  end;
end;


PM MAIL   Вверх
Rennigth
Дата 16.5.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Ak47black, С этими окнами все посложнее, его даже и Voyeur не закрывает..  smile, бум думать кто че перехватывает...


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ak47black
Дата 16.5.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



 smile  ну вот я тож ненахожу способа.
PM MAIL   Вверх
Rennigth
Дата 16.5.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Ak47black, Как вариант лови вот так, долго не тестил но работает вроде:
Код

const
  KernrelDll = 'Kernel32.dll';
  THREAD_TERMINATE = $0001;

function OpenThread(dwDesiredAccess: Cardinal; bInheritHandle: Bool;
  dwThreadId: Cardinal): Cardinal; stdcall; external KernrelDll;

procedure TForm1.FormCreate(Sender: TObject);
var
  hThread, hThreadID, hProcessID: DWORD;
  hWindow: DWORD;
begin
  hWindow := FindWindow(nil, PChar('Мой компьютер'));
  if hWindow > 0 then
  begin
    hThreadID := GetWindowThreadProcessId(hWindow, @hProcessID);
    if hThreadID > 0 then
    begin
      hThread := OpenThread(THREAD_TERMINATE, False, hThreadID);
      if hThread > 0 then
      begin
        if not TerminateThread(hThread, 0) then
          RaiseLastOSError;
        CloseHandle(hThread);
      end;
    end;
  end;
end;

end;


Это сообщение отредактировал(а) Rennigth - 16.5.2007, 15:09


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rouse_
Дата 16.5.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Цитата(Ak47black @  16.5.2007,  15:19 Найти цитируемый пост)
Но когда я пытаюсь при помоши этого кода закрыть например окно 'My Computer', то не только это окно закрываеться ,а сам Explorer.exe тоже, а мне нужно закрыть в этом случае только само окно 'My Computer'

А как ты думаешь, какому процессу принадлежит окно 'My Computer'?
Для закрытия окна делай: 
Код

SendMessage(HWnd, WM_SYSCOMMAND, SC_CLOSE, 0);



--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 16.5.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Rouse_
А в чем отличие в данном случае между:
Код

  SendMessage(hWindow, WM_SYSCOMMAND, SC_CLOSE, 0);

и
Код

  SendMessage(hWindow, WM_CLOSE, 0, 0);




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rouse_
Дата 16.5.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



В том что WM_CLOSE не обрабатывается эксплорером.


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 16.5.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Rouse_, Понятно smile Риторические вопросы аля "почему" задавать не буду  smile 
Зьлобный эксплорер какой.  smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0975 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.