热键的奇怪问题:明明设置成 ALT+Z,注册的却是 SHIFT+Z ,如果设成 SHIFT+Z,注册的变成ALT+Z
热键的奇怪问题:明明设置成 ALT+Z,注册的却是 SHIFT+Z ,如果设成 SHIFT+Z,注册的变成ALT+Z。
也就是说,Shift和Alt总反过来了。
下面是我的代码:
wHotKey = (WORD)SendMessage(hHkHide, HKM_GETHOTKEY, 0, 0);
if (wHotKey != 0)
RegisterHotKey(g_hWnd, 1001, HIBYTE(wHotKey), LOBYTE(wHotKey));
else
UnregisterHotKey(g_hWnd, 1001);
搜索网络近3个小时了,也无法解决。
到底是什么原因?如何解决?
请高手指示,急啊。
真不理解。
另,当设置完热键并将wHotKey写到ini后,下次读取时,可以正常的在HotKey控件里显示相应的热键。我想问题应该是出在:HIBYTE(wHotKey),但网上相关资料都是这么写的。
另,也试了:(byte)((wHotKey > > 8) & 0xFF),也 HIBYTE 宏一样。
[解决办法]
RegisterHotKey(g_hWnd, 1001, HIBYTE(wHotKey), LOBYTE(wHotKey));
改为下面的试试:
RegisterHotKey(g_hWnd, 1001, HIWORD(wHotKey), LOWORD(wHotKey));
[解决办法]
解决不了就trick一下,在程序里写个判断自己把Shift和ALT换过来
[解决办法]
// 交换热键
UINT SwapShiftAlt(UINT iHotKey)
{
if (iHotKey & HOTKEYF_SHIFT && iHotKey & HOTKEYF_ALT)
{
}
else if (iHotKey & HOTKEYF_ALT)
{
iHotKey -= 3;
}
else if (iHotKey & HOTKEYF_SHIFT)
{
iHotKey += 3;
}
return iHotKey;
}