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

Вниз

Проблема с SetWindowsHookEx   Найти похожие ветки 

 
APXi   (2007-08-08 16:11) [0]

Сначала прочитал несколько статей про хуки, сделал тестовый вариант, посмотрел несколько примеров и все с одним результатом, причем на 2 разных ПК. После установки мышиного хука, он посылает сообщения форме и все вроде бы номрально, но если запускать другие приложения в частности блокнот или explorer то пояляется ошибка, "Инструкция по адресу ХХХ обратилась к адресу ХХХ память не может быть read", причем ХХХ один и тотже адрес, как быть, уже 2 день бъюсь понять немогу. Помогите, пожалуйста.


const
 MMFName: PChar = "MyMM11F"; // èìÿ îáúåêòà ôàéëîâîãî îòîáðàæåíèÿ

{ñòðóêòóðà, ïîëÿ êîòîðîé áóäóò îòîáðàæåíû â ôàéë ïîäêà÷êè}
type
 PGlobalDLLData = ^TGlobalDLLData;
 TGlobalDLLData = packed record
   SysHook: HWND; // äåñêðèïòîð óñòàíîâëåííîé ëîâóøêè
   HandleForm: HWND;
   HookMessage: UINT;
 end;

var
 GlobalData: PGlobalDLLData;
 MMFHandle: THandle;

function MyProcHook(Code: integer; wParam: word; lParam: Longint):LongInt; stdCall;
begin
 if GlobalData <> nil
 then begin
   if code = HC_ACTION
   then begin
     SendMessage(GlobalData^.HandleForm, GlobalData^.HookMessage, wParam, lParam);
   end;
   result := CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam)//&#226;&#251;&#231;&#251;&#226;&#224;&#254; &#241;&#235;&#229;&#228;&#243;&#254;&#249;&#243;&#254; &#235;&#238;&#226;&#243;&#248;&#234;&#243;
 end
 else result := 1;
end;

procedure SetHook(aHandle: HWND; aHookMessage: UINT);stdCall; Export;
begin
 if GlobalData <> nil
 then begin
   GlobalData^.HandleForm := aHandle;
   GlobalData^.HookMessage := aHookMessage;
   GlobalData^.SysHook := SetWindowsHookEx(WH_MOUSE , @MyProcHook, hInstance, 0);//&#243;&#241;&#242;&#224;&#237;&#224;&#226;&#235;&#232;&#226;&#224;&#254; &#245;&#243;&#234;
 end;
end;


 
APXi   (2007-08-08 16:14) [1]


procedure UnHook;stdCall;Export;
begin
 if GlobalData <> nil
 then UnhookWindowsHookEx(GlobalData^.SysHook);//&#241;&#237;&#232;&#236;&#224;&#254; &#245;&#243;&#234;
end;

procedure OpenGlobalData();
begin
 MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);

 if MMFHandle = 0
 then MessageBox(0, "CreateFileMapping = 0", "Message from Exampel2/Process1", 0)
 else GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));

 if GlobalData = nil
 then begin
   CloseHandle(MMFHandle);
   MessageBox(0, "Can""t make MapViewOfFile", "Message from Exampel2/Process1", 0);
 end;
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//&#253;&#234;&#241;&#239;&#238;&#240;&#242;&#232;&#240;&#243;&#254; &#244;&#243;&#237;&#234;&#246;&#232;&#232;
SetHook,
Unhook;

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


 
Lacmus ©   (2007-08-08 16:28) [2]

procedure DLLEntryPoint(dwReason: DWord);

stdcall нужно убрать, какая версия Delphi ?


 
Сергей М. ©   (2007-08-08 16:37) [3]


> Сначала прочитал


Хво прочитал.


 
APXi   (2007-08-09 07:31) [4]

(2) 7 версия.
(3) Если такой умный, подскажи где ошибка


 
Сергей М. ©   (2007-08-09 08:32) [5]


> подскажи где ошибка


Ну как где ?

По адресу ХХХ, очевидно)

Ты куда столько stdcall"ов понатыкал, по делу и без дела ?)


 
APXi   (2007-08-09 08:36) [6]

Спасибо.
(5) Так было в примере.


 
Сергей М. ©   (2007-08-09 08:59) [7]


> Так было в примере


А вот не надо слепо передирать примеры !)

Примеры даются прежде всего для внимательного изучения логики, а не для копирования один-в-один в надежде на "авось оно заработает".

1. Разбирайся с соглашениями о вызовах - какие, где, как, зачем и почему они должны или не должны быть указавны в каждом конкретном случае.

2. Код ошибки ХХХ может быть весьма информативен в плане поиска строки исх.текста, вызвавшего эту ошибку. Разбирайся с меню Search -> Find Error ..



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

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

Наверх





Память: 0.47 MB
Время: 0.006 c
3-1194961356
andreoman
2007-11-13 16:42
2008.04.06
обрабатывать код ошибки сервера FB


3-1195200086
opoloXAI
2007-11-16 11:01
2008.04.06
Microsoft.Jet.OLEDB.4.0 : ошибка в строке "Sum()"


15-1203765630
vrem_
2008-02-23 14:20
2008.04.06
Подскажите программу или драйвер


2-1204485733
Дмитрий Патрушев
2008-03-02 22:22
2008.04.06
Net-статистика


15-1203510806
psa247
2008-02-20 15:33
2008.04.06
Доступ к ЛВС из удал. рабочего стола





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