用C#实现鼠标左右键的切换
来源:互联网 发布:java mongotemplate 编辑:程序博客网 时间:2024/05/21 13:39
1. SwapMouseButton
根据MSDN所述,可以通过调用SwapMouseButton这一API来实现鼠标左右键功能互换,Windows控制面板中的相关设置也是通过调用该API来实现的。该API存在于user32.dll文件中,它的原型是:
BOOL SwapMouseButton(
BOOL fSwap
);
我们可以在.NET工程中通过P/Invoke轻松声明对该API的调用。我写的调用声明如下:
// P/Invoke declarations
[DllImport("user32.dll")]
private extern static bool SwapMouseButton(bool fSwap);
其中,fSwap是唯一需要传入的参数,当它的值为true时,系统会把鼠标左右键功能进行互换(即换成左手鼠标);当它的值为false时,系统会把鼠标左右键功能还原为默认状态(即右手鼠标)。因此,当我想使用左手鼠标时,只需向SwapMouseButton方法传入一个true变量即可实现,非常方便。
2. SystemParametersInfo
除了调用SwapMouseButton来实现鼠标左右值功能切换之外,Windows还提供了另外一个实现同样效果的API:SystemParametersInfo。根据MSDN,该API的原型是:
BOOL SystemParametersInfo(
UINT uiAction,
UINT uiParam,
PVOID pvParam,
UINT fWinIni
);
用C#可以进行如下声明:
[DllImport("user32.dll")]
private extern static int SystemParametersInfo(uint uiAction, uint
uiParam, IntPtr pvParam, uint fWinIni);
其中,uiAction指定一个需要获取的系统参数,如屏幕大小、分辨率、鼠标配置等,如果传入参数SPI_SETMOUSEBUTTONSWAP就可以用来设置鼠标功能切换;当向uiParam参数传入正值时,系统就会把鼠标左右键功能进行互换(即换成左手鼠标),当向uiParam传入0时,系统还会把鼠标功能还原成默认状态(即还原为右手鼠标)。
由此,我们需要在uiAction位置传入SPI_SETMOUSEBUTTONSWAP。不过很明显,SPI_SETMOUSEBUTTONSWAP只是C语言中#define编译预定义指令所定义出的一个常量,我们必须在C#代码中对它进行重新定义。OK,打开Winuser.h头文件,在其中搜索SPI_SETMOUSEBUTTONSWAP,找到如下定义(位于8623行):
#define SPI_SETMOUSEBUTTONSWAP 33
可见,SPI_SETMOUSEBUTTONSWAP定义的是整型值33,这样我们就可以在C#中做出如下定义:
private const uint SPI_SETMOUSEBUTTONSWAP = 33;
3. GetSystemMetrics
通过上述两种方法,我们都可以轻松地实现鼠标功能切换了。不过,在每次切换之前,如果我们的应用程序能够获知系统当前的鼠标设 置,那么就可以决定该向哪个(相反)方向进行切换,从而给使用者带来一种更好的用户体验。那么该怎样才能获知当前系统的鼠标设置呢?GetSystemMetrics可以解决这一问题。
根据MSDN,GetSystemMetrics的原型是:
int GetSystemMetrics(
int nIndex
);
其中nIndex参数有SM_SWAPBUTTON值可选,SM_SWAPBUTTON在Winuser.h头文件中的定义是:
#define SM_SWAPBUTTON 23
我们可以在C#中如此定义SM_SWAPBUTTON:
private const int SM_SWAPBUTTON = 23;
声明GetSystemMetrics:
[DllImport("user32.dll")]
private extern static int GetSystemMetrics(int nIndex); // Updated 04.10.22. Many thanks to JGTM'2004 [MVP]
当GetSystemMetrics返回0时,表明当前系统鼠标设为默认状态(右手鼠标),否则表明鼠标已被设为左手鼠标。这样,我们就可以在切换鼠标状态之前获知系统的当前鼠标状态,从而可以做出相反方向的切换了。
- 用C#实现鼠标左右键的切换
- C#切换鼠标左右键习惯
- 鼠标左右键切换程序
- 切换鼠标左右键设置
- 鼠标滚轮及左右键切换图片
- 交换鼠标的左右键
- 仿遨游的鼠标按住左键点击右键和按住右键点击左键的功能(C#源码)
- 关于鼠标左中右键的监测
- Javascript 对鼠标左右键的区分
- 屏蔽鼠标左、右键
- 鼠标左右键互换
- java的鼠标右键实现
- 禁止使用鼠标左,右键
- JS 获取鼠标左右键
- js 区分鼠标左右键
- 模拟鼠标的左键单击和右键单击
- QTreeWidget区分鼠标左右键点击事件的方法
- 鼠标左键右键不触发事件的原因
- 信息安全评价政策研究
- Android程序不在最近运行中显示
- ThinkPHP学习笔记(九)Thinkphp中的查询方式大综合
- 用eclipse开发xifre webservice
- JAVA内存的一些总结(二) 对象访问
- 用C#实现鼠标左右键的切换
- android ant 打包
- adstpall.sh:Exiting with status 137
- mac svn命令 linux同样适用
- JAVA内存的一些总结(三) 垃圾回收
- 如何自定义FusionCharts图表上的工具提示?
- 一个职工登记表
- 协同软件表单自定义平台
- 线程局部存储TLS