Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

перехват сообщения предназначенного для другого окна   Найти похожие ветки 

 
Serguar   (2004-08-30 15:13) [0]

Здравствуйте.
Как можно перехватить сообщения, которые предназначены для других окон Windows. Конкретно, мне необходимо поймать сообщение об обновлении Рабочего стола. Как это делается.


 
Serguar   (2004-09-01 14:59) [1]

Подскажите хотя бы что делаю не так.

в dll
var
 SysHook: HWND;

function SysMsgProc(code: integer; wParam: word; lParam: longint): longint; stdcall;
begin
 { фильтрация пришедщих сообщений: как фильтровать(какой тип сообщения ловить ?)
   как обновить знаю (SendMessage(FindWindow("Progman", "Program Manager")), WM_COMMAND, $A220), но не могу отловить это же сообщение в данной функции }
 Result := CallNextHookEx(SysHook, Code, wParam, lParam);
end;

procedure TranHook(switch : Boolean) export; stdcall;
begin
 if switch=true then begin
   SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
   if SysHook <> 0 then
     MessageBox(0, "TranHook OK", "TranDll", 0)
   else
     MessageBox(0, "TranHook Error !", "TranDll", 0);
 end
 else begin
   if UnhookWindowsHookEx(SysHook) then
     MessageBox(0, "TranHook exit ok", "TranDll", 0)
   else
     MessageBox(0, "TranHook exit error", "TranDll", 0);
 end;
end;

в приложении все как обычно:
при загрузке динамически загружаю функцию TranHook(True) из dll,
при выходе TranHook(False);


 
VMcL ©   (2004-09-01 15:25) [2]

>>Serguar  (01.09.04 14:59) [1]

>SendMessage(FindWindow("Progman", "Program Manager")), WM_COMMAND, $A220)

А откуда сведения, что обновление Рабочего стола может происходить только посредством посылки приведенного тобой сообщения?


 
Serguar   (2004-09-01 15:31) [3]

Да нет у меня таких сведений (я этого не и не утверждал), в том то все и дело. Мне бы и хотельсь знать при каких обстоятельствах это может происходить, что бы знать как ловить.


 
Digitman ©   (2004-09-01 16:14) [4]


> Подскажите хотя бы что делаю не так.


пока вроде бы все делаешь "так"

за исключением важной "поправки"

function SysMsgProc(code: integer; wParam: word; lParam: longint): longint; stdcall;
begin
if if Code >= HC_ACTION then
  begin
//здесь "фильтруй" то что тебе нужно, это уже тема не оносящийся к вопросу "так" или "не так"
  end;
Result := CallNextHookEx(SysHook, Code, wParam, lParam);
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.029 c
3-1094732636
bers
2004-09-09 16:23
2004.10.10
Добавить поля не потеряв данных


1-1096020892
П7
2004-09-24 14:14
2004.10.10
Позднее связываение Excel и OLE контейнер


8-1090322929
Popovich A.
2004-07-20 15:28
2004.10.10
Последовательный просмотр картинок


14-1095404297
Knight
2004-09-17 10:58
2004.10.10
Добрый день, весёлый час! Рады видеть нас у вас!!!


1-1096061325
Ivanov
2004-09-25 01:28
2004.10.10
"Свернуть" окно программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский