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

📄 subject_31726.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:31726 发表者:吴航 发表日期:2003-03-06 14:49:38
<br>主题:在应用程序里面一直直接监视键盘,鼠标的输入行为?
<br>内容:我想在应用程序里面一直直接监视键盘,鼠标的输入行为,在给定的时间无输入,则发一个信号,监测到输入行为,计时重新开始。请问各位高高手如何实现这个功能?在程序何处添加这段功能代码而不影响应用程序的其他部分?小弟急用,不胜感激!有示例更佳!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:小于 回复日期:2003-03-06 15:55:09
<br>内容:这个就像windows中的屏幕保护程序.用timer是不行的,影响其他的工作,我认为最好用线程的方式实现最好,不知道对否?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zbf 回复日期:2003-03-06 16:14:40
<br>内容:用键盘和鼠标钩子程序
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:吴航 回复日期:2003-03-06 18:03:57
<br>内容:以上两位兄弟的指导我都赞同,在此谢过,只是不知是否有更详细一点的解释?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:魔刀 回复日期:2003-03-06 20:35:44
<br>内容:用Hook
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:魔刀 回复日期:2003-03-06 20:40:17
<br>内容:先创建一个动态连接库<BR>// SampleDll.cpp : Defines the entry point for the DLL application.<BR>//<BR><BR>#include "stdafx.h"<BR>#define INITDLL<BR>#include &lt;winsock2.h&gt;<BR>#include "sampledll.h"<BR>#include &lt;stdio.h&gt;<BR><BR>HHOOK&nbsp;&nbsp;&nbsp;&nbsp; g_pOldHook;<BR>#define BUFLEN (1024)<BR><BR>//#pragma范围内的变量为共享变量<BR>#pragma data_seg( "SHAREDATA" )<BR>HINSTANCE g_hinstance = NULL;<BR>char g_Buf[BUFLEN] = {0};<BR>POINT g_OldMousePoint = {0,0};<BR>BOOL&nbsp;&nbsp;g_bGetData = FALSE;<BR>void* g_pOldExtTextOutW = 0;<BR>void* g_pOldrecv = 0;<BR>#pragma <BR><BR>#define GetDataFlag()&nbsp;&nbsp;(g_bGetData)<BR>#define SetDataFlag(bGetData) (g_bGetData=bGetData);<BR><BR>BOOL APIENTRY DllMain( HANDLE hModule, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;ul_reason_for_call, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPVOID lpReserved<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_hinstance = (HINSTANCE)hModule;<BR>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(g_Buf, "");<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (DLL_PROCESS_ATTACH == ul_reason_for_call)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR><BR>/***********************************<BR>函数原型: BOOL InitDLL()<BR>函数功能: 初始化DLL中指针<BR>调用关系:<BR>入口参数: <BR>出口参数: <BR>返回值:&nbsp;&nbsp; 返回成功,或者失败<BR>备&nbsp;&nbsp;注:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>************************************/<BR>BOOL InitDll(void* pOldExtTextOutW, void* pOldRecv)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(pOldExtTextOutW)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pOldExtTextOutW = pOldExtTextOutW;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(pOldRecv)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_pOldrecv = pOldRecv;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR><BR>/***********************************<BR>函数原型: void ShowWindowText(const POINT point)<BR>函数功能: 显示point中所指文字<BR>调用关系:<BR>入口参数: point&nbsp;&nbsp;该点文字被显示<BR>出口参数: <BR>返回值:&nbsp;&nbsp; <BR>备&nbsp;&nbsp;注:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>************************************/<BR>void ShowWindowText(const POINT point)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;HWND hwnd = WindowFromPoint(point);<BR>&nbsp;&nbsp;&nbsp;&nbsp;POINT clientpoint;<BR>&nbsp;&nbsp;&nbsp;&nbsp;clientpoint.x = point.x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;clientpoint.y = point.y;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//转换Screen到窗口坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;ScreenToClient(hwnd, &amp;clientpoint);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//扩大点的范围<BR>&nbsp;&nbsp;&nbsp;&nbsp;RECT clientrect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;clientrect.left = clientrect.right = clientpoint.x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;clientrect.bottom = clientrect.top = clientpoint.y+2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;InflateRect(&amp;clientrect, 1,1);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;SetDataFlag(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;::InvalidateRect(hwnd, &amp;clientrect, FALSE);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//如果g_Buf有内容,显示g_Buf的内容<BR>&nbsp;&nbsp;&nbsp;&nbsp;if( strlen(g_Buf))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC hdc = ::GetWindowDC(NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::TextOut(hdc, 0, 0, g_Buf, strlen(g_Buf));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::ReleaseDC(NULL, hdc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_Buf[0]=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>/***********************************<BR>函数原型: LRESULT CALLBACK MouseHook(int code, WPARAM wParam, LPARAM lParam)<BR>函数功能: 鼠标HOOK回调函数<BR>调用关系:<BR>入口参数: 参见MSDN<BR>出口参数: <BR>返回值:&nbsp;&nbsp; <BR>备&nbsp;&nbsp;注:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>************************************/<BR>LRESULT CALLBACK MouseHook(int code, WPARAM wParam, LPARAM lParam)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;PMOUSEHOOKSTRUCT pMouseStruct = (PMOUSEHOOKSTRUCT)lParam;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ShowWindowText(pMouseStruct-&gt;pt);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return CallNextHookEx(g_pOldHook, code, wParam, lParam);<BR>}<BR><BR>/***********************************<BR>函数原型: BOOL SetMouseHook()<BR>函数功能: 设置鼠标HOOK<BR>调用关系:<BR>入口参数: <BR>出口参数: <BR>返回值:&nbsp;&nbsp; <BR>备&nbsp;&nbsp;注:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>************************************/<BR>BOOL SetMouseHook()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;g_pOldHook = SetWindowsHookEx(WH_MOUSE, MouseHook, g_hinstance, 0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR><BR>/***********************************<BR>函数原型: BOOL UnSetMouseHook()<BR>函数功能: 解除鼠标HOOK<BR>调用关系:<BR>入口参数: <BR>出口参数: <BR>返回值:&nbsp;&nbsp; <BR>备&nbsp;&nbsp;注:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>************************************/<BR>BOOL UnSetMouseHook()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return UnhookWindowsHookEx(g_pOldHook);<BR>}<BR><BR><BR>/***********************************<BR>函数原型: int FAR PASCAL Newrecv(SOCKET s,char FAR * buf,int len,int flags)<BR>函数功能: 替换系统recv<BR>调用关系:<BR>入口参数: 参见MSDN<BR>出口参数: <BR>返回值:&nbsp;&nbsp; <BR>备&nbsp;&nbsp;注: 入口指针buf,长度len将被保存到文件中recv.txt中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>************************************/<BR>int<BR>FAR PASCAL<BR>Newrecv(SOCKET s,char FAR * buf,int len,int flags)<BR>{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int nLen =&nbsp;&nbsp;((int (PASCAL*)(SOCKET,char* ,int ,int ))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(g_pOldrecv))(s, buf, len, flags);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if( -1 != nLen &amp;&amp; 0 != nLen)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp=fopen("c:\\recv.txt","a+b");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite(buf, nLen, 1, fp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp,"\r\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return nLen;<BR>}<BR> <BR>/***********************************<BR>函数原型: BOOL&nbsp;&nbsp;WINAPI NewExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, CONST RECT * lprc,LPCWSTR lpwString, UINT cbCount, CONST INT *lpDx)<BR>函数功能: 替换系统ExtTextOutW<BR>调用关系:<BR>入口参数: 参见MSDN<BR>出口参数: <BR>返回值:&nbsp;&nbsp; <BR>备&nbsp;&nbsp;注: 鼠标所指的内容如果是通过ExtTextOutW显示的(如IE)将被显示在屏幕左上角<BR>************************************/<BR>BOOL&nbsp;&nbsp;WINAPI NewExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, CONST RECT * lprc,LPCWSTR lpwString, UINT cbCount, CONST INT *lpDx)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if( GetDataFlag() )<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(g_Buf, 0, BUFLEN);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, lpwString,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbCount, g_Buf, BUFLEN-2,NULL,NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;SetDataFlag(FALSE);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return ((BOOL&nbsp;&nbsp;(WINAPI*)(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *))g_pOldExtTextOutW)(hdc, X, Y, fuOptions, lprc, lpwString, cbCount, lpDx);<BR>}<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

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