暑假闲来无事,随便找了个网上比较多人推荐的悠闲游戏来玩了下(《咕噜小天使》),正好该游戏支持游戏杆,于是我便萌生了做这个小小的软件的想法,其中参考了Kaper的一篇文章(《[个人心得]Windows下对游戏杆编程(未完)》),小弟第一次在高手如云的CSDN发帖,若有不正确之处,还望各位前辈大虾们指正~~
首先介绍关于游戏杆(JoyStick)的几个API:
joyConfigChanged '通知驱动程序游戏杆设置已经改变并重新从注册表读取设置
joyGetDevCaps '查询指定的游戏杆设备以确定其性能
joyGetNumDevs '返回系统支持的游戏杆设备的数量
joyGetPos '查询指定的游戏杆设备的位置和活动性
joyGetPosEx '查询一个游戏杆设备的位置和它的按扭状态
joyGetThreshold '查询指定的游戏杆设备的当前移动阈值
joyReleaseCapture '释放由JoySetCapture函数设置的在指定游戏杆设备上的捕获
joySetCapture '发送一个游戏杆消息到指定的窗口
joySetThreshold '设置指定的游戏杆设备的移动阈值
主要用到的是 joySetCapture 和 joyReleaseCapture 这两个函数,我们先来看 joySetCapture 这个函数,这个函数的声明是:
Private Declare Function joySetCapture _
Lib "winmm.dll" (ByVal hWnd As Long, _
ByVal uID As Long, _
ByVal uPeriod As Long, _
ByVal bChanged As Long) As Long
hWnd 是要获取消息的窗口句柄
uID 是游戏杆的 ID,可以是 JOYSTICKID1 或者 JOYSTICKID2
uPeriod 是查询游戏杆消息的频率,单位是毫秒 bChanged 是改变位置标志。若设为 True,则仅当游戏杆改变的值大于或等于 joySetThreshold 设定的域值时才发送游戏杆值改变的消息到主程序;若设为 False,则只要达到 uPeriod 指定的时间就发送消息到主程序。
joyReleaseCapture 函数只有一个参数 uID,这个参数可以是 JOYSTICKID1 或者 JOYSTICKID2,表示要释放捕捉游戏杆 1 或游戏杆 2 的消息。
完整演示程序源代码在这里下载:http://download.csdn.net/source/535976