首页
社区
课程
招聘
[求助]类似QQ的CTRL+ALT+Z激活是如何实现的
2009-4-3 11:02 5878

[求助]类似QQ的CTRL+ALT+Z激活是如何实现的

2009-4-3 11:02
5878

来取个捷径,哪位大大给点使用的函数提示,请给几个关键函数的函数名,我自己去查

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (10)
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 11:06
2
0
找到这么个说明,不是很明确。。

其实现过程非常简单,只需先向操作系统添加一个全局原子(Atom),然后再向操作系统登记一个热键,当程序在后台运行期间一旦有此热键按下,操作系统将会抛出系统消息WM_HOTKEY,所以服务程序只需在 WM_HOTKEY消息响应函数中添加相应代码即可实现服务程序的后台激活。
雪    币: 139
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kylinpoet 2009-4-3 12:08
3
0
[QUOTE=;]...[/QUOTE]
寒,不知道 上面那个资料你是怎么查的

API:RegisterHotKey
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 13:41
4
0
谢啦,api知道了。现在有一个地方不是很懂

先GlobalAddAtom
然后RegisterHotKey

结束时候
GlobalDeleteAtom
UnRegisterHotKey

消息处理部分没搞懂。。
C++builder里面应该怎么弄呢

看到个delphi例子

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyId[0] then ShowMessage('F2');
end;

这个按F2事件发生后,会有一个消息WM_HOTKEY
但这个消息怎么触发到这个WMHotKey函数的呢。。我没看到哪里把函数指针作为callback之类注册到哪里呀。。
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 13:45
5
0
看MSDN说
The WM_HOTKEY message is posted when the user presses a hot key registered by the RegisterHotKey function. The message is placed at the top of the message queue associated with the thread that registered the hot key.
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风松雨龄 2009-4-3 14:20
6
0
这个是不是比较复杂的说
看来我们还都是初学者啊,很初的初学者
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 14:28
7
0
查了些资料,照葫芦画瓢写了下,但还是不起作用呀。。

    void __fastcall OnHotKey(TMessage Message);
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_HOTKEY, TMessage, OnHotKey)
    END_MESSAGE_MAP(TForm)

这个应该就是定义WM_HOTKEY如何handle了。
但我怎么从来进不去OnHotKey事件呢??
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 15:05
8
0
又做了个实验,加了一个窗口大小resize的handler

MESSAGE_HANDLER(WM_SIZE, TWMSize, OnWMSize);

这个事件可以被截获到到。

那就说明程序结构没问题。

怎么回事儿呢。
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 15:20
9
0
貌似现在问题转化成C++builder如何获得程序自身的句柄了。。

谁知道?
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 15:51
10
0
hohohoho

原来就是 this->Handle
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-4-3 16:08
11
0
搞定

就是在FormCreate时候

    HWND hWnd = this->Handle;
    if(GlobalFindAtom("MyHotKey") != 0)
    {
        hotkeyid=GlobalAddAtom("MyHotKey");

        if( RegisterHotKey(hWnd,hotkeyid,MOD_ALT,VK_F2) == 0 )
        {
            printError("RegisterHotKey");
        }
    }   

在FormDestroy时候

    UnregisterHotKey(NULL,hotkeyid);
    GlobalDeleteAtom(hotkeyid);

做一个OhHotKey事件

void __fastcall TForm1::OnHotKey(TMessage Message)
{
MessageBox(NULL,"ok","ff",0);
//你自己想做的事儿
}

最后用如下的宏来完成相当于注册 OnHotKey 的处理

    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(WM_HOTKEY, TMessage, OnHotKey)
    END_MESSAGE_MAP(TForm)
游客
登录 | 注册 方可回帖
返回