📄 subject_31726.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 <winsock2.h><BR>#include "sampledll.h"<BR>#include <stdio.h><BR><BR>HHOOK 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 g_bGetData = FALSE;<BR>void* g_pOldExtTextOutW = 0;<BR>void* g_pOldrecv = 0;<BR>#pragma <BR><BR>#define GetDataFlag() (g_bGetData)<BR>#define SetDataFlag(bGetData) (g_bGetData=bGetData);<BR><BR>BOOL APIENTRY DllMain( HANDLE hModule, <BR> DWORD ul_reason_for_call, <BR> LPVOID lpReserved<BR> )<BR>{<BR><BR> g_hinstance = (HINSTANCE)hModule;<BR> strcpy(g_Buf, "");<BR><BR> if (DLL_PROCESS_ATTACH == ul_reason_for_call)<BR> {<BR> }<BR> <BR> return TRUE;<BR>}<BR><BR>/***********************************<BR>函数原型: BOOL InitDLL()<BR>函数功能: 初始化DLL中指针<BR>调用关系:<BR>入口参数: <BR>出口参数: <BR>返回值: 返回成功,或者失败<BR>备 注: <BR>************************************/<BR>BOOL InitDll(void* pOldExtTextOutW, void* pOldRecv)<BR>{<BR> if(pOldExtTextOutW)<BR> g_pOldExtTextOutW = pOldExtTextOutW;<BR><BR> if(pOldRecv)<BR> g_pOldrecv = pOldRecv;<BR><BR> return TRUE;<BR>}<BR><BR>/***********************************<BR>函数原型: void ShowWindowText(const POINT point)<BR>函数功能: 显示point中所指文字<BR>调用关系:<BR>入口参数: point 该点文字被显示<BR>出口参数: <BR>返回值: <BR>备 注: <BR>************************************/<BR>void ShowWindowText(const POINT point)<BR>{<BR> HWND hwnd = WindowFromPoint(point);<BR> POINT clientpoint;<BR> clientpoint.x = point.x;<BR> clientpoint.y = point.y;<BR><BR> //转换Screen到窗口坐标<BR> ScreenToClient(hwnd, &clientpoint);<BR><BR><BR> //扩大点的范围<BR> RECT clientrect;<BR> clientrect.left = clientrect.right = clientpoint.x;<BR> clientrect.bottom = clientrect.top = clientpoint.y+2;<BR> InflateRect(&clientrect, 1,1);<BR><BR> SetDataFlag(TRUE);<BR> ::InvalidateRect(hwnd, &clientrect, FALSE);<BR><BR> //如果g_Buf有内容,显示g_Buf的内容<BR> if( strlen(g_Buf))<BR> {<BR> HDC hdc = ::GetWindowDC(NULL);<BR> ::TextOut(hdc, 0, 0, g_Buf, strlen(g_Buf));<BR> ::ReleaseDC(NULL, hdc);<BR> g_Buf[0]=0;<BR> }<BR>}<BR><BR>/***********************************<BR>函数原型: LRESULT CALLBACK MouseHook(int code, WPARAM wParam, LPARAM lParam)<BR>函数功能: 鼠标HOOK回调函数<BR>调用关系:<BR>入口参数: 参见MSDN<BR>出口参数: <BR>返回值: <BR>备 注: <BR>************************************/<BR>LRESULT CALLBACK MouseHook(int code, WPARAM wParam, LPARAM lParam)<BR>{<BR> PMOUSEHOOKSTRUCT pMouseStruct = (PMOUSEHOOKSTRUCT)lParam;<BR> ShowWindowText(pMouseStruct->pt);<BR><BR> return CallNextHookEx(g_pOldHook, code, wParam, lParam);<BR>}<BR><BR>/***********************************<BR>函数原型: BOOL SetMouseHook()<BR>函数功能: 设置鼠标HOOK<BR>调用关系:<BR>入口参数: <BR>出口参数: <BR>返回值: <BR>备 注: <BR>************************************/<BR>BOOL SetMouseHook()<BR>{<BR> g_pOldHook = SetWindowsHookEx(WH_MOUSE, MouseHook, g_hinstance, 0);<BR> return TRUE;<BR>}<BR><BR>/***********************************<BR>函数原型: BOOL UnSetMouseHook()<BR>函数功能: 解除鼠标HOOK<BR>调用关系:<BR>入口参数: <BR>出口参数: <BR>返回值: <BR>备 注: <BR>************************************/<BR>BOOL UnSetMouseHook()<BR>{<BR> 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>返回值: <BR>备 注: 入口指针buf,长度len将被保存到文件中recv.txt中 <BR>************************************/<BR>int<BR>FAR PASCAL<BR>Newrecv(SOCKET s,char FAR * buf,int len,int flags)<BR>{<BR><BR> int nLen = ((int (PASCAL*)(SOCKET,char* ,int ,int ))<BR> (g_pOldrecv))(s, buf, len, flags);<BR><BR> if( -1 != nLen && 0 != nLen)<BR> {<BR> FILE *fp=fopen("c:\\recv.txt","a+b");<BR> fwrite(buf, nLen, 1, fp);<BR> fprintf(fp,"\r\n");<BR> fclose(fp);<BR> }<BR><BR> return nLen;<BR>}<BR> <BR>/***********************************<BR>函数原型: BOOL 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>返回值: <BR>备 注: 鼠标所指的内容如果是通过ExtTextOutW显示的(如IE)将被显示在屏幕左上角<BR>************************************/<BR>BOOL WINAPI NewExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, CONST RECT * lprc,LPCWSTR lpwString, UINT cbCount, CONST INT *lpDx)<BR>{<BR> if( GetDataFlag() )<BR> {<BR> memset(g_Buf, 0, BUFLEN);<BR> WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, lpwString,<BR> cbCount, g_Buf, BUFLEN-2,NULL,NULL);<BR> }<BR><BR> SetDataFlag(FALSE);<BR><BR> return ((BOOL (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 + -