69,382
社区成员
发帖
与我相关
我的任务
分享
#include "windows.h"
LRESULT fun1 ( int code , WPARAM wParam , LPARAM lParam )
{
printf("按键消息:%x\n", wParam );
return CallNextHookEx( NULL, code, wParam, lParam );
}
LRESULT fun2 ( int code , WPARAM wParam , LPARAM lParam )
{
EVENTMSG *p = (EVENTMSG *)lParam;
printf("消息:%x\n", p->message );
return CallNextHookEx( NULL, code, wParam, lParam );
}
int main( void )
{
HHOOK hhook1 = SetWindowsHookEx ( WH_KEYBOARD_LL, fun1, GetModuleHandle(NULL), NULL );
HHOOK hhook2 = SetWindowsHookEx ( WH_JOURNALRECORD, fun2, GetModuleHandle(NULL), GetCurrentThreadId() );
MSG msg;
while( GetMessage( &msg , NULL , 0, 0 ) )
{
DispatchMessage(&msg);
}
return 0;
}
4. 关于您说的系统这个有相关的书籍推荐吗?(希望能通俗易懂点的)
您的我还会仔细阅读的,我说下看了后的一些理解,您看对吗:
每个进程都相当于有系统(核心的管理程序)的备份,当调用系统的API后,顺序流就会进入这些系统核心代码运行,最后再跳回程序代码。系统自己也会运行一些重要的进程来保持系统的正常运作,这样,即便所有普通进程都不调用系统API,通过CPU切换时间片也最终可以调用到系统的这些核心进程,以此保证正常的运作。比如当我们点击鼠标后,由于硬件中断会切换到系统进程(或者直接调用当前进程中的系统映射部分?)来处理。你看这样的说法对吗?
5. 关于系统消息队列那里,消息队列不是有“系统消息队列”和“线程消息队列”之分吗?WH_JOURNALRECORD的说明也明确说的是“the system message queue”?