C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Хук клавиш мыши  (Прочитано 961 раз)
evgovs1991
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 1


Хук клавиш мыши
« : 16 Ноябрь 2015, 21:48:10 »

Создать ловушку сообщений мыши в виде функции DLL.
Функция ловушки:
При нажатии правой клавиши мыши на заголовке Вашего текстового редактора, он закрывается.
Я делал статическое связывание. Не срабатывает хук мыши почему то. Помогите найти ошибку

Сама программа
Код
//---------------------------------------------------------------------------
 
#include
#pragma hdrstop
 
#include "Unit2.h"
#include "Fil1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::WMDropFiles(TWMDropFiles &message)
{
 
}
void __fastcall TForm2::Button1Click(TObject *Sender)
{
 
if(OpenTextFileDialog1->Execute())
RichEdit1->Lines->LoadFromFile(OpenTextFileDialog1->FileName) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
if(SaveTextFileDialog1->Execute())
RichEdit1->Lines->SaveToFile(SaveTextFileDialog1->FileName)   ;
 
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button3Click(TObject *Sender)
{
if(FontDialog1->Execute()){
RichEdit1->SelAttributes->Assign(FontDialog1->Font);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDestroy(TObject *Sender)
{
RemoveHookMouse();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
       StartMouse();
}
//---------------------------------------------------------------------------
 
Библиотека dll для хука мыши
файл Fil1.h
Код
#ifndef _FILE1_H
#define _FILE1_H
#ifdef __DLL__
#define DLL_EI __declspec(dllexport)
#else
#define DLL_EI __declspec(dllexport)
#endif
extern "C" void DLL_EI  StartMouse();
extern "C" void DLL_EI  RemoveHookMouse();
#endif
 
файл File1.cpp
Код
#include 
#include"Fil1.h"
#include
 
#pragma hdrstop
 
#pragma argsused
void RemoveAllHooks();
// дескрипторы ловушек
HHOOK HMouse  = 0;
// ловушка мыши
LRESULT CALLBACK Key_HookMouse(int code, WPARAM wParam, LPARAM lParam)
{
if (code >=0){
if(wParam == WM_RBUTTONDOWN && PMouseHookStruct(lParam)->wHitTestCode == HTCAPTION)
SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_CLOSE, 0);
}
return CallNextHookEx(HMouse, code, wParam, lParam);
}
void StartMouse()
// установка ловушки мыши
{
if (HMouse == 0)
 HMouse = SetWindowsHookEx(WH_MOUSE, Key_HookMouse,HInstance, 0);
if (HMouse == 0)
  MessageBox(0, "Ловушка не установилась!", "Ошибка", MB_OK);
}
void RemoveHookMouse()
// удаление ловушки мыши
{
if (HMouse!=0)
{
  UnhookWindowsHookEx(HMouse);
  HMouse = 0;
}
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if((reason == DLL_THREAD_DETACH) || (reason == DLL_PROCESS_DETACH))
{
 // удаление ловушки
 if (HMouse != 0)
UnhookWindowsHookEx(HMouse);
}
return 1;
}
 

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.127 секунд. Запросов: 21.