在平时用电脑的过程中,我喜欢隔段时间就把鼠标左右调换一下,一来是想让自己一侧的肩、手臂、手腕能得到休息,尽量避免因长期固定姿势使用鼠标而带来的身体不适,另一方面也因为我本来就是个左撇子,喜欢尝试给两只手均等的做事机会。

当然,自从我给电脑同时接上左右两只鼠标以后,来回调换鼠标是避免了(据我所知,有在电脑上接三四只鼠标的,真是厉害!),但系统对于鼠标左右键的安排却不听我的调换,还要费力地去控制面板中设置一番,非常麻烦。因此我想,何不写几行代码,让鼠标左右键能在最短的时间内左右切换呢?这主意不错!OK,马上到MSDN里查找一番,十几分钟写出了下面这个小程序。

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;

用C#实现鼠标左右键的切换.doc

下载Word文档到电脑,方便收藏和打印[全文共1304字]

编辑推荐:

下载Word文档

c语言鼠标左右键怎么互换,用C#实现鼠标左右键的切换相关推荐

  1. 计算机控制版面交换鼠标左右键,鼠标左右键怎么互换呢?左右键互换设置方法...

    鼠标使我们常用办公用品之一,对于鼠标左键我们并不陌生,我们无论是办公,网上娱乐,用到最多的时候就是左键,我们用它进行选择点击目标,正式因为左键用的次数多,他也是易耗损的一面,为了延长鼠标寿命或是鼠标左 ...

  2. Mac鼠标左右键轻松互换

    通常我们使用鼠标都是以左键为主键,但是也有一些人习惯以右键为主.那如何对左右键进行交换呢?今天小编为大家介绍一个轻松交换左右键的技巧,让你不在为不习惯左键而烦恼! 步骤1:单击菜单栏上的Apple徽标 ...

  3. winform ctrl键单击多选_鼠标各键在CAD中的运用,左右键常用,但滚轮这个功能不一定用过...

    在CAD制图过程中,我们通常是左手按键盘,右手握鼠标,两手同时开工,可以说,鼠标是我们制图过程中用得最频繁的工具.那么鼠标的各个键功能,我们是否都常用呢?不一定,有些鼠标键功能可能都没怎么用过,下面以 ...

  4. Vue项目判断鼠标点击事件的左键、中键(滚轮)或右键

    Vue项目判断鼠标点击事件的左键.中键(滚轮)或右键 去掉特定区域的右键点击事件 在需要去掉右键点击事件的区域最外层div标签中添加@contextmenu.prevent属性 <templat ...

  5. click点击后鼠标移去就失效怎么实现_鼠标右键失灵怎么办,你知道原因吗?

    在上网时,有时会遇到按右键没有反应的情况.一开始还以为是中了病毒,但是重启之后,又恢复正常了,这到底是怎么回事呢? 如果是在我电脑上操作电脑软件导致的鼠标右键失灵可能以下原因造成的. 一:系统繁忙,不 ...

  6. php控制鼠标,HTML_用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击),怎么用VBS模拟鼠标左键单击、 - phpStudy...

    用VBS控制鼠标的实现代码(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击) 怎么用VBS模拟鼠标左键单击.左键双击.右键单击?-- 网上搜到的答案普遍是VBS无法实现,或者是要用第三方COM( ...

  7. c语言 正号运算符 作用,C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,...

    1级(左结合) () 圆括号:[]下标运算符:->指向结构体成员运算符:. 结构体成员运算符. 2级(右结合) !逻辑非运算符:~按位取反运算符:++前缀增量运算符:--前缀减量运算符:+正号运 ...

  8. vfp中treeview右键菜单_用卓语言程序把Sublime Text 3添加到和删除出右键菜单

    用卓语言程序把Sublime Text 3添加到和删除出右键菜单 Sublime Text 是一款跨平台代码编辑器(Code Editor)软件.Sublime Text 3既可以编写代码还可以编辑文 ...

  9. 计算机鼠标左键不起作用,为什么电脑的左键点了不起作用

    盘.mp3或者移动硬盘,还有电脑磁盘,双击左键打不开,必须点击右键才能打开,是不是感觉好麻烦啊,现在有了解决的方法,大家一起研究研究~看看有没有新方法: 解决的方法: 方法(一): 1.杀毒 2.删除 ...

最新文章

  1. SQL SERVER定时备份数据库
  2. Tivoli NetView
  3. Hadoop的安装(单机和集群)
  4. UICollectionView的无限滚动---妥协做法
  5. Linux Shell脚本专栏_监控100台服务器磁盘利用率脚本_07
  6. Web前端笔记(8) 管后台理页面
  7. Driver 初始化顺序
  8. 攻击者可提前检测到 Linux 内核的补丁并开发 exploit
  9. 8-16 常见开发运维问题
  10. Bp神经网络+C++实现
  11. Spark2.1特征处理:提取/转换/选择
  12. 【JVM】Java命令以及JVM调优
  13. VS2019创建COM组件
  14. 软件评测师--第17小时 功能测试
  15. Win10电脑资源管理器怎么打开?五种打开方式详解
  16. virtio-blk简易驱动
  17. 8.1 有监督学习算法
  18. 求html写一个羽毛球拍的代码,一种组合式羽毛球拍的制作方法
  19. FPGA中LUT初步学习
  20. 2018华为软件精英挑战赛经验(一)

热门文章

  1. PIC16F877A单片机(如何写 配置字)
  2. C语言判断输入的年份是否为闰年。
  3. DDD领域驱动设计实战 - 创建实体身份标识的常用策略
  4. 幼儿课外活动游戏_有哪些适合小朋友的户外活动或游戏?
  5. 怎么做成html网页链接,HTML网页超链接标记
  6. Linux系统中使用linux-wifi-hotspot工具开启网络热点
  7. Starling Feathers Controls Label
  8. CAD多线怎么转换成多段线?
  9. 嵌入式 RTP协议详解以及其他相关协议
  10. 摄像机产品经理应该知道的那些光学知识(景深、光圈)——《工程光学》摘抄汇总版第二部分