我正在使用PInvoke在.NET中使用SetForegroundWindow API。
当我在Visual Studio中调试时使用API时,它可以完美工作。但是,当应用程序正常运行时,它并不总是能正常工作。
我在调用SetForegroundWindow之前放了一些日志,并确认该API正在被调用,但有时不起作用。我也看过几篇有关此问题的文章,但我想知道为什么它失败了。
该帖子的链接如下:
最佳答案
实际上,这是纯Win32问题,而不是.net特定问题。 .net框架位于Win32之上,此处Win32的规则正在向您反射(reflect)。
SetForegroundWindow
的文档对您遇到的问题进行了全面的说明。从本质上来说,SetForegroundWindow
设计面临的问题是它可用于窃取焦点。焦点是用户应控制的事情。更改焦点的应用程序可能会很麻烦。因此,SetForegroundWindow
尝试防御焦点窃取者。
该文档说:
您几乎肯定会违反这些标准。请注意,始终对被调试的进程授予设置前景窗口的权限。这就解释了为什么在调试时看不到任何问题。但是在调试器之外,如果您的进程不是前台进程,则对SetForegroundWindow
的调用将失败。
这都是设计使然。您对此的 react 应该是尝试提出一种设计,该设计不需要您的进程不是前台进程就可以尝试调用SetForegroundWindow
。
关于c# - NET中的SetForegroundWindow问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20444735/