两年没写程序了,重新拿起来手都生了,今天凌晨完成了。谢谢这里的朋友帮助,散分
作了一个触摸屏的程序,现将鼠标拖拽模拟滚轮的程序贴出来,请大家指正。
钩子程序MouseHook.cpp
//---------------------------------------------------------------------------
#pragma option -zRShareSEG // 改变缺省数据段名
#pragma option -zTShareCLASS // 改变缺省数据类名
#include "windows.h"
HINSTANCE hHook=NULL; //钩子句柄
long start=0,end=0; //记录鼠标拖动的位置
BOOL mark=false; //鼠标是否拖动中
#pragma hdrstop
#include <vcl.h>
#include <windows.h>
#pragma argsused
#pragma data_seg(“SharedVar")
#pragma data_seg()
//DLL输出的勾子函数
extern "C" __declspec(dllexport)
LRESULT CALLBACK MouseHookProc(
int nCode,
WPARAM wParam, //虚键代码
LPARAM lParam // 击键消息的信息
)
{
short nState;
TMouseHookStruct *MouseHookStruct;
if (wParam==WM_LBUTTONDOWN) //鼠标左键按下开始即鼠标位置
{
mark=true; //鼠标开始拖动
MouseHookStruct=(TMouseHookStruct *)lParam;
start=MouseHookStruct->pt.y; //记录鼠标拖动开始位置
}else if (wParam==WM_LBUTTONUP)
{
mark=false;
MouseHookStruct=(TMouseHookStruct *)lParam;
end=MouseHookStruct->pt.y;
long pos;
pos=end-start;
start=0;
end=0;
if (pos>40){
SendMessage(MouseHookStruct->hwnd,WM_KEYDOWN,VK_DOWN,0);
SendMessage(MouseHookStruct->hwnd,WM_KEYUP,VK_DOWN,0);
} else if (pos<40)
{
SendMessage(MouseHookStruct->hwnd,WM_KEYDOWN,VK_UP,0);
SendMessage(MouseHookStruct->hwnd,WM_KEYUP,VK_UP,0);
}
}else if (wParam==WM_MOUSEMOVE) {
if (mark==true)
{
MouseHookStruct=(TMouseHookStruct *)lParam;
end=MouseHookStruct->pt.y;
long pos;
pos=end-start;
if (pos>40){
SendMessage(MouseHookStruct->hwnd,WM_KEYDOWN,VK_DOWN,0);
SendMessage(MouseHookStruct->hwnd,WM_KEYUP,VK_DOWN,0);
start=start-40;
}else if(pos<-40){
SendMessage(MouseHookStruct->hwnd,WM_KEYDOWN,VK_UP,0);
SendMessage(MouseHookStruct->hwnd,WM_KEYUP,VK_UP,0);
start=start+40;
}
}
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
//-----------------------------------------------------
extern "C" void __declspec(dllexport) EnableMouseHook(void)
{
hHook= SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,HInstance,0);
}
//----------------------------------------------------------
extern "C" void __declspec(dllexport) DisableMouseHook(void)
{
UnhookWindowsHookEx(hHook);
}
//----------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE c, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
MouseHook.def
SEGMENTS ShareSEG CLASS 'ShareCLASS' SHARED