
钩子函数如何获取被安装窗口的句柄
VOIDCALLBACKplayproc(HWNDhwnd,//handleofwindowfortimermessagesUINTuMsg,//WM_TIMERmess...
VOID CALLBACK playproc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
)
{
//AfxMessageBox("按下");
if (Update_HP() <= big_Role_HP)
{
::SendMessage(hwnd,WM_KEYDOWN,0,VK_F10);
::SendMessage(hwnd,WM_KEYUP,0,VK_F10);
}
else if (bool_MP && Update_MP() <= big_Role_MP)
{
::SendMessage(hwnd,WM_KEYDOWN,0,VK_F9);
::SendMessage(hwnd,WM_KEYUP,0,VK_F9);
}
}
想用CALLBACK回调函数实现对注入DLL的窗口产生一个SendMessage按键信息
但HWND hwnd好像不是被注入的窗口句柄。。。求高手指导。 展开
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
)
{
//AfxMessageBox("按下");
if (Update_HP() <= big_Role_HP)
{
::SendMessage(hwnd,WM_KEYDOWN,0,VK_F10);
::SendMessage(hwnd,WM_KEYUP,0,VK_F10);
}
else if (bool_MP && Update_MP() <= big_Role_MP)
{
::SendMessage(hwnd,WM_KEYDOWN,0,VK_F9);
::SendMessage(hwnd,WM_KEYUP,0,VK_F9);
}
}
想用CALLBACK回调函数实现对注入DLL的窗口产生一个SendMessage按键信息
但HWND hwnd好像不是被注入的窗口句柄。。。求高手指导。 展开
1个回答
展开全部
以下内容我在你的另外一个类似问题中已经回答 , 这里将其再重复一遍, 同时作一些补充!
以下全部手打, 自认为写的很认真,很详细, 呵呵, 如果还有不明白随时欢迎
提出来!
首先说一句, 能够调用WIN32API的编程语言很多, 例如汇编, Fortran, VB, C, Java, 甚至脚本语言matlab, ruby等, 不过原理都是一样的, 这里就以C / C++ 来为例吧
-------------------
SetWindowsHookEx一般都是写在你要使用Hook的地方, 在进一步解释之前先简略说明一下Hook相关情况
-------------------
钩子有局部和远程两种类型, 与钩子相关的函数有:
1. 建立钩子:SetWindowsHookEx, 其四个参数分别为钩子类型, 钩子函数地址, 钩子函数所在DLL的实例句柄,安装钩子后想监控的线程的ID号, 返回参数为钩子句柄
2. UnhookWindowsHookEx, 参数只有一个,为要卸载的钩子句柄
3. 钩子函数(名称任意), 三个参数, 具体意义与钩子类型有关
这里以一个例子说明一下:比如你想写一个程序, 当鼠标移到哪里时就在主程序中显示鼠标所在窗口的名称
--------------------
(1)如果鼠标只是局限在窗口内, 那么以上1, 2, 3三个函数均写在运行的主程序中, 比如函数1可以写在按下某个按钮的消息响应函数中,函数 2 写在松开按扭的消息响应函数中,函数 3 只要不写在别的函数中就行, 因为它本生就是一个要定义的独立函数
(2)如果鼠标可以在屏幕任意位置移动, 那么以上函数1, 2位置同(1), 但函数3要写在一个另外写的DLL里, 因为此时安装的是全局钩子, 为了达到获取窗口名称的目的, 在DLL里可能还要做一些其他工作,比如设置共享段, 关于这些这里不细说了
以下全部手打, 自认为写的很认真,很详细, 呵呵, 如果还有不明白随时欢迎
提出来!
首先说一句, 能够调用WIN32API的编程语言很多, 例如汇编, Fortran, VB, C, Java, 甚至脚本语言matlab, ruby等, 不过原理都是一样的, 这里就以C / C++ 来为例吧
-------------------
SetWindowsHookEx一般都是写在你要使用Hook的地方, 在进一步解释之前先简略说明一下Hook相关情况
-------------------
钩子有局部和远程两种类型, 与钩子相关的函数有:
1. 建立钩子:SetWindowsHookEx, 其四个参数分别为钩子类型, 钩子函数地址, 钩子函数所在DLL的实例句柄,安装钩子后想监控的线程的ID号, 返回参数为钩子句柄
2. UnhookWindowsHookEx, 参数只有一个,为要卸载的钩子句柄
3. 钩子函数(名称任意), 三个参数, 具体意义与钩子类型有关
这里以一个例子说明一下:比如你想写一个程序, 当鼠标移到哪里时就在主程序中显示鼠标所在窗口的名称
--------------------
(1)如果鼠标只是局限在窗口内, 那么以上1, 2, 3三个函数均写在运行的主程序中, 比如函数1可以写在按下某个按钮的消息响应函数中,函数 2 写在松开按扭的消息响应函数中,函数 3 只要不写在别的函数中就行, 因为它本生就是一个要定义的独立函数
(2)如果鼠标可以在屏幕任意位置移动, 那么以上函数1, 2位置同(1), 但函数3要写在一个另外写的DLL里, 因为此时安装的是全局钩子, 为了达到获取窗口名称的目的, 在DLL里可能还要做一些其他工作,比如设置共享段, 关于这些这里不细说了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询