Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Юный техник* | Помогите с Hook - убийцей мыши и клавы

Ответить
Настройки темы
*Юный техник* | Помогите с Hook - убийцей мыши и клавы

Аватара для SASHA 333

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: hasherfrog
Дата: 19-01-2005
Delphi5, WinXP
1. // Проблема с мышью: В чужом окне кликаю правой мышкой. При этом появляется PopupMenu. Мне это страх
//как ненадо. Хочу вообще отменить правый клик (он мне там в проге не нужен)
//Ан вот не получается.
//Та прога на чьем окне кликаю виснет если я пишу (там где вопросики) WM_MOUSELAST
//или 100000 или что другое. Чего бы ей такое в ответ послать, чтоб меню не
//появлялось (нежное "умри")


2. //Проблема с клвиатурой. Спасибо за подсказку на счет WM_KEYLAST для того чтобы (см. ниже) убивать
//сообщения от нажатия кнопок на клаве. Но вот незадача - как убить нажатие
//кнопки ALT. Она прямо не убиенная какая-то. Я и тка и сяк, а она все жмется и жмется (и левая и правая)
//Как же убить ее клик?

Ответ даже на один из этих вопросов меня крайне обрадует.

Вот листинг библиотеки
Код: Выделить весь код
library Dll_KeyboardHook;
uses
  Windows,  Messages,  SysUtils,  Classes,  Graphics,  Controls, Forms,  Dialogs;
var
 SysHook : HHook = 0; Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word;  lParam : longint) : longint; stdcall;
 begin
  CallNextHookEx(SysHook, Code, wParam, lParam); // Передать сообщение другим ловушкам в системе
 if code = HC_ACTION then  // Проверяю сообщение
 begin
   Wnd := TMsg(Pointer(lParam)^).hwnd;    // Получаю идентификатор окна сгенерировавшего сообщение

//Здесь надо нежно убить сообщение от правой кнопки
//Замена на клик правой и многое другое не прет что то 
   if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then TMsg(Pointer(lParam)^).message:=?????????????????;                          //WM_MOUSELAST
   if TMsg(Pointer(lParam)^).message =WM_KEYDOWN then
   begin
     Case (TMsg(Pointer(lParam)^).wParam) of
       //Эти убивыются
       vk_Back: TMsg(Pointer(lParam)^).message:=WM_KEYLAST;
       vk_Tab:TMsg(Pointer(lParam)^).message:=WM_KEYLAST;
       vk_Clear:TMsg(Pointer(lParam)^).message:=WM_KEYLAST;

       //Тут она гадюка неубиенная (и левая и правая)
//       vk_Menu:ShowMessage('Alt');//TMsg(Pointer(lParam)^).message:=WM_KEYLAST; //Alt
//       VK_LMENU{164}:TMsg(Pointer(lParam)^).message:=WM_KEYLAST; //ShowMessage('Левая Alt');
//       VK_RMENU{165}:TMsg(Pointer(lParam)^).message:=WM_KEYLAST;//ShowMessage('Правая Alt');

       end;//case
  end;
 end;
end;
// Процедура запуска.
procedure RunStopHook(State : Boolean) export; stdcall;
begin if State=true then begin
   // Запускаем ловушку.
   SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
 end
 else
 begin
   // Отключить ловушку.
   UnhookWindowsHookEx(SysHook); SysHook := 0;
 end;
end;
exports RunStopHook index 1;
begin
end.
В программе:
Код: Выделить весь код
...
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
    //Библиотека перехвата клавиатуры и мыши
  procedure RunStopHook(State : Boolean) stdcall; external 'DLL_KeyboardHook.dll' index 1;
...


procedure TForm1.FormShow(Sender: TObject);
begin
RunStopHook(true);
end
procedure TForm1.FormDestroy(Sender: TObject);
begin
RunStopHook(false);
end;

Отправлено: 15:17, 18-01-2005

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Кейлоггер на дельфи. Вдруг кому ещё надо
http://www.delphifr.com/code.aspx?ID=29357

Отправлено: 12:58, 15-02-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Kroc

Пользователь


Сообщения: 73
Благодарности: 0

Профиль | Отправить PM | Цитировать


SASHA 333[/b]
А попробуй не выпускать сообщение из ловушки...
Для этого твоя функция SysMsgProc должна вернуть ненулевое значение.

Отправлено: 01:50, 21-02-2005 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Юный техник* | Помогите с Hook - убийцей мыши и клавы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] Hook ganselo Программирование и базы данных 5 05-06-2009 17:32
*Юный техник* | Защита программы a-la shareware AL CAPONE Программирование и базы данных 8 04-04-2005 16:35
*Юный техник* | Как добавить функцию? DIMAIN Программирование и базы данных 9 15-02-2005 00:22
Delphi - Hook in delphi Interceptor Программирование и базы данных 1 27-08-2004 21:31
SysTray, Hook, WM_COPYDATA KirillS Программирование и базы данных 14 10-06-2003 22:01




 
Переход