Создать ловушку сообщений мыши в виде функции 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;
}