Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.041 c
3-1109593023
mrAld
2005-02-28 15:17
2005.03.27
ADONET и ADO


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


3-1108722587
Phoenix9000
2005-02-18 13:29
2005.03.27
Срочно. База данных Microsoft Access и программа для работы с ней


1-1111037308
User13
2005-03-17 08:28
2005.03.27
Delphi & Excel


1-1110477507
greysers
2005-03-10 20:58
2005.03.27
Как определить что OLE automation object закончил свою работу ?





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