2010-07-13 3 views
38

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

Какие трюки вы используете, чтобы предотвратить кражу фокуса?

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

+0

Это не проблема с Visual Studio. Это особенность операционной системы Windows. – AMissico

ответ

0

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

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

8

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

+1

Это очень полезно - я использую эту технику много (хотя она может действительно замедлить работу приложения) –

+1

Да, это очень полезно! Я тестировал поведение WinForms с участием «Фокус», и VS очень плохо меня задевал. Этот метод решил мою проблему (поскольку исправление/взлома, отмеченное как ответ, не Win 7). –

16

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

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

+0

+1 ничего себе! отличный ответ! –

+7

Значение ForegroundLockTimeout в моем реестре в Windows 7 уже 0x30d40 (200000), и все же я вижу, как VStudio ворует фокус при достижении точки останова. –

+5

Я подтверждаю, что этот ответ затрагивает поведение во время фокуса практически любого приложения, но Visual Studio. –

0

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

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

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

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

Смежные вопросы