我从另一个论坛重复一个问题,因为我想要相同的答案。
从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
以防止控制台窗口闪烁。
我通过在开始菜单中搜索“鼠标”来解决同样的问题。 你会找到一个同名的选项。 点击它。 将出现一个对话框。 在“按钮配置”框中取消选择按钮选项卡中的“切换主要和次要按钮”选项。