Подтвердить что ты не робот

Visual Studio: как остановить точку останова от кражи фокуса?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

enter image description here