首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MFC中,RegisterHotKey函数不响应

在MFC中,RegisterHotKey函数不响应
EN

Stack Overflow用户
提问于 2015-07-23 21:50:05
回答 2查看 351关注 0票数 1

在MFC中,RegisterHotKey函数不会从Dll中响应,但如果我将相同的代码放入exe中,则可以正常工作。我正在使用同样的代码,在exe中工作,并将其放入Dll中。另外,当我运行exe时,也要确保Dll被加载,其他的变化也会反映出来。

EN

回答 2

Stack Overflow用户

发布于 2015-07-23 22:56:57

您正在使用与EXE中相同的代码在DLL中注册热键。这是你的问题。请参阅RegisterHotKey文档

应用程序必须指定0x0000到0xBFFF范围内的id值。

要从共享DLL使用RegisterHotKey,您需要生成一个id值。要获得正确范围内的值,请使用字符串参数调用GlobalAddAtom (请参阅About Atom Tables: String Atoms)。要创建唯一的id,请传递GUID的字符串表示形式。

票数 1
EN

Stack Overflow用户

发布于 2015-08-05 03:49:22

代码语言:javascript
复制
// Putting in message map 
ON_MESSAGE(WM_HOTKEY, OnHotKey)

//Demographic Bar HotKey (putting in create or init)
RegisterHotKey(GetSafeHwnd(), GlobalAddAtom("SHIFT+CTRL+ALT+D"), MOD_SHIFT | MOD_CONTROL | MOD_ALT, 'D');

//source file 
LRESULT CMainFrame::OnHotKey(WPARAM wParam, LPARAM lParam)
{
    int hotKeyId = (int)wParam;
    CString atomName;
    GlobalGetAtomName(hotKeyId, atomName.GetBuffer(20), 20);
    atomName.ReleaseBuffer();

    if (atomName.Compare("SHIFT+CTRL+ALT+D") == 0)
    {
        SetPaneFocused(1);  //Hard-coding 1 & 2 as place holders.  Actual pane id should be here
    }
    else if (atomName.Compare("SHIFT+CTRL+ALT+M") == 0)
    {
        SetPaneFocused(2);
    }

    return S_OK;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31589374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档