Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

Не работает ловушка....   Найти похожие ветки 

 
Катеринка   (2007-04-18 12:33) [0]

Уже 2 дня бьюсь над созданием ловушки под Windows
Вроде и длл-ка подключается, а эффекта никакого. Помогите, плз.
Это код  dll:
library SendKey;

uses
 SysUtils,
 Classes,
 WinTypes, WinProcs, Messages;

{$R *.res}
const //пользовательские сообщения
wm_NextShow_Event = wm_User + 133;
wm_PrevShow_Event = wm_User + 134;

var
SaveExitProc : Pointer;
//handle для ловушки
HookHandle: hHook =0;

{=====================собственно ловушка====================}
function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint; export; stdcall;
var
H: HWND;
begin
//если Code>=0, то ловушка может обработать событие
if Code >= 0 then
begin
 //это те клавиши?
 if ((wParam = VK_ADD)or(wParam = VK_SUBTRACT)) and (lParam and $40000000 = 0) then
 begin
   //ищем окно по имени класса и по заголовку
   H:= FindWindow("TfmMain", "Neuro");
   //посылаем сообщение
   if wParam = VK_ADD then SendMessage(H, wm_NextShow_Event, 0, 0)
   else SendMessage(H, wm_PrevShow_Event, 0, 0);
 end;
//если 0, то система должна дальше обработать это событие
//если 1 - нет
Result:=0;
end
else
 //если Code<0, то нужно вызвать следующую ловушку
 Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
end;

{============при выгрузке DLL надо снять ловушку============}
procedure LocalExitProc; far; stdcall;
begin
if HookHandle<>0 then
begin
 UnhookWindowsHookEx(HookHandle);
 ExitProc := SaveExitProc;
end;
end;

{=========инициализация DLL при загрузке ее в память========}
begin
//устанавливаем ловушку
HookHandle:= SetWindowsHookEx(wh_Keyboard, @Key_Hook,hInstance, 0);
if HookHandle = 0 then MessageBox(0, "Unable to set hook!", "Error", mb_Ok)
else begin
 SaveExitProc := ExitProc;
 ExitProc := @LocalExitProc;
end;
end.


А это код использующего ее юнита:
unit MainUnit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics,
 Controls, Forms, Dialogs, Menus,
 JvComponentBase, JvTrayIcon, StdCtrls;

const //пользовательские сообщения
wm_NextShow_Event = wm_User + 133;
wm_PrevShow_Event = wm_User + 134;

type
 TfmMain = class(TForm)
....................................
   Label1: TLabel;
....................................
 private
   //обработчики сообщений
   procedure WM_NextMSG (Var M : TMessage); message wm_NextShow_Event;
   procedure WM_PrevMSG (Var M : TMessage); message wm_PrevShow_Event;
 public
 end;

var
 P: Pointer;
 fmMain: TfmMain;
.....................................

implementation
...............................
{$R *.dfm}

...............................

{==========================================================}
 {Часть программы, отвечающая за перехват нажатий клавиш
                         в Windows}

{========================загрузка DLL=======================}
function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint; stdcall; far; external "SendKey.dll";

procedure TfmMain.WM_NextMSG (Var M : TMessage);
begin
Label1.Caption:="Next message";
//MessageDlg("+",mtError,[mbOk],0);
end;

procedure TfmMain.WM_PrevMSG (Var M : TMessage);
begin
Label1.Caption:="Previous message";
//MessageDlg("-",mtError,[mbOk],0);
end;

{===========================================================}
procedure TfmMain.FormCreate(Sender: TObject);
begin
................
P:=@Key_Hook
// так указано в учебнике, якобы для того чтоб dll не выгрузилась из памяти, т.к. не используется или что-то //вроде того. Но с этой строкой выдается ошибка работы приложения, а без нее приложение запускается, но
// с Label1 не происходит ни каких изменений
end;

end.


 
Сергей М. ©   (2007-04-18 12:55) [1]

Задача-то твоя как звучит ?

Судя по твоему коду DLL для решения задачи вооще не нужна ..



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

Текущий архив: 2007.10.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
15-1190624861
tytus
2007-09-24 13:07
2007.10.21
Delphi2007 for Win32.


15-1190136505
iop
2007-09-18 21:28
2007.10.21
А почему мы одних любим...


2-1190788824
Семенов
2007-09-26 10:40
2007.10.21
Фильтр


15-1190196831
de.
2007-09-19 14:13
2007.10.21
FireBird


15-1190123382
Альберт_
2007-09-18 17:49
2007.10.21
какой размер минимального activex ?