私は現在Arduinoに基づいてプログラム可能なキーボードで作業しています。 C#プログラムは、USBを介してキーが押された情報を取得します。これまでは、ショートカットを使ってプログラムを開くことができました。C#アクティブなプログラムID
さらに、私はさまざまなプログラムに異なるキーバインディングを設定したいと考えています。 これを動作させるには、exeファイルの名前のような、アクティブなプログラムから特定の詳細を取得する必要があります。
検索中に、GetActiveWindow
機能でアクティブなウィンドウを取得できることがわかりました。別のWindows機能を使用する必要があることがわかりましたが、どちらが見つからないのですか。
ウィンドウのヘッダーテキストを取得できましたが、このテキストは開いているWordドキュメントごとに異なるため、これを使用できませんでした。
string activeProgram;
...
if(activeProgram=="Word"){...}
else if(activeProgram=="Chrome"){...}
コードはこれまでのところ動作しており、私のファイルの完全なパスを取得しています(これは本当にうまくいっています。ありがとうございます)。問題は、別のウィンドウの名前を取得するときです。私は32ビットプロセスで64ビットプロセスにアクセスできないため、Win32例外が発生します。自分のファイルを64ビットプログラムにすることはできますか?それとも別の方法がありますか? – Schiep
@Schiepまず、IntPtrとintの間にキャストしていないことを確認します。 IntPtrを返すように['GetActiveWindow'(http://www.pinvoke.net/default.aspx/user32.getactivewindow)を宣言する必要があります。第2に、32ビットと64ビットのコンパイルターゲットを設定する必要があるかもしれません(ビルド - >設定マネージャの下にあります)。 msdnの[64ビットアプリケーション](https://msdn.microsoft.com/en-us/library/ms241064.aspx)を参照してください。 「既存の.NET(C#)アプリケーションを64ビットに移植する際の考慮事項」(https://www.ibm.com/support/knowledgecenter/SSGSMK_7.1.1/development_sym/app_net_port_64bit.html)の記事は、Symphonyを無視するのに役立ちます。 – Theraot