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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hwnd рабочего стола, если отключен explorer 
:(
    Опции темы
homolibere
  Дата 16.4.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а как вот узнать хендл "рабочего стола", если сам шел отключен... то есть explorer.exe убит в процессах (нет ни трея ни таскбара) и повесить на эту область (незнаю даже как назвать, рабочим столом - это уже не считается) хук на мыш

на какой хендл в общем хук-то вешать?
PM MAIL   Вверх
Yanis
Дата 16.4.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(homolibere @  16.4.2007,  18:20 Найти цитируемый пост)
на какой хендл в общем хук-то вешать?

А как ты его вешаешь, когда explorer работает?


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


Новичок



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

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



Код

unit MouseHook;

interface

uses  Windows, Messages, Sysutils;

procedure MousHook(hWin: HWND);

implementation

var
  Msg:TMsg;
  hHook:THandle;
  Mmsg:Longint;
  ShellHwnd:Hwnd;

function ShellWindow: HWND;
 type
   TGetShellWindow = function(): HWND; stdcall;
 var
   hUser32: THandle;
   GetShellWindow: TGetShellWindow;
 begin
   Result := 0;
   hUser32 := GetModuleHandle('user32.dll');
   if (hUser32 > 0) then
   begin
     @GetShellWindow := GetProcAddress(hUser32, 'GetShellWindow');
     if Assigned(GetShellWindow) then
     begin
       Result := GetShellWindow;
     end;
   end;
 end;


function Mous_Hook(Code: Integer; WParam: wParam; LParam: lParam): LRESULT stdcall;
begin
 If Code=HC_ACTION then
 begin
  case wParam of
  WM_LBUTTONDOWN: Messagebox(ShellHwnd,PChar(inttostr(wParam)), nil, mb_Ok);
  WM_RBUTTONDOWN: Messagebox(ShellHwnd,PChar(inttostr(wParam)), nil, mb_Ok);
  end;
 end; 
result:=0;
end;

procedure MousHook(hWin: HWND);
var
   Param: Longint;
begin
ShellHwnd:=hWin;
hHook := SetWindowsHookEx(WH_MOUSE, Mous_Hook, 0, GetWindowThreadProcessId(ShellWindow));
  if hHook = 0 then exit;
  while GetMessage(Msg, ShellWindow, 0, 0) do
  begin
    //TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  UnhookWindowsHookEx(hHook);
end;

end.


и вот тут hHook := SetWindowsHookEx(WH_MOUSE, Mous_Hook, 0, GetWindowThreadProcessId(ShellWindow));, как я полагаю вместо GetWindowThreadProcessId(ShellWindow) чего-то вставить надо, а вот что и помогите мне понять... плз
PM MAIL   Вверх
Yanis
Дата 16.4.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Библия гласит:
Цитата(MSDN)
dwThreadId
[in] Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread. 

Так что можно не париться и смело писать 0. А вообще функция GetDesktopWindow возвращает верное (читай нужное) значение даже при мёртвом explorer. Ибо его рабочий стол это не тот рабочий стол, который понимается в Win SDK.

Это сообщение отредактировал(а) Yanis - 16.4.2007, 19:39


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


Новичок



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

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



ну а почему же оно не работает, хук постоянно возвращает ноль...
PM MAIL   Вверх
try_to_get
  Дата 17.4.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



HWND Рабочего стола равен 0  smile 


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
Yanis
Дата 17.4.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(try_to_get @  17.4.2007,  20:46 Найти цитируемый пост)
HWND Рабочего стола равен 0

Правда что ли? Ну ты даёшь! Я чуть со смеху не умер.


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


Опытный
**


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

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



Код

program DrawE;

uses
  Messages,
  Windows;

var
  hc: HDC;
begin
  hc:= GetDC(0);
  Ellipse(hc,0,0,100,100);
  DeleteDC(hc);
end.


Откомпилируй и убедись сам, на рабочем столе рисует эллипс  smile 


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
Yanis
Дата 17.4.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



try_to_get
Не надо вводить людей в заблуждение. А лично меня не надо лечить.

Цитата(try_to_get @  17.4.2007,  22:07 Найти цитируемый пост)
Откомпилируй и убедись сам, на рабочем столе рисует эллипс

Да мне и компилировать не надо. Я такие «круги» 4 года назад сам рисовал и радовался до безкрайности.

К слову сказать, у тебя в коде ошибка.

Это сообщение отредактировал(а) Yanis - 17.4.2007, 22:54


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


Новичок



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

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



ребят, ну а если по делу, то что делать? как быть?
PM MAIL   Вверх
try_to_get
  Дата 18.4.2007, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Yanis И где ты увидел ошибку??? 


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
Yanis
Дата 18.4.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(homolibere @  16.4.2007,  20:10 Найти цитируемый пост)
hHook := SetWindowsHookEx(WH_MOUSE, Mous_Hook, 0, GetWindowThreadProcessId(ShellWindow));

Я же сказал, что можно писать 0. Или вместо ShellWindow пиши GetDesktopWindow. Попробуй оба эти варианта, если что пиши.

Цитата(try_to_get @  18.4.2007,  07:23 Найти цитируемый пост)
Yanis И где ты увидел ошибку??? 

Зачем же так сурово с контекстом устройства. Не удалять надо, но отпускать его smile

Это сообщение отредактировал(а) Yanis - 18.4.2007, 10:00


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


Эксперт
***


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

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



Цитата(try_to_get @  17.4.2007,  19:46 Найти цитируемый пост)
HWND Рабочего стола равен 0    


MSDN
Почитай smile 

Особенно про это:
Цитата

  [in] Handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen. 


Добавлено @ 10:12
Цитата(Yanis @  18.4.2007,  09:58 Найти цитируемый пост)
Зачем же так сурово с контекстом устройства. Не удалять надо, но отпускать его 

Шоб боялись smile


Это сообщение отредактировал(а) Rennigth - 18.4.2007, 10:13


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


Опытный
**


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

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



Цитата(Yanis @ 18.4.2007,  09:58)
Зачем же так сурово с контекстом устройства. Не удалять надо, но отпускать его smile

Ну извините, погорячился!
Так пойдет:
Код

ReleaseDC(0,hc);


Добавлено через 2 минуты и 51 секунду
"Беги друг в свой лес, ты свободен!" (из мультфильма Сезон Охоты)


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
bems
Дата 23.4.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(try_to_get @  17.4.2007,  21:07 Найти цитируемый пост)
на рабочем столе рисует эллипс  
не на рабочем столе, а на всем экране



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1228 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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