| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1740 人关注过本帖, 1 人收藏
标题:我想编一个组合键代替单独键位的程序。比如按下a和s等于按下q
只看楼主 加入收藏
cossu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-7
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:10 
我想编一个组合键代替单独键位的程序。比如按下a和s等于按下q
思路大概有一个。但不知对不对。
windows应该不支持同时的多键位输入。现在的所谓组合键是指一定时间内按下的键就自认为是组合键。
所以再编程的时候需要一个定时器来判断按下的键位是否属于组合键。
然后就是用call来制定组合键的功能是q。
可是我只有思路。。。新手。。。不知道该怎样下手。
求代码。
搜索更多相关主题的帖子: 定时器 编程 windows 组合键 
2011-12-07 16:39
cossu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-7
收藏
得分:0 
2011-12-07 18:00
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:7 
图片附件: 游客没有浏览图片的权限,请 登录注册

不要選我當版主
2011-12-07 21:33
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:7 
定时器来判断按下的键位是否属于组合键?

无知
2011-12-08 00:08
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:7 
程序代码:
Option Explicit

Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim aKey(0 To 255) As Byte
    GetKeyboardState aKey(0)
    If MyKey(aKey(vbKeyA)) And MyKey(aKey(vbKeyS)) Then KeyCode = vbKeyQ
    'Debug.Print "Form_KeyDown", KeyCode, Chr$(KeyCode), Hex$(aKey(vbKeyA)), Hex$(aKey(vbKeyS)), Hex$(aKey(vbKeyQ))
    Debug.Print "Form_KeyDown", KeyCode, Chr$(KeyCode), MyKey(aKey(vbKeyA)), MyKey(aKey(vbKeyS)), MyKey(aKey(vbKeyQ))
End Sub

Function MyKey(bKey As Byte) As Boolean
    MyKey = (bKey And &H80)
End Function
2011-12-08 01:24
cossu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-7
收藏
得分:0 
系统不支持同时输入多个键。比如ctrl + shiftl来调出输入法。无论是同时按还是快速连按都能调出。。。额。。表达不太明白。
2011-12-08 21:43
cossu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-7
收藏
得分:0 
回复 5楼 bczgvip
请问下这个vbkey()是键盘上所有键都可以用么?
比如shift或者小键盘数字加减号和方向键。。。
2011-12-08 21:46
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
可以
程序代码:
Option Explicit

Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim aKey(0 To 255) As Byte
    GetKeyboardState aKey(0)
    If MyKey(aKey(vbKeyA)) And MyKey(aKey(vbKeyS)) Then KeyCode = vbKeyQ
    'Debug.Print "Form_KeyDown", KeyCode, Chr$(KeyCode), Hex$(aKey(vbKeyA)), Hex$(aKey(vbKeyS)), Hex$(aKey(vbKeyQ))
    Debug.Print "Form_KeyDown", KeyCode, Chr$(KeyCode), MyKey(aKey(vbKeyA)), MyKey(aKey(vbKeyS)), MyKey(aKey(vbKeyQ))
'    Debug.Print , MyKey(aKey(vbKeyUp)), MyKey(aKey(vbKeyDown)), MyKey(aKey(vbKeyLeft)), MyKey(aKey(vbKeyRight))
    Debug.Print "State Shift:Ctrl:Alt", MyKey(aKey(vbKeyShift)), MyKey(aKey(vbKeyControl)), MyKey(aKey(vbKeyMenu))
End Sub

Function MyKey(bKey As Byte) As Boolean
    MyKey = (bKey And &H80)
End Function
2011-12-08 22:34
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:0 
以下是引用cossu在2011-12-8 21:43:26的发言:

系统不支持同时输入多个键。比如ctrl + shiftl来调出输入法。无论是同时按还是快速连按都能调出。。。额。。表达不太明白。

避免使用系統熱鍵

无知
2011-12-08 23:25
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
没记错的话以前在CSDN上看过有位高手写了个VB的组合键的模组~
去查查看~看是不是你要的~不过我保证你看不懂它的程式码~

不要選我當版主
2011-12-09 10:13
快速回复:我想编一个组合键代替单独键位的程序。比如按下a和s等于按下q
数据加载中...
 
   



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

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