Заголовок окна для консольного приложения - PullRequest
2 голосов
/ 24 апреля 2010

В диалоговом окне «Присоединение к процессу» в Visual Studio одним из столбцов в списке «Доступные процессы» является «Заголовок», в котором перечислены заголовки самого верхнего окна, принадлежащего каждому процессу.

Мы порождаем несколько экземпляров нескольких серверных процессов, чтобы разделить работу. Для этих консольных процессов поле «Заголовок» является пустым, поэтому в настоящее время нам необходимо найти идентификатор процесса в нашем инструменте управления, чтобы найти правильный процесс.

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

SetConsoleTitle не работает, как и SetWindowText с нулевым значением hWnd. Насколько мне известно, консольное приложение не обладает собственными дескрипторами окна, которые мы могли бы передать SetWindowText. Мы не хотим создавать видимые окна для этих серверных процессов.

Есть ли какие-нибудь предложения относительно разумного способа заставить Visual Studio отображать здесь некоторую полезную информацию?

1 Ответ

1 голос
/ 24 апреля 2010

Я думаю, тебе не повезло. Окно консоли не принадлежит процессу консоли, а принадлежит системному процессу (conhost.exe на win7 и, возможно, vista, csrss.exe до этого), поэтому, если Visual Studio просто ищет окна верхнего уровня процессов, которые она выиграла, ' найти окно консоли. Насколько мне известно, тестирование консолей вне proc не поддерживается, поэтому для Visual Studio, вероятно, нет разумного способа увидеть название окон консоли, которые у вас есть.

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

Это, вероятно, не очень полезно, но стоит отметить, что в Windows предпочтительным способом распределения работы будет использование потоков, а не нескольких процессов. Процесс является дорогостоящим объектом, а потоки намного дешевле с точки зрения системных ресурсов, а также более просты в отладке.

...