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

Вниз

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

 
Катеринка   (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 вся ветка

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

Наверх




Память: 0.45 MB
Время: 0.043 c
15-1190556185
Суслик
2007-09-23 18:03
2007.10.21
Функциональные языки


15-1190281655
Flikik
2007-09-20 13:47
2007.10.21
Delphi


15-1190111223
Галинка
2007-09-18 14:27
2007.10.21
Массивы переменной длины в Си


2-1191150933
SveTTT
2007-09-30 15:15
2007.10.21
Привязка клавиатуры к кнопкам, у которых используется Tag


15-1190306195
Александр Иванов
2007-09-20 20:36
2007.10.21
Подскажите фотоаппарат (тема с программированием связана :)





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