Создайте фоновый процесс со значком на панели задач

Я пытаюсь создать приложение для Windows, которое проверяет некоторые вещи в фоновом режиме и информирует пользователя с помощью значка в системном трее.

Приложение создано на Неуправляемом C ++, и нет возможности переключиться на .net или Java.

Если пользователь хочет остановить приложение, он будет использовать значок в трее.

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

Используя типичную структуру программы Win32 (RegisterClass, WndProc и т. Д.), Я не знаю, как я могу разместить некоторый код для запуска цикла оконных сообщений. Может быть, мне нужно использовать CreateProcess () или CreateThread ()? Это правильный способ работать в многопоточном окружении?

Если мне нужно использовать CreateProcess () / CreateThread (), как я могу общаться между двумя потоками?

Спасибо ;)


person HyLian    schedule 27.07.2009    source источник
comment
На ваш вопрос на самом деле много вопросов. 1. Как создать фоновый процесс? 2. Как заставить взаимодействовать два потока / процесса? 3. Как создать и использовать значок на панели задач?   -  person Raphaël Saint-Pierre    schedule 27.07.2009
comment
Ты прав. Думаю, число 2 сложнее :)   -  person HyLian    schedule 27.07.2009
comment
В самом деле ... И я думаю, что вам удастся получить полезные ответы, если вы рассмотрите эти вопросы отдельно :-)   -  person Raphaël Saint-Pierre    schedule 27.07.2009


Ответы (2)


Что касается значка на панели задач, вам понадобится Shell_NotifyIcon.

См. http://msdn.microsoft.com/en-us/library/bb762159.aspx

person Raphaël Saint-Pierre    schedule 27.07.2009
comment
Спасибо, сторона значка на панели задач была более понятной, чем проблема с потоками :) - person HyLian; 27.07.2009

Я сомневаюсь, что вы хотите создавать для этого новые процессы, вы хотите создать поток в своем приложении. Для этого используется API CreateThread. Но если вы используете C ++, вам действительно следует изучить возможность использования фреймворков и библиотек классов для этого, а не писать то, что фактически будет кодом C с нуля.

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

person Community    schedule 27.07.2009
comment
На самом деле мне нужно создать один поток, и я очень тесно связан с win32 api. Я думаю, что CreateThread () справится с этой задачей. Но как я могу общаться между двумя потоками? - person HyLian; 27.07.2009