这就是我所拥有的:一个用 C++ 编写的 Web 浏览器插件和一个用 C# 编写的 Windows 应用程序。它们通过命名管道进行通信。该插件指示 C# 应用程序打开一个文件(假设该文件是 .txt 并在记事本中打开)。
一旦 C# 应用程序收到命令,它就会打开文件,但记事本没有显示在前台,这是不可接受的,我必须在前台打开记事本。
我修改了 C# 应用程序,以便它调用该SetForegroundWindow
函数。这次记事本没有在前台打开,而是任务栏闪烁。
在阅读了SetForegroundWindow
许多文章的文档后,我认为现在我明白了问题所在:C# 应用程序无法将记事本带到前台,因为它不是前台进程,浏览器是(?)。
读完后:
“一个可以设置前台窗口的进程可以通过调用AllowSetForegroundWindow函数让另一个进程设置前台窗口。”
我决定修改插件。
这次插件调用作为参数AllowSetForegroundWindow
传递的函数(我知道,可能有风险,但我想确保这样做)。ASFW_ANY
ASFW_ANY
AllowSetForegroundWindow
在我对插件进行修改后,我对其进行了测试,它确实有效!(歌剧 12.02)。然后我在 Internet Explorer 上对其进行了测试,它也可以正常工作。但是当我在 Firefox 和 Chrome 中测试它时,问题就来了。C# 应用程序无法将记事本置于前台。我注意到对于那些浏览器,该AllowSetForegroundWindow
函数返回 false。
所以我开始调查,我得出的结论可能是因为 Firefox 使用的插件容器。我想到了一个想法:它在 Opera 12.02 中工作,但他们没有插件容器,虽然他们在 Opera 12.00 中有。所以我下载了 Opera 12.00,我做了测试,但它失败了,这让我得出结论,插件容器是罪魁祸首。
问题是:如何赋予 C# 应用程序设置前景的能力?
我不知道如何继续,我认为我尝试了所有合法的方式。AllowSetForegroundWindow
&SetForegroundWindow
似乎不适用于这里。