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

Вниз

Помогите с Hook - убийцей мыши и клавы   Найти похожие ветки 

 
fafCracker   (2005-01-18 15:15) [0]

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;


 
Георгий Бедный   (2005-01-29 22:20) [1]

У меня похожая история:
Надо сделать такое мемо, где правый клик не вызывает попуп, а выполняет другое действие (у меня копирует строку в буфер). Только убить даже в своей программе никак!


 
GuAV ©   (2005-01-29 22:25) [2]

WM_NULL ?


 
GrayFace ©   (2005-01-30 06:04) [3]

Георгий Бедный   (29.01.05 22:20) [1]
procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
 var Handled: Boolean);
begin
 Handled:=true;
end;


 
Георгий Бедный   (2005-01-30 18:24) [4]

Спасибо! Попробую.


 
GrayFace ©   (2005-01-31 08:38) [5]

fafCracker   (18.01.05 15:15)
А ты пробовал ее Restorator"ом (или ResHacker"ом) отучить от правой кнопки?


 
Георгий Бедный   (2005-02-13 14:32) [6]

НЕТ.



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

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

Наверх




Память: 0.48 MB
Время: 0.031 c
14-1110195108
MU
2005-03-07 14:31
2005.03.27
FreeVCS ->JediVCS


1-1110564923
Chroot
2005-03-11 21:15
2005.03.27
Прожиг дисков и печать документов


3-1109237034
kivadim
2005-02-24 12:23
2005.03.27
изменение кодировки в базе MSSQL


1-1110880022
Muk
2005-03-15 12:47
2005.03.27
Программно нажать клавишу


1-1110563816
Evg12
2005-03-11 20:56
2005.03.27
Собрать несколько файлов в один.