我如何使用Rundll32 swapmousebutton?

我从另一个论坛重复一个问题,因为我想要相同的答案。

从MSDN的SwapMouseButton函数 。

如何从命令提示符通过rundll32.exe布尔数据传递到从user32.dll运行的命令中的布尔types参数?

我试图从CMD运行(命令提示符)

RUNDLL32.EXE user32.dll,SwapMouseButton * 

这里的星号在哪里是论点应该去的地方。 我已经运行它没有参数,它交换了我的左右鼠标button(似乎TRUE是布尔参数的默认条目)。 现在我想撤消它。 不过,我已经尝试了每个这些在参数中传递FALSE,并没有工作(没有设置我的鼠标button恢复正常)。

  • F
  • F
  • “假”
  • “假”
  • “假”
  • 0
  • -1

请帮助我根据需要传递论据。 提前致谢。

使用rundll32

Q164787:信息:Windows Rundll和Rundll32接口

Rundll和Rundll32程序不允许您从任何DLL调用任何导出的函数。 例如,您不能使用这些实用程序来调用从系统DLL导出的Win32 API(应用程序编程接口)调用。 这些程序只允许你从一个明确写入的DLL调用函数。


如果已经安装了.NET Framework Runtime,则会附带多种语言的编译器(例如,用于64位系统上的v3.5 C#编译器的%SystemRoot%\Microsoft.NET\Framework64\v3.5\csc.exe )。 你可以用C#编写一个程序 :

 using System.Runtime.InteropServices; using System; class SwapMouse { [DllImport("user32.dll")] public static extern Int32 SwapMouseButton(Int32 bSwap); static void Main(string[] args) { if (args.Length > 0 && String.Compare(args[0], "/u", true) == 0) SwapMouseButton(0); else SwapMouseButton(1); } } 

编译:

 "%SystemRoot%\Microsoft.NET\Framework64\v3.5\csc" swap.cs 

交换/取消切换按钮:

 swap swap /u 

非常感谢C#解决方案。 它像一个魅力工作。

我做了一些小改动,只需点击桌面快捷方式即可切换鼠标主键,而不用传入任何参数。 如果我的方法帮助别人,这里是这个版本:

 using System.Runtime.InteropServices; using System; class SwapMouse { [DllImport("user32.dll")] public static extern Int32 SwapMouseButton(Int32 bSwap); static void Main(string[] args) { int rightButtonIsAlreadyPrimary = SwapMouseButton(1); if (rightButtonIsAlreadyPrimary != 0) { SwapMouseButton(0); // Make the left mousebutton primary } } } 

有黑客,可以用来为左手用户配置鼠标的布局。 只需运行以下命令:

 rundll32.exe user32.dll,SwapMouseButton 

运行此命令为左手用户重新配置鼠标的布局。

我会给你一个这种行为的解释:

由rundll32.exe调用的函数具有以下函数原型:

 void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow); 

SwapMouseButton具有以下函数原型:

 BOOL WINAPI SwapMouseButton( _In_ BOOL fSwap ) 

SwapMouseButton使用与rundll32.exe调用的每个函数相同的调用约定(__stdcall)。

如果使用带附加命令行的rundll32.exe调用SwapMouseButton,则此命令行将作为lpszCmdLine传递给此函数,并将被忽略。

如果使用rundll32调用该函数,则rundll32将自动传递一个有效的窗口句柄(HWND)作为被调用函数的第一个参数。

hwnd – 窗口句柄,应该用作DLL创建窗口的所有者窗口

Rundll32调用的函数SwapMouseButton函数需要TRUE作为第一个参数,以便为左手用户配置鼠标的布局。 在使用BOOL值时,由rundll32.exe传递给user32.dll中的SwapMouseButton的有效窗口句柄不等于0,并且被定义为TRUE。

你可以在这里找到rundll32.exe和这个可执行文件调用函数使用的原型的详细信息: INFO:Windows Rundll和Rundll32 Interface

您可以在这里找到有关函数SwapMouseButton的详细信息: SwapMouseButton函数(Windows)

C中较短的交换器:

 #include <windows.h> int main() { if (SwapMouseButton(TRUE)) SwapMouseButton(FALSE); return 0; } 

安装Windows SDK并在x86_x64中编译交叉工具命令提示符通过例如。 cl swapmbtn.c "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\x64\user32.lib"

重命名为WinMain以防止控制台窗口闪烁。

我通过在开始菜单中搜索“鼠标”来解决同样的问题。 你会找到一个同名的选项。 点击它。 将出现一个对话框。 在“按钮配置”框中取消选择按钮选项卡中的“切换主要和次要按钮”选项。