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

Вниз

Странный глюк   Найти похожие ветки 

 
}{enon   (2003-03-05 16:23) [0]

Есть DLL, которая ловит сообщения и, если это WM_PAINT, посылает моей проге WM_PAINTHOOK (Собственное сообщение). Всё работает (программа получает сообщения и реагирует на них), но глючит таскбар - не вызывается меню "пуск" и контексные менюшки, а свёрнутые окна не восстанавливаются. Кто-нибудь знает, в чём дело?


 
DVM   (2003-03-05 16:28) [1]

так ты отделяй свои сообщения от чужих, свои лови, чужие дальше передавай.


 
Игорь Шевченко   (2003-03-05 16:32) [2]

Дело в 17-ой строке


 
}{enon   (2003-03-05 19:14) [3]

2 DVM
Я так и делаю (вроде бы)

2 Игорь Шевченко
И как она должна выглядеть? Сорри, не дал исходник - инет рухнул вслед за таскбаром :(

Сделал на основе примера с этого сайта:
library Hooks;

uses
SysUtils,
Windows,
Messages,
Forms;

const
MMFName: PChar = "MyMMF";

type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: HWND;
MyAppWnd: HWND;
end;

var
GlobalData: PGlobalDLLData;
MMFHandle: THandle;
WM_PAINTHOOK: Cardinal;

function PaintProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
AppWnd: HWND;
f: textfile;
m: tagMSG;
begin
if code < 0 then
begin
Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Exit;
end;
PeekMessage(m,0,0,0,PM_REMOVE);
if m.message=WM_PAINT then
SendMessage(GlobalData^.MyAppWnd, WM_PAINTHOOK, m.hwnd, 0);
CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Result:= 0;
end;

procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch=true then
begin
GlobalData^.SysHook := SetWindowsHookEx(WH_GETMESSAGE, @PaintProc, HInstance, 0);
GlobalData^.MyAppWnd:= hMainProg;
end
else
UnhookWindowsHookEx(GlobalData^.SysHook)
end;

procedure OpenGlobalData();
begin
WM_PAINTHOOK:= RegisterWindowMessage("WM_PAINTHOOK");
MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
end;

procedure CloseGlobalData();
begin
UnmapViewOfFile(GlobalData);
CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;

exports hook;

begin
DLLProc:= @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.



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

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

Наверх





Память: 0.45 MB
Время: 0.006 c
8-12836
Shluz
2003-01-26 23:54
2003.05.05
Полноэкранное видео в Delphi


3-12651
RDA
2003-04-16 08:51
2003.05.05
Столбцы-массивы в Interbase


1-12762
R
2003-04-22 04:05
2003.05.05
ScrollBars


3-12662
Silver_
2003-04-16 14:30
2003.05.05
SQL - значения некого поля чтоб не повторялись


11-12679
Alexei Dragoner
2002-07-26 18:32
2003.05.05
Еще раз о Form.HasBorder (Form.Handle умер :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский