2009-07-27 4 views
3

백그라운드에서 몇 가지 사항을 확인하는 Windows 응용 프로그램을 만들고 시스템 트레이 아이콘을 통해 사용자에게 알리려고합니다.시스템 트레이 아이콘으로 백그라운드 프로세스 만들기

응용 프로그램이 관리되지 않는 C++로 만들어졌으며 .net 또는 Java로 전환 할 수있는 옵션이 없습니다.

사용자가 앱을 중지하려면 트레이 아이콘을 사용합니다.

응용 프로그램은 때문에 시스템 트레이 측면의 서비스가 될 수 없으며 사용자 컴퓨터에 아무것도 설치하지 않고 실행해야하기 때문에 일반적으로는 Win32 프로그램 구조 (있는 registerClass, WndProc을 사용

(이것은 단일 .EXE입니다) 등등) 내가 어떻게 윈도우 메시지 루프를 실행하려면 몇 가지 코드를 배치 할 수 있습니다 모르겠다. 아마도 CreateProcess() 또는 CreateThread()를 사용해야합니까? 멀티 스레딩 환경을 올바르게 처리 할 수 ​​있습니까?

CreateProcess()/CreateThread()를 사용해야하는 경우 어떻게 두 스레드간에 comunicate 할 수 있습니까?

감사합니다, 나는 당신이 할 수있는 새로운 프로세스를 만들 의심)

+0

귀하의 질문은 실제로 많은 질문입니다. 1. 백그라운드 프로세스는 어떻게 만듭니 까? 2. 두 스레드/프로세스가 통신하도록하려면 어떻게합니까? 3. 시스템 트레이 아이콘을 만들고 사용하려면 어떻게합니까? –

+0

네 말이 맞아. 나는 숫자 2가 더 복잡하다고 생각한다. :) – HyLian

+0

참으로. 그리고 나는 당신이 그 이슈들을 개별적으로 다룰 때 유용한 답을 얻는데 더 성공적 일 것이라고 생각한다 :-) –

답변

2

시스템 트레이 아이콘은 Shell_NotifyIcon이 필요합니다.

먼저 당신이 정말로 별도의 스레드에서 모니터링 코드를 실행할 필요가 있는지 생각 하는데요, http://msdn.microsoft.com/en-us/library/bb762159.aspx

+0

감사합니다, systray 아이콘 쪽이 스레딩 문제보다 더 분명했습니다 :) – HyLian

0

, 당신은 응용 프로그램에서 스레드를 만들려고합니다. 이를 수행하는 API는 CreateThread입니다. 그러나 C++을 사용하는 경우 실제로는 C 코드를 처음부터 작성하지 않고 프레임 워크와 클래스 라이브러리를 사용하여이를 조사해야합니다.

응용 프로그램에 속한 모든 스레드는 응용 프로그램의 전역 변수를 공유하므로 통신에 사용할 수 있습니다. 중요한 섹션과 같은 것으로 멀티 스레드 액세스를 보호해야합니다.

+0

실제로 하나의 스레드를 생성해야하고, Win32 API에 매우 밀접하게 연결되어 있습니다. 나는 CreateThread()가 그 일을 할 수 있다고 생각한다. 하지만 두 스레드간에 어떻게 comunicate 할 수 있습니까? – HyLian

0

음을 참조하십시오. 주기적으로 일부 값이나 시스템 상태를 폴링하는 경우 타이머를 사용하여 메인 스레드에서 모든 것을 실행할 수 있습니다. 그 옵션이 없다고 가정하면 이미 제안 된 CreateThread를 사용하여 별도의 작업자 스레드를 생성하십시오. 주 스레드에서 보이지 않는 메시지 창을 만듭니다. 작업자가 주 스레드를 업데이트해야 할 경우 창에 메시지를 게시해야합니다. 주 스레드는 필요에 따라 시스템 트레이 아이콘을 업데이트하여 응답합니다.