首页 文章

Visual Studio:如何阻止窃取焦点的断点?

提问于
浏览
44

breakpoint 在Visual Studio中为 hit 时,它来自程序员正在查看/键入的任何其他应用程序 steals the focus . 这可能非常令人恼火,因为VS抓取程序员当时正在键入其他应用程序的任何键盘输入并将该输入作为自己的输入 .

你们用什么技巧来防止这种焦点偷窃?

(我在Visual C 2008和2010上面对此问题 . 我猜测它对于Visual Studio以及所有最新版本都是一个问题 . )

4 回答

  • 17

    这是一个注册表设置 . 见 ForegroundLockTimeout at http://technet.microsoft.com/en-us/library/cc957208.aspx . 零允许应用程序窃取焦点 . 选中"Prevent applications from stealing focus"时,TweakUI将此值设置为200000 .

    要获得更多控制,请下载Powertoys for Windows XP的Tweak UI实用程序 . 在"General"选项卡中,选择"Focus"并选中"Prevent applications from stealing focus" .

    奇怪的是,操作系统中内置了一些条款来保护我们免受糟糕编写,重点窃取应用程序的影响 . ForegroundLockTimeout注册表设置专门用于防止应用程序窃取用户的焦点 . 操作系统默默地将不适当的焦点窃取行为转换为友好的,侵入性较小的任务栏按钮闪烁,这是ForegroundFlashCount注册表设置的主题 .

  • 9

    右键单击断点并选择When hit ...这将允许您在命中断点时运行函数 . 您可以使用它将状态消息打印到输出窗口 . 您的申请将保持专注 .

  • 2

    我偶然发现了一个解决方法,我已经使用了几年,虽然我没有在2008年和2010年进行测试,但它肯定适用于2013年,'15和'17以及至少Windows 7和10 .

    它依赖的事实是 Visual Studio will not steal focus if another Visual Studio instance is paused in execution. 显然唯一与VS一样特别的是另一个VS. : - /

    用一个简单的项目打开VS的第二个实例 . 无论如何暂停执行项目(例如,在第一行执行和调试时设置断点),然后您可以简单地最小化VS,并且您实际使用的VS实例都不会窃取焦点 .

    这显然是一个重量级的解决方案,但如果你有足够的RAM(空闲VS的CPU使用率甚至没有为我注册),它运行良好 . 我没有尝试使用版本间实例(例如在'13暂停使'17表现),但是如果这样可行,你可能会选择使用旧版本实例作为你的“虚拟”VS来减少关于资源使用 .

  • 0

    一种解决方法是使用OutputDebugString()函数将当前状态输出到调试器输出窗口 . 您只需将Visual Studio放在后台,定位调试的程序窗口,以便"Output"窗口可见 - 并且不会发生焦点转换 .

    您可能希望使用宏进行条件编译,以便跟踪代码不包含在发布版本中 .

相关问题