我正在使用PInvoke在.NET中使用SetForegroundWindow API。

当我在Visual Studio中调试时使用API​​时,它可以完美工作。但是,当应用程序正常运行时,它并不总是能正常工作。

我在调用SetForegroundWindow之前放了一些日志,并确认该API正在被调用,但有时不起作用。我也看过几篇有关此问题的文章,但我想知道为什么它失败了。

该帖子的链接如下:

  • Win32 SetForegroundWindow unreliable
  • SetForegroundWindow only working while visual studio is open
  • 最佳答案

    实际上,这是纯Win32问题,而不是.net特定问题。 .net框架位于Win32之上,此处Win32的规则正在向您反射(reflect)。

    SetForegroundWindow 的文档对您遇到的问题进行了全面的说明。从本质上来说,SetForegroundWindow设计面临的问题是它可用于窃取焦点。焦点是用户应控制的事情。更改焦点的应用程序可能会很麻烦。因此,SetForegroundWindow尝试防御焦点窃取者。

    该文档说:



    您几乎肯定会违反这些标准。请注意,始终对被调试的进程授予设置前景窗口的权限。这就解释了为什么在调试时看不到任何问题。但是在调试器之外,如果您的进程不是前台进程,则对SetForegroundWindow的调用将失败。

    这都是设计使然。您对此的 react 应该是尝试提出一种设计,该设计不需要您的进程不是前台进程就可以尝试调用SetForegroundWindow

    关于c# - NET中的SetForegroundWindow问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20444735/

    10-13 07:24