windows 如何使用Rundll32交换鼠标按钮?

qnyhuwrf  于 2023-04-07  发布在  Windows
关注(0)|答案(6)|浏览(170)

我在重复另一个论坛的问题,因为我想得到同样的答案。
来自MSDN的SwapMouseButton Function
如何通过rundll32.exe将布尔数据从命令提示符传递到从user32.dll运行的命令中的布尔类型参数?
我正试图从CMD(命令提示符)运行此命令

RUNDLL32.EXE user32.dll,SwapMouseButton *

星号在这里的地方是参数应该去的地方。我已经在没有参数的情况下运行了它,它交换了我的鼠标左键和右键(似乎TRUE是布尔参数的默认条目)。现在我想撤销它。然而,我已经尝试了在参数中传递FALSE的每一种方法,没有一种方法有效(没有一种方法将我的鼠标按钮设置回正常)。

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

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

zxlwwiss

zxlwwiss1#

非常感谢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
        }
    }
}
eyh26e7m

eyh26e7m2#

do not使用rundll32

  • Q164787:信息:Windows Rundll和Rundll 32接口 *
  • [...]* Rundll和Rundll 32程序不允许您从任何DLL调用任何导出的函数。例如,您不能使用这些实用程序调用从系统DLL导出的Win32 API(应用程序编程接口)调用。这些程序只允许您从显式编写的DLL调用函数。

如果安装了.NET Framework运行时,它附带了几种语言的编译器(例如,64位系统上v3.5 C#编译器的%SystemRoot%\Microsoft.NET\Framework64\v3.5\csc.exe)。您可以write a program in 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
px9o7tmv

px9o7tmv3#

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

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 传递给此函数,并将被忽略。
如果您使用rundll 32调用该函数,rundll 32会自动传递一个有效的窗口句柄(HWND)作为被调用函数的第一个参数。
hwnd -窗口句柄,应用作DLL创建的任何窗口的所有者窗口
rundll 32调用的SwapMouseButton函数需要TRUE作为第一个参数,以便为左撇子用户配置鼠标布局。当使用BOOL值时,rundll32.exe传递给user32.dll中SwapMouseButton的有效窗口句柄不等于0,并且定义为TRUE。
你可以在这里找到rundll32.exe和这个可执行文件调用的函数所使用的原型的详细信息:INFO: Windows Rundll and Rundll32 Interface
你可以在这里找到有关SwapMouseButton函数的详细信息:SwapMouseButton function (Windows)

whlutmcx

whlutmcx4#

C中较短的交换器:

#include <windows.h>

int main()  
{
    if (SwapMouseButton(TRUE))
        SwapMouseButton(FALSE);

    return 0;  
}

通过cl swapmbtn.c "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\x64\user32.lib"在x86_x64 Cross Tools命令提示符下安装Windows SDK并编译
main重命名为WinMain以防止控制台窗口 Flink 。

xfb7svmp

xfb7svmp5#

下面是一个简单的C/C++ Windows应用程序的代码:

// SwapMouseButtons.cpp - Inversion of mouse buttons

#include <Windows.h>
#include <iostream>
#include <WinUser.h>
#include <string.h>

void main(int nArgs, char* szArguments[])
{
    if (nArgs > 1 && (_strcmpi(szArguments[1], "FALSE") == 0 || _strcmpi(szArguments[1], "F") == 0
            || _strcmpi(szArguments[1], "RIGHT") == 0 || _strcmpi(szArguments[1], "R") == 0
            || _strcmpi(szArguments[1], "0") == 0)) { // Right handed
        SwapMouseButton(false);
        std::cout << "Mouse buttons set for Right handed (default) usage\n";
        return;
    }
    if (nArgs > 1 && (_strcmpi(szArguments[1], "TRUE") == 0 || _strcmpi(szArguments[1], "T") == 0
            || _strcmpi(szArguments[1], "LEFT") == 0 || _strcmpi(szArguments[1], "L") == 0 
            || _strcmpi(szArguments[1], "1") == 0)) { // Left handed
        SwapMouseButton(true);
        std::cout << "Mouse buttons set for Left handed (inverted) usage\n";
        return;
    }
    // No option selected => help
    std::cout << "Swap Mouse Buttons\nUsage: SwapMouseButtons x\nOptions for x:\n  - False, F, Right, R or 0 for left handed usage (default usage)\n  - True, T, Left, L or 1 for right handed usage (inverted usage)\n\n";
}

编译版本(x86)可以在这里找到:http://micromeg.free.fr/english/progs.html

vfh0ocws

vfh0ocws6#

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

相关问题