Visual Studio: как остановить попадание точки останова от кражи фокуса? - PullRequest
45 голосов
/ 13 июля 2010

Когда точка останова равна попаданию в Visual Studio, она захватывает фокус из любого другого приложения, которое программист просматривает / печатает в тот момент. Это может быть очень раздражающим, так как VS захватывает любой ввод с клавиатуры, который программист в тот момент печатал в другом приложении, и воспринимает этот ввод как свой собственный.

Какие уловки вы используете для предотвращения кражи фокуса?

(Я сталкиваюсь с этим на Visual C ++ 2008 и 2010. Я предполагаю, что это проблема для Visual Studio в целом и для всех последних версий.)

Ответы [ 5 ]

16 голосов
/ 13 июля 2010

Это параметр реестра.См. ForegroundLockTimeout в http://technet.microsoft.com/en-us/library/cc957208.aspx. Ноль позволяет приложениям украсть фокус. TweakUI устанавливает это значение на 200000, когда установлен флажок «Предотвратить кражу приложений».

Для большего контроля загрузите утилиту Tweak UI с Powertoys дляWindows XP .На вкладке «Общие» выберите «Фокус» и установите флажок «Запретить приложениям от кражи фокуса».

9 голосов
/ 13 июля 2010

Щелкните правой кнопкой мыши точку останова и выберите При нажатии ... это позволит вам запустить функцию при достижении точки останова.Вы можете использовать это для печати сообщений о состоянии в окне вывода.Ваше приложение будет держать фокус.

3 голосов
/ 23 мая 2019

Это окончательно исправлено в VS2019. Перейдите в Инструменты-> Параметры-> Отладка-> Общие, внизу внизу находится «Вывести Visual Studio на передний план при взломе отладчика». Просто отмените выбор, и вы больше не будете прерываться во время многозадачности.

enter image description here

2 голосов
/ 17 октября 2017

Случайно я обнаружил обходной путь, которым я пользуюсь уже несколько лет, и хотя я не тестировал его в 2008 и 2010 годах, он, безусловно, работает в 2013, 15 и 17 годах и, по крайней мере, в Windows 7.& 10.

Он основан на том факте, что Visual Studio не будет красть фокус, если другой экземпляр Visual Studio будет приостановлен во время выполнения. Очевидно, что единственной вещью, особенной, как VS, является другой VS.: - /

Откройте второй экземпляр VS с простым проектом.Приостановите выполнение проекта так, как вам нравится (например, поставьте точку останова на первой строке выполнения и отладьте), затем вы можете просто свести к минимуму тот VS, и ни один из экземпляров VS, которые вы на самом деле используете, не будет красть фокус.

Это, очевидно, решение с большим весом, но если у вас достаточно ОЗУ (использование процессора в режиме простоя VS даже не регистрируется для меня), оно работает хорошо.Я не пробовал делать это с экземплярами между версиями (например, сделать паузу в '13, чтобы заставить '17 вести себя), но если это сработает, вы, вероятно, захотите использовать экземпляр более старой версии в качестве вашей "фиктивной" VS для сокращенияна использование ресурса.

0 голосов
/ 13 июля 2010

Один из способов - использовать функцию OutputDebugString() для вывода текущего состояния в окно вывода отладчика. Вы просто помещаете Visual Studio в фоновом режиме, располагаете окно отлаженной программы так, чтобы окно «Вывод» было видно - и никакого изменения фокуса не происходит.

Возможно, вы захотите использовать макросы для условной компиляции, чтобы код трассировки не был включен в сборки выпуска.

...