2009-09-04 12 views
0

ビルド(サービスとして実行)の一部としてWinFormアプリケーションをテストしようとしています。興味のあるコントロールを見つけるためにGetDesktopWindowとEnumChildWindowsを使用しています。これはコンソール、デバッガなどから対話型セッションで実行すると完全に動作しますが、ビルドの一部として実行するとコントロールが見つかりません。サービスとして実行しているときにすべてのウィンドウを見つける代替手段として何が使えますか?GetDesktopWindowの代わりにサービスとして実行する場合

答えて

1

通常、Windowsサービスは、Windows Vistaの導入以来、デスクトップとはやり取りできません。スケジュールされたタスクとして実行するようにビルドプロセスを変更することを検討しましたか?とにかくGetDesktopWindowを使用しているのはなぜですか?あなたがあなたのアプリを見つけるためにすべてのデスクトップウィンドウを列挙しようとしているなら、ここで何か奇妙なことをしようとしているように思えます。

+0

最初は、アプリケーションのメインウィンドウを使用して子コントロールを見つけましたが(これは間違いなくもっと賢明なことです)、通常の実行条件であってもカスタムのモーダルダイアログボックスは見つかりませんでした.ShowDialog())。 Btw。ビルドサーバーをサービスとして実行するという通常の習慣ですが、初めてWinForm GUIをテストしようとしています。 – Grzenio

0

実行中のプロセスに手を触れることはできますか?素晴らしいものではないが、うまくいくかもしれない?

+0

どうすればいいですか?私の勝つAPIスキルはかなり低いです。 – Grzenio

+0

Process.GetProcesses()でSystem.Diagnosticsを使用すると、プロセス全体を列挙できます。 – Toto

+0

しかし、どのようにプロセスのすべてのウィンドウを取得できますか? – Grzenio

0

あなたは適切なアクセス権を持っていればいいのに、デフォルトの対話型デスクトップでEnumDesktopWindowsを使用してください。

関連する問題