
我能想到的有两个。但没一个感觉特别好,随便聊聊吧。
1)修改时钟窗口的窗口函数,捕获鼠标移动事件后d出自定义日历对话框。
先利用远程代码注入技术,把自己事先写好的窗口函数植入时钟窗口所在的进程内。然后修改时钟窗口函数。
使时钟窗口执行自己的窗口函数。这里会有两个比较麻烦的问题,1:远程线程注入被当做恶意代码,会d杀毒窗口,2:修改系统的窗口可能还好说,只要自己谨慎些,但如果要修改商业软件的窗口函数多半会失败,什么原因大家都猜得到。有点特别要提醒的是:用SetWindowLongPtr修改时,一定要首先对窗口函数地址的进程虚拟地址空间进行属性改写,使其成为可写的地址,否则调用SetWindowLongPtr可能会失败,并导致被注入的进程强制终止,这个后果非常严重。呵呵,本人曾经为此困惑过!
2)确定时钟窗口所在位置(不一定在右下角),下钩子实时捕获鼠标,判断鼠标在时钟窗口的上面就d窗。这种方法不好是因为,就为了d个窗就随意下钩子,太浪费了。而且钩子用惯了,就会太依赖,不利于提高编程技术。如果是商业软件的用户,也不会买账,有谁会愿意自己的系统被弄得到处是钩子?
#include "stdafxh"
#include "tcharh"
#define _MAX_PATH MAX_PATH
#pragma data_seg("SHARDAT")
static HHOOK g_hkb = NULL;
#pragma data_seg()
///////////////////////////////////
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if( ul_reason_for_call == DLL_PROCESS_ATTACH )
{
}
else if( ul_reason_for_call == DLL_PROCESS_DETACH )
{
}
return TRUE;
}
/////////////////////////////////////
BOOL __declspec(dllexport)__stdcall installhook( HINSTANCE hins )
{
BOOL bRet = TRUE;
g_hkb = SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)KeyboardProc, hins, 0 );
if( NULL == g_hkb )
{
g_hkb = SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)KeyboardProc, hins, 0 );
if( NULL == g_hkb )
{
bRet = FALSE;
}
else;
}
else;
return bRet;
}
BOOL __declspec(dllexport)__stdcall UnHook()
{
BOOL bRet = TRUE;
if( NULL != g_hkb )
{
bRet = UnhookWindowsHookEx( g_hkb );
}
else;
return bRet;
}
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc( int nCode,
WPARAM wParam,
LPARAM lParam )
{
DWORD dwScancode;
LRESULT RetVal;
if ( ( (DWORD)lParam & 0x40000000 ) &&( HC_ACTION == nCode ) )
{
if( 0xff == wParam )
{
dwScancode = (DWORD)lParam & 0xff0000;
dwScancode = dwScancode >> 16;
if( 0x25 == dwScancode )
{
//响应alt+ctrl+K
}
else;
}
else;
}
else;
if( NULL != g_hkb )
{
RetVal = CallNextHookEx( g_hkb, nCode, wParam, lParam );
}
else RetVal = 0;
return RetVal;
}
///Dll工程,键盘钩子
//需要屏蔽’Tab’键,需要对键盘扫描码进行处理MSDN中各键的扫描码都有对应
鼠标钩子很简单的,例子暂时找不到,MSDN也有说明
1.具有全方位立体控制能力。它具有前、后、左、右、上、下六个移动方向,而且可以组合出前右,左下等等的移动方向。
2.外形和普通鼠标不同。一般由一个扇形的底座和一个能够活动的控制器构成。
3.具有振动功能,即触觉回馈功能。玩某些游戏时,当你被敌人击中时,你会感觉到你的鼠标也振动了。
4.是真正的三键式鼠标。无
你需要截获 按钮 HWND 的 WM_LBUTTONDOWN 函数。
好几种方法实现。
比较简单的一种:
采用SetWindowLong子类化该HWND,即设置该窗口的消息处理函数,然后判断消息是不是按钮被按下了,做好处理之后再去调用老的消息处理函数。
但是,每个进程都有各自的私有4G空间,而你要截获的是远进程窗口消息,因此,你不能简单的直接使用SetWindowLong,因为你传过去的参数,对于远进程来说,是没有意义的。
因此,第一步,你需要将实现写入DLL,然后将DLL注入远进程。(注,DLL的DLLMain函数中实现SetWindowLong等实现)。
这种方法要比全局钩子的方法效率高。而且也很容易写。
private void FrmMain_KeyUp(object sender, KeyEventArgs e)
{
if ( eKeyCodeToString()Equals("Escape")) //快捷键 退出
{
if (MessageBoxShow("即将退出本系统,是否继续?", "提示", MessageBoxButtonsOKCancel, MessageBoxIconQuestion) == DialogResultOK)
thisClose();
}
}
类似上面的可以获得键盘输入
以上就是关于VC 如何获得鼠标指向任务栏系统时间的消息全部的内容,包括:VC 如何获得鼠标指向任务栏系统时间的消息、如何处理钩子捕获的键盘消息和鼠标消息高手进、怎样获得一个窗口的鼠标移入及移出消息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)