| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4685 人关注过本帖
标题:关于shift 键的“键盘”虚拟按键
取消只看楼主 加入收藏
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
结帖率:75.86%
收藏
已结贴  问题点数:20 回复次数:10 
关于shift 键的“键盘”虚拟按键
下面的都可以成功使用,但是shift键我一直试不成功,怎么回事?(Shift键对应ASCII码值为: VK_SHIFT  ($10),如果按照下面的代码,我就设VK_SHIFT=16,但是我怎么都用不出来)


Declare keybd_event In user32 Integer, Integer,Integer,Integer
Public VK_CTRL,VK_TAB,VK_ALT,VK_ESC,VK_WIN,VK_ENTER,VK_F10,VK_F12
Public VK_W,VK_V,VK_S,VK_Y,VK_N,VK_D
Public VK_0,VK_1,VK_2,VK_3,VK_4,VK_5,VK_6,VK_7,VK_8,VK_9
VK_CTRL=17                        && Ctrl键: VK_CTRL  ( 17)
VK_TAB=9                          &&  TAB键: VK_TAB   (  9)
VK_ALT=18                         &&  Alt键: VK_ALT   ( 18)
VK_ESC=27                         &&  ESC键: VK_ESC   ( 27)
VK_WIN=91                         && 窗口键: VK_WIN   ( 91)
VK_ENTER=13                       && 回车键: VK_ENTER ( 13)
VK_F10=121                        &&  F10键: VK_F10   (121)
VK_F12=123                        &&  F12键: VK_F12   (123)

VK_W=87                        &&   W 键:        ( 87)
VK_V=86                        &&   V 键:        ( 86)
VK_S=83                        &&   S 键:        ( 83)
VK_Y=89                        &&   Y 键:        ( 89)
VK_N=78                        &&   N 键:        ( 78)
VK_D=68                        &&   D 键:        ( 68)

VK_0=48                        &&   0 键:        ( 48)
VK_1=49                        &&   1 键:        ( 49)
VK_2=50                        &&   2 键:        ( 50)
VK_3=51                        &&   3 键:        ( 51)
VK_4=52                        &&   4 键:        ( 52)
VK_5=53                        &&   5 键:        ( 53)
VK_6=54                        &&   6 键:        ( 54)
VK_7=55                        &&   7 键:        ( 55)
VK_8=56                        &&   8 键:        ( 56)
VK_9=57                        &&   9 键:        ( 57)
搜索更多相关主题的帖子: 键盘 
2017-06-26 18:54
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
比如,如果我要虚拟复制功能,就可以:

keybd_event(VK_CTRL, 0, 0, 0)       && CTRL + C
keybd_event(VK_C, 0, 0, 0)
keybd_event(VK_C, 0, 2, 0)
keybd_event(VK_CTRL, 0, 2, 0)
2017-06-26 18:55
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用红星二锅头在2017-6-26 20:21:02的发言:

你想使用 Shift 键干什么?
使用什么组合键?要达到什么功能?

Shift 组合键在不同的应用中,其功能是不同的。


就是要按一下:

keybd_event(VK_SHIFT, 0, 0, 0)       && SHIFT按下
keybd_event(VK_SHIFT, 0, 2, 0)       && SHIFT弹起
2017-06-26 20:58
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用红星二锅头在2017-6-26 21:07:12的发言:

这个试试看

VK_LSHIFT = 0xA0  && 左 Shift 键
KEYEVENTF_EXTENDEDKEY = 0x01
KEYEVENTF_KEYUP = 0x02

*!*    按下 Shift 键
keybd_event(VK_LSHIFT, 0x45, 0, 0)

*!*    释放 Shift 键
keybd_event(VK_LSHIFT, 0x45, KEYEVENTF_KEYUP, 0)


还是不行哦
2017-06-26 21:18
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用红星二锅头在2017-6-26 21:11:13的发言:

单个 Shift 键看不出效果,你要有 Shift 组合键,才有动作,
你想干什么?


那ctrl键怎么可以呢?其实就是按住ctrl再按下c,放开c再放开ctrl,怎么换成shift就不行呢? 就当作我要大写C吧,但是不是用大写锁定键

keybd_event(VK_CTRL, 0, 0, 0)       && CTRL + C
keybd_event(VK_C, 0, 0, 0)
keybd_event(VK_C, 0, 2, 0)
keybd_event(VK_CTRL, 0, 2, 0)
2017-06-26 21:21
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
g搞不懂啊
2017-06-27 07:50
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
顶啊,搞不定,实验现状:

实验1:组合键使用,达不到想要的效果,这个的目的是:选择本行光标位置到句末的文本内容。实际得到的结果只是光标移到了最后。
keybd_event(VK_SHIFT,0, 0, 0)       && SHIFT + END
keybd_event(VK_END, 0, 0, 0)
keybd_event(VK_END, 0, 2, 0)
keybd_event(VK_SHIFT, 0, 2, 0)

实验2:
keybd_event(VK_SHIFT,0, 0, 0)       && SHIFT 按下
这时如果人工按一次end键,可以达到选择本行光标位置到句末的文本内容的目的,说明keybd_event(VK_SHIFT,0, 0, 0)   还是起作用的。

目前疑问:虚拟组合键是无效的,但是虚拟单个按键是有效的,其它键的虚拟组合也是有效的,只是shift这个键的组合没效果。

2017-06-27 13:21
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用红星二锅头在2017-6-27 16:03:44的发言:

用 SPY++ 测试,第二个参数不是 0
用下面的代码试试看
管用吗???

Declare keybd_event In user32 Integer, Integer,Integer,Integer

KEYEVENTF_EXTENDEDKEY = 0x01
KEYEVENTF_KEYUP = 0x02
VK_SHIFT = 0x10
VK_END = 0x23

=keybd_event(VK_SHIFT, 0x2A ,0, 0)
=keybd_event(VK_END, 0x4F, KEYEVENTF_EXTENDEDKEY, 0)
=keybd_event(VK_END, 0x4F, KEYEVENTF_EXTENDEDKEY, 0)
=keybd_event(VK_SHIFT, 0x2A, KEYEVENTF_KEYUP, 0)


谢谢!可以有效使用了!但是有个疑问:
=keybd_event(VK_END, 0x4F, KEYEVENTF_EXTENDEDKEY, 0)
=keybd_event(VK_END, 0x4F, KEYEVENTF_EXTENDEDKEY, 0)

为何要两句一样的代码?我试了一句就可以实现了,是否会有其它问题?
2017-06-28 12:39
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
现在可用代码:

keybd_event(VK_SHIFT, 42, 0, 0)
keybd_event(VK_END, 79, 1, 0)
keybd_event(VK_END, 79, 2, 0)
keybd_event(VK_SHIFT, 42, 2, 0)

感谢二锅头同志
2017-06-28 12:45
琅拿度
Rank: 1
等 级:新手上路
帖 子:166
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用红星二锅头在2017-6-28 13:21:17的发言:

是我粗心,复制后调试时没有及时的删除,对于你的善意批评,我虚心接受,谢谢,,,


呵呵,哪里敢提批评,真的是以为特殊需要,我有疑问我就问,有些东西不是理解得很深入,我一般都是照样画葫芦举一反三,能用就好。

真的非常感谢你!又学到一点!
2017-06-29 09:51
快速回复:关于shift 键的“键盘”虚拟按键
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018343 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved