Форум: "WinAPI";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПомогите с 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.028 c