2

我正在开发 WPF 应用程序。我有一个场景,当它弹出时我需要找到一个非托管弹出窗口并将其带到应用程序的前面。我使用 user32.dll 和以下代码片段(类似)来实现它:

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

但是当我在另一台机器上安装我的应用程序时,代码不起作用。从互联网上,我发现代码作为服务运行并且无法在不同的机器上访问的原因。这个问题有什么解决方法吗?

有没有办法在不使用 user32.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 回答