2012-03-09 16 views
2

別のウィンドウの内側で、(トップレベルウィンドウを開く)ウィンドウアプリケーションを実行することは可能ですか?または、ウィンドウを所有している別の「デスクトップ」/偽のデスクトップを設定しますか?別のウィンドウ内でWindowsアプリケーションを実行

私はUI Automationを使用してテスト用のアプリケーションを自動化しています。デスクトップとアプリの間の人工的な親ウィンドウ、または擬似デスクトップ、2番目のデッソップなどのサンドボックスにテスト対象のアプリケーションを配置したいと思います。このデスクトップ(およびテスト対象のアプリケーション)は表示する必要はありません。

テスト中のアプリケーションの異なるインスタンス(通常のデスクトップまたはサンドボックス)は、互いに衝突しないようにしてください(ウィンドウ名/クラスワイズ) - テスト対象のアプリケーションは複数のインスタンスを持つことが安全です...

私はこれがハイキックなように見えるので、win32ハッキングは歓迎されるでしょう。 :)

+0

これはサポートされています。あなたのものの中にウィンドウを接着するには、SetParent()を呼び出すことができます。実際には役に立たないが、何か意味のあることをするにはウィンドウハンドルが必要です。 GetWindowRect()を呼び出すと同じことが実現します。 –

答えて

4

CreateDesktopを使用してデスクトップを作成し、ターゲットアプリケーションを起動するときにSTARTUPINFOでその名前を渡すことができます。

+0

素晴らしいです、ありがとうございます。私は今夜​​これで遊びます。 –

+2

これにはいくつかの制限があることに注意してください。アプリを操作するUIAutomation機能の多くは(情報を返すだけではなく)ターゲットのUIに入力フォーカスが必要ですが、現在アクティブなデスクトップ。したがって、デスクトップを作成してその上にアプリケーションを置くことはできますが、そのデスクトップが現在のもの(表示可能なもの)でない場合、いくつかの自動化が予期しない方法で失敗する可能性があります。 – BrendanMcK

+0

非アクティブデスクトップでの自動化の問題の詳細については、関連する質問への私の答えを参照してください。[こちら](http://stackoverflow.com/questions/9563549/what-happens-behind-the-windows-lock -screen/9565714#9565714)。 – BrendanMcK

関連する問題