2

私はWPFアプリケーションに取り組んでいます。管理されていないポップアップウィンドウがポップアップしたときにそれを見つけてアプリケーションの前に表示する必要があるシナリオがありました。私はuser32.dllと次のコードスニペット(のようなもの)を使用してそれを達成しました:

private void SetPopupScreenForeground()
    {
        string popupTitle = "Popup Screen"
        IntPtr hwnd = FindWindowByCaption(IntPtr.Zero, popupTitle);
        if (IntPtr.Zero != hwnd)
        {
            SetForegroundWindow(hwnd);
        }
    }

しかし、アプリケーションを別のマシンにインストールすると、コードが機能しません。インターネットから、コードがサービスとして実行されており、別のマシンにアクセスできないことが理由であることがわかりました。この問題の回避策はありますか?

ユーザー32.dllを使用せずに、管理されていないウィンドウを見つけてWPFアプリケーションで前面に表示する方法はありますか?助けてください。

4

2 に答える 2

1

問題は、実際にはWindowsが「デスクトップ」をどのように処理するかです。サービスは、ユーザーのデスクトップと対話する機能を持たない特別なデスクトップの下で実行されます。名前付きパイプなどの共有オブジェクトを使用して通信する必要があります。

ここに重複した質問があります:

サービスアプリケーションからFindWindow()を使用するにはどうすればよいですか?

于 2013-01-30T22:51:55.823 に答える
0

サービスとはWindowsサービスを意味する場合、通常、それらはWindowsデスクトップとまったく対話できないため、user32.dllを使用するかどうかは問題ではありません。

于 2013-01-30T22:51:16.253 に答える