4

Windows キーのキープレスをエミュレートする必要があるプロジェクトに取り組んでいます。SendKeys.Send を試してみましたが、役に立ちませんでした。

具体的には、Windows キーはボタンと連携する必要があります。つまり、Windowsキーとプラス/マイナスを送信したいのです。

4

4 に答える 4

7

.NET フレームワークでこれらのような下位レベルの関数を見つけることはほとんどないことを付け加えておきます。両方の提案が「非 C#」関数を指している理由について混乱している場合は、おそらくP/Invokeに関する詳細を使用できます。

基本的に、.NET アセンブリ内に存在しない Windows API 関数に "関連付ける" C# 関数を定義する方法があります (代わりに、通常 C++ で実装され、標準 DLL として利用可能です)。このプロセスは、"(Windows) プラットフォームの呼び出し" (つまり、P/Invoke) と見なされます。

C++ スタイルの呼び出しと C# スタイルの呼び出しの間ですべてのデータ型を一致させるのは、最初は少し難しいかもしれませんが、幸いなことに、道を開いた他の方法があります。

推奨される関数SendInputには、 PInvoke.netにPInvoke ラッパーがあります。このラッパー クラスは、アセンブリで使用できる場合、C# 関数であるかのように SendInput を呼び出すことができます。

PInvoke.net は、基本的に Windows でよく知られている API 呼び出し用の PInvoke wiki であり、通常は API 呼び出しの C#/VB.NET ラッパーを備えています。

于 2009-04-16T00:12:21.970 に答える
2

System.Windows.Forms.Keys列挙型の LWin 値でkeybd_event キーダウン (ExtendedKey と呼ばれる) を使用し、 2 番目の文字 (+) をキーダウンし、両方のキーをキーアップするのが最善の策だと思います。

SendKeys が Windows キーを修飾子として使用するとは思えません。

于 2009-04-14T05:09:56.687 に答える
1

これはやり過ぎかもしれませんが、AutoItをDLLとして使用する方法であるAutoItXを使用してみることができます。私はスタンドアロンスクリプトのみを作成しましたが、AutoItを使用するとWindowsキーを押すことを非常に簡単にシミュレートできることを知っています。

たとえば、実行ダイアログを開くには、次のようにします。

Send( "#r"); Win + R = run

于 2009-04-16T12:31:43.027 に答える
1

SendInputまたは古いkeybd_eventを試してください

于 2009-04-14T04:46:26.510 に答える