能力值:
( LV4,RANK:50 )
2 楼
找到这么个说明,不是很明确。。
其实现过程非常简单,只需先向操作系统添加一个全局原子(Atom),然后再向操作系统登记一个热键,当程序在后台运行期间一旦有此热键按下,操作系统将会抛出系统消息WM_HOTKEY,所以服务程序只需在 WM_HOTKEY消息响应函数中添加相应代码即可实现服务程序的后台激活。
能力值:
( LV2,RANK:10 )
3 楼
[QUOTE=;]...[/QUOTE]
寒,不知道 上面那个资料你是怎么查的
API:RegisterHotKey
能力值:
( LV4,RANK:50 )
4 楼
谢啦,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之类注册到哪里呀。。
能力值:
( LV4,RANK:50 )
5 楼
看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.
能力值:
( LV2,RANK:10 )
6 楼
这个是不是比较复杂的说
看来我们还都是初学者啊,很初的初学者
能力值:
( LV4,RANK:50 )
7 楼
查了些资料,照葫芦画瓢写了下,但还是不起作用呀。。
void __fastcall OnHotKey(TMessage Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_HOTKEY, TMessage, OnHotKey)
END_MESSAGE_MAP(TForm)
这个应该就是定义WM_HOTKEY如何handle了。
但我怎么从来进不去OnHotKey事件呢??
能力值:
( LV4,RANK:50 )
8 楼
又做了个实验,加了一个窗口大小resize的handler
MESSAGE_HANDLER(WM_SIZE, TWMSize, OnWMSize);
这个事件可以被截获到到。
那就说明程序结构没问题。
怎么回事儿呢。
能力值:
( LV4,RANK:50 )
9 楼
貌似现在问题转化成C++builder如何获得程序自身的句柄了。。
谁知道?
能力值:
( LV4,RANK:50 )
10 楼
hohohoho
原来就是 this->Handle
能力值:
( LV4,RANK:50 )
11 楼
搞定
就是在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)