7

同じ答えが欲しいので、別のフォーラムからの質問を繰り返しています。

MSDNのSwapMouseButton関数から。

コマンドプロンプトからrundll32.exeを介してブールデータをuser32.dllから実行するコマンドのブール型引数に渡すにはどうすればよいですか?

CMD(コマンドプロンプト)からこれを実行しようとしています

RUNDLL32.EXE user32.dll,SwapMouseButton *

ここにアスタリスクがあるのは、議論が進むべき場所です。すでに引数なしで実行し、マウスの左ボタンと右ボタンを入れ替えました(ブール引数のデフォルトのエントリはTRUEのようです)。今、私はそれを元に戻したいです。ただし、引数にFALSEを渡すためにこれらのそれぞれを試しましたが、どれも機能しませんでした(マウスボタンを通常に戻すものはありません)。

  • F
  • f
  • false
  • 誤り
  • FALSE
  • 「偽」
  • 「偽」
  • 「FALSE」
  • 0
  • -1

必要に応じて議論を渡すのを手伝ってください。前もって感謝します。

4

5 に答える 5

16

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
        }
    }
}
于 2012-05-09T02:19:01.363 に答える
14

あなたはそのために使用しませんrundll32

Q164787:情報:WindowsRundllおよびRundll32インターフェイス

[...] RundllおよびRundll32プログラムでは、エクスポートされた関数をDLLから呼び出すことはできません。たとえば、これらのユーティリティプログラムを使用して、システムDLLからエクスポートされたWin32 API(アプリケーションプログラミングインターフェイス)呼び出しを呼び出すことはできません。プログラムでは、それらによって呼び出されるように明示的に記述されたDLLからのみ関数を呼び出すことができます。


.NET Frameworkランタイムがインストールされている場合は、いくつかの言語用のコンパイラが付属しています(たとえば、%SystemRoot%\Microsoft.NET\Framework64\v3.5\csc.exe64ビットシステム上のv3.5 C#コンパイラ用)。あなたは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
于 2011-01-25T06:01:26.680 に答える
5

左利きのユーザーのマウスのレイアウトを構成するために使用できるハックがあります。次のコマンドを実行するだけです。

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を必要とします。rundll32.exeからuser32.dll内のSwapMouseButtonに渡される有効なウィンドウハンドルは0と等しくなく、BOOL値を使用する場合はTRUEとして定義されます。

rundll32.exeの詳細と、この実行可能ファイルによって呼び出される関数で使用されるプロトタイプについては、次のURLを参照してください。 情報:WindowsRundllおよびRundll32インターフェイス

関数SwapMouseButtonの詳細については、次の場所を参照してください 。SwapMouseButton関数(Windows)

于 2015-05-17T10:40:39.347 に答える
3

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"

コンソールウィンドウが点滅しないように、名前をに変更mainします。WinMain

于 2017-04-15T17:52:09.883 に答える
-1

スタートメニューで「マウス」を検索して同じ問題を解決しました。同じ名前のオプションがあります。クリックして。ダイアログボックスが表示されます。[ボタンの構成]ボックスで[ボタン]タブの[プライマリボタンとセカンダリボタンを切り替える]オプションのチェックを外します。

于 2016-10-04T06:38:08.827 に答える