⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 按键精灵.txt

📁 图像处理学习的一些心得
💻 TXT
字号:
//----------------------------------------------------------------
//    利用钩子实现全系统重复
//    
//
LRESULT CALLBACK RecHook(int code,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK PlayHook(int code,WPARAM wParam,LPARAM lParam);

HHOOK recHook,playHook;
EVENTMSG EventArray[1000];
int recordedEvent=0;
int playedEvent=0;

//以上是定义钩子和回掉函数
//---------------------------------------------------------------------

//以下分别为3个按钮  OnFunctionStart()  开始记录
//                   OnFunctionStop()   停止记录
//                   OnFunctionReplay() 回放记录
//

void 阿龙软件::OnFunctionStart() 
{
	// TODO: Add your command handler code here
	recordedEvent=0;
	recHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)RecHook,(HINSTANCE)AfxGetApp()->m_hInstance,0);
	
}

void 阿龙软件::OnFunctionStop() 
{
	// TODO: Add your command handler code here
	UnhookWindowsHookEx(recHook);
}

void 阿龙软件::OnFunctionReplay() 
{
	// TODO: Add your command handler code here
	playedEvent=0;
	playHook=SetWindowsHookEx(WH_JOURNALPLAYBACK,(HOOKPROC)PlayHook,(HINSTANCE)AfxGetApp()->m_hInstance,0);
}
//以下为回调函数,用来处理记录和回放的功能
LRESULT CALLBACK RecHook(int code,WPARAM wParam,LPARAM lParam)
{
	
	static int recOK=1;
	if(code<0)
		return CallNextHookEx(recHook,code,wParam,lParam);
	else if(code==HC_SYSMODALON)
		recOK=0;
	else if(code==HC_SYSMODALOFF)
		recOK=1;
	else if(recOK && (code==HC_ACTION))
	{
		EventArray[recordedEvent]= *((PEVENTMSG)lParam);
		recordedEvent++;
		if(recordedEvent==1000)
		{
			UnhookWindowsHookEx(recHook);
		}
	}
	return 0;
}


LRESULT CALLBACK PlayHook(int code,WPARAM wParam,LPARAM lParam)
{
	static BOOL fDelay;
	static int playOK=1;
	if(code<0)
		return CallNextHookEx(playHook,code,wParam,lParam);
	else if(code==HC_SYSMODALON)
		playOK=0;
	else if(code==HC_SYSMODALOFF)
	{
		playOK=1;
	}
	else if(playOK && (code==HC_GETNEXT))
	{
		if(fDelay)
		{
			fDelay=FALSE;
			return 50;
		}
		*((PEVENTMSG)lParam)=EventArray[playedEvent];
	}
	else if(playOK && (code==HC_SKIP))
	{
		fDelay=TRUE;
		playedEvent++;
	}
	if(playedEvent>=recordedEvent)
	{
		UnhookWindowsHookEx(playHook);
	}
	return 0;
}
//结束

注:以上程序代码可以模拟鼠标和键盘的等全部的功能.可以做成dll.动态调用效果更佳.
   
    如果有什么地方不明白可以回帖说明.

//
   其实你也可以使用mouse_event函数。以下给出简单代码,用来模拟鼠标单击10次:

  void CMyDlg::OnButton1() 
{
     //SetCursorPos(560,0);   //鼠标移动到屏幕的560,0位置
    for(int i=0;i<10;i++)
	{
                   //以下是鼠标左键单击一次
		mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
		mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
		//Sleep(200);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -