3

複数のアプリケーション (WMP、Google Earth など) の制御を集約する C# アプリケーションを作成しています。私が自分で書いていないアプリの場合、プロセスとして起動しているので、それらのハンドルがあります (handle = Process.Start("C:\whatever.exe"); がコードだと思います)。

スムーズに動作させるには、Process.Start() で起動したウィンドウを含め、各ウィンドウの最小化/最大化状態を制御できる必要があります。これを行うと主張するいくつかのメソッドを見てきましたが、通常は user32.dll のインポートと ShowWindow(handle, state) の適用が必要です。

2つ質問します。これはこれを行うための最良の方法ですか?私は .NET/Windows プログラミングが初めてです (*nix 出身)。さらに、私はそれを機能させることができなかったので、初心者を捕まえる癖はありますか?

(参考: Windows 7 RTM 上の VS 2008)

4

3 に答える 3

2

ウィンドウのハンドルを探している場合、プロセスのハンドルを取得することはおそらく間違ったハンドルです。

VB6 時代に戻って、タイトルでウィンドウを検索できるライブラリを使用し、そこから min/max/close/activate などにメッセージを渡すことができましたが、.Net に移行して以来、そのようなことはしていません。 .Net 用に同じタイプのライブラリが存在することを確認します

コメントへの回答:
はい、GetMainWindowHandle プロパティがあることがわかりました。次に、Windows メッセージングを調べる必要があります。これは、さまざまな Windows アクションを実行するために「メッセージ」を送信する場所です。メッセージコードは手元にありませんが、各メッセージのコードがわかれば、かなり簡単です。

于 2009-10-09T18:25:19.023 に答える
1

Windows アクセシビリティAPIも確認してください。これらは、UI テストを自動化するために Microsoft 内で広く使用されています。

于 2009-10-09T20:04:37.217 に答える
1

より自然な API でこれを行う場合は、White よりも悪い結果になる可能性があります。これは主に機能テストを目的としています (そして、Jim が言及した Windows アクセシビリティ API に基づいています) が、目的には役立つはずです。Windows の操作については、このページをご覧ください。あなたはおそらく次のように書くでしょう:

var application = Application.Attach(processID);
var window = application.GetWindow(windowName);
window.DisplayState = DisplayState.Minimized;
于 2009-10-09T20:20:28.717 に答える