当在Visual Studio中触发断点时,它会从程序员此刻正在查看/输入的其他应用程序中抢占焦点。这可能非常令人恼火,因为VS会获取程序员此刻在其他应用程序中所输入的任何键盘输入,并将其作为自己的输入。
你们有什么诀窍可以防止这种焦点失窃吗?
(我在Visual C++ 2008和2010上遇到了这个问题。我猜这是Visual Studio的普遍问题,适用于所有最近的版本。)
当在Visual Studio中触发断点时,它会从程序员此刻正在查看/输入的其他应用程序中抢占焦点。这可能非常令人恼火,因为VS会获取程序员此刻在其他应用程序中所输入的任何键盘输入,并将其作为自己的输入。
你们有什么诀窍可以防止这种焦点失窃吗?
(我在Visual C++ 2008和2010上遇到了这个问题。我猜这是Visual Studio的普遍问题,适用于所有最近的版本。)
这是一个注册表设置。请参阅ForegroundLockTimeout
。零值允许应用程序窃取焦点。当选中“防止应用程序窃取焦点”时,TweakUI会将该值设为200000。
如果需要更多控制,请下载PowerToys for Windows XP的Tweak UI工具。在“常规”标签中,选择“焦点”并选中“防止应用程序窃取焦点”。
在http://www.google.com/search?q=ForegroundLockTimeout上搜索ForegroundLockTimeout
在http://www.bing.com/search?q=Prevent+applications+from+stealing+focus上搜索Prevent applications from stealing focus
Windows XP上应用程序窃取焦点,提供了TweakUI的屏幕截图。
请不要窃取我的焦点,Coding Horror, Jeff Atwood,网址:http://www.codinghorror.com/blog/2007/12/please-dont-steal-my-focus.html
奇怪的是,操作系统中有内置的保护机制,可以防止糟糕的、窃取焦点的应用程序。
ForegroundLockTimeout 注册表设置是专门设计用来防止应用程序从用户那里窃取焦点。操作系统会将此不当的焦点窃取行为悄无声息地转换为更友好、更少侵入性的任务栏按钮闪烁,这是ForegroundFlashCount注册表设置的主题。如何在Windows XP中防止程序窃取焦点,请参见http://www.howtodothings.com/computers-internet/how-to-prevent-programs-from-stealing-focus-in-windows-xp
右键单击断点,选择“命中时执行...”,这将允许您在断点被命中时运行一个函数。您可以使用此功能将状态消息打印到输出窗口。您的应用程序将保持焦点。
OutputDebugString()
函数将当前状态输出到调试器输出窗口。您只需将Visual Studio置于后台,将被调试的程序窗口定位到“输出”窗口可见 - 并且不会发生焦点转移。