如何获取系统时钟的 WM_LBUTTONDOWN消息
时间:2011-12-17
来源:互联网
我将下文这个DLL通过SetWindowsHookEx (WH_GETMESSAGE, HookProc, gDllInstance, clockThreadId);
注册到了任务栏时钟上,但是始终获得不到红色字体的那个鼠标左键点击消息,求教。
C/C++ code
注册到了任务栏时钟上,但是始终获得不到红色字体的那个鼠标左键点击消息,求教。
C/C++ code
// dll.cpp : 定义 DLL 应用程序的入口点。 // #include "stdafx.h" #ifdef _MANAGED #pragma managed(push, off) #endif //常量声明: bool gRegisteredSubClass = false;//是否已经注册了子窗口过程 HINSTANCE gDllInstance;//当前DLL的实例 static HHOOK gHook = 0;//HOOK //函数声明: HWND GetClockWindow (); static LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK ClockProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call){ case DLL_PROCESS_ATTACH: gDllInstance = hModule; DisableThreadLibraryCalls (gDllInstance); break; case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" _declspec(dllexport) BOOL registerTrayClockSubClass(){ //获得时钟所在的线程 DWORD explorerProcessId; DWORD clockThreadId = GetWindowThreadProcessId (GetClockWindow (), &explorerProcessId); if (!explorerProcessId){ return false; } //将dll注册到线程中去 SetWindowsHookEx (WH_GETMESSAGE, HookProc, gDllInstance, clockThreadId); return true; } //获得到TrayClock的Hwnd HWND GetClockWindow () { HWND hShellTrayWnd = FindWindow (_T ("Shell_TrayWnd"), 0); HWND hTrayNotifyWnd = FindWindowEx (hShellTrayWnd, 0, _T ("TrayNotifyWnd"), 0); HWND hTrayClockWClass = FindWindowEx (hTrayNotifyWnd, 0,_T ("TrayClockWClass"), 0); return hTrayClockWClass; } //HOOK的回调函数 static LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam) { //如果没有注册SubClass,就注册 if (!gRegisteredSubClass) { //::SetWindowSubclass(GetClockWindow (), ClockProc, 0, 0); ::SetWindowLong(GetClockWindow (), GWL_WNDPROC, (LONG)ClockProc); gRegisteredSubClass = true; } return CallNextHookEx(gHook, nCode, wParam, lParam); } //时钟的回调函数 static LRESULT CALLBACK ClockProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LRESULT ret_val = 0; [b]if(WM_LBUTTONDOWN==msg) [/b] ::MessageBox(NULL,NULL,NULL,MB_OK); return ret_val; } #ifdef _MANAGED #pragma managed(pop) #endif
作者: yu1ei 发布时间: 2011-12-17
代码段内好像不能显示红色字体,就是 if(WM_LBUTTONDOWN==msg)这一行。
作者: yu1ei 发布时间: 2011-12-17
挂钩成功了吗?
作者: wltg2001 发布时间: 2011-12-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28