VC 如何获得鼠标指向任务栏系统时间的消息

VC 如何获得鼠标指向任务栏系统时间的消息,第1张

我能想到的有两个。但没一个感觉特别好,随便聊聊吧。

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 如何获得鼠标指向任务栏系统时间的消息、如何处理钩子捕获的键盘消息和鼠标消息高手进、怎样获得一个窗口的鼠标移入及移出消息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9659498.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存