Изменение процедуры окна для окна консоли - PullRequest
0 голосов
/ 16 января 2011

Хочу сделать консольное окно с иконкой в ​​трее.Я понял, что, скорее всего, необходимо заменить начальную оконную процедуру консоли, чтобы иметь возможность контролировать все сообщения, включая события области уведомлений.Но функция SetWindowLong() возвращает 0, а GetLastError() сообщает, что доступ запрещен.

hwndFound = GetConsoleWindow();
SetWindowLong(hwndFound, GWL_WNDPROC, (long)WndProc);

Что это может быть, или, возможно, есть какой-то другой способ управления манипуляциями с иконками в трее?

Ответы [ 3 ]

3 голосов
/ 16 января 2011

Если все, что вы хотите сделать, это создать значок уведомления для консольного приложения, то нет ничего, что говорило бы, что ваш вызов Shell_NotifyIcon должен указывать на окно консоли. Вместо этого создайте невидимое фиктивное окно с вашим собственным классом окна и процедурой. Обратите внимание, что вам, вероятно, придется сделать это из вторичного потока, чтобы запустить цикл обработки сообщений. (Окно консоли является особенным, поскольку оно размещено вне вашего процесса с помощью conhost.exe / csrss.exe.)

1 голос
/ 16 января 2011

Нет, вам просто нужно окно.Лучше всего запустить поток, чтобы вы могли прокачать цикл сообщений и получать уведомления о значках.Создайте небольшое скрытое окно, которое вы можете использовать для вызова Shell_NotifyIcon ().

0 голосов
/ 16 января 2011

Какую версию Windows вы используете?Я знаю, что до Vista консольные окна обрабатывались особым образом и не могут управляться многими стандартными способами. Эта статья Раймонда Чена может пролить дополнительный свет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...