VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2546|回复: 21

热键的奇怪问题:明明设置成 ALT+Z,注册的却是 SHIFT+Z ,如果设成 SHIFT+Z,注册的变成ALT+Z

[复制链接]

1

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-19 17:40:01 | 显示全部楼层 |阅读模式
热键的奇怪问题:明明设置成 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 宏一样。
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-1-27 13:45:01 | 显示全部楼层
RegisterHotKey(g_hWnd, 1001, HIBYTE(wHotKey), LOBYTE(wHotKey));
改为下面的试试:
RegisterHotKey(g_hWnd, 1001, HIWORD(wHotKey), LOWORD(wHotKey));
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-1-27 14:09:02 | 显示全部楼层
wHotKey = (WORD)SendMessage(hHkHide, HKM_GETHOTKEY, 0, 0);
改为:
DOWRD wHotKey = SendMessage(hHkHide, HKM_GETHOTKEY, 0, 0);
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-1-27 17:09:01 | 显示全部楼层
RegisterHotKey(g_hWnd, 1001, HIBYTE(wHotKey), LOBYTE(wHotKey));
这句暂时不修改,只将下面:
wHotKey = (WORD)SendMessage(hHkHide, HKM_GETHOTKEY, 0, 0);
修改为:
DOWRD wHotKey = SendMessage(hHkHide, HKM_GETHOTKEY, 0, 0);

-----------
居MSDN上说低字节代表虚拟键代码,高字节代码的是功能健。一般的来说反回一个32位的值,带两个参数,没理只用8位字节(如果是四个参数还说得过去),完全可以用16位,但MSDN上明明是说的byte而不是word,你多试试就知道了
回复

使用道具 举报

0

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-27 17:18:02 | 显示全部楼层
2511718的方法是不行的。

倒是楼主的方法对,但不清楚为什么会这样。
回复

使用道具 举报

1

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-1-27 19:00:01 | 显示全部楼层
谢谢2511718的回复。
您说的DWORD,我之前就是这样设的。因为出现问题,才改成WORD。

问题一样。
RegisterHotKey(g_hWnd, 1001, HIBYTE(wHotKey), LOBYTE(wHotKey));
这个是不能变的,开始不成功,就是因为用了下面的方法,后来查资料,才知道应该用上面的写法:
isterHotKey(g_hWnd, 1001, HIWORD(wHotKey), LOWORD(wHotKey));

注:::奇怪的是,其他的热键都可以正常注册,比如,Ctrl+Shift+Z,Ctrl+Shift+Alt+Z,但就是如题所示有怪现象出现。
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-2-6 23:30:01 | 显示全部楼层
你将反回值取出高字节与虚拟键码对照一下看看
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-2-7 02:15:01 | 显示全部楼层
如果你注册Alt+Z,就不能够重复注册
回复

使用道具 举报

1

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-2-7 09:00:02 | 显示全部楼层
对照过了,或多3,或少3,反正,总是Shift和Alt反了。
ALT+Z肯定没重复注册。
如果我注册ALT+Z,则实际注册成功的是SHIFT+Z,
而当我注册SHIFT+Z,则实际注册成功的是ALT+Z。
晕了!
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-2-7 23:00:01 | 显示全部楼层
你手工注册不要利用SendMessage反回的值进行注册
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表