2011-01-16 2 views
0

기능 트레이 아이콘이있는 콘솔 창을 만들고 싶습니다. 나는 아마도 초기 콘솔의 윈도우 프로 시저를 대체 할 필요가 있기 때문에 지역 알림 이벤트를 포함한 모든 메시지를 제어 할 수있을 것이라고 생각했다. 그러나 SetWindowLong() 함수는 0을 반환하고 GetLastError()은 액세스가 거부되었음을 알립니다.콘솔 창의 윈도우 프로 시저 변경

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

트레이 아이콘 조작을 제어 할 수있는 방법은 무엇입니까?

답변

3

콘솔 응용 프로그램에 대한 알림 아이콘을 만들려면 Shell_NotifyIcon 호출이 콘솔 창을 가리켜 야한다는 내용이 없습니다. 대신 자신의 창 클래스와 프로 시저로 보이지 않는 더미 창을 만듭니다. 메시지 루프를 실행하려면 보조 스레드에서이 작업을 수행해야합니다. 콘솔 창은 conhost.exe/csrss.exe를 통해 프로세스 외부에서 호스팅되므로 특별합니다.

+0

감사합니다.이 상황에서 가장 좋은 솔루션 인 것처럼 보입니다. – Anonymous

0

사용중인 Windows 버전은 무엇입니까? 비스타 이전에는 콘솔 윈도우가 특별하게 취급되어 많은 표준 방법으로 조작 할 수 없다는 것을 알고 있습니다. This article by Raymond Chen은 더 많은 빛을 발산합니다.

+0

저는 Windows 7입니다. GetMessage()가 콘솔 응용 프로그램에서 아무 것도 반환하지 않는다는 것을 깨달았습니다. 콘솔 창 핸들로 호출 할 때도 : GetMessage (& msg, hwndFound, 0, 0). 이상한. – Anonymous

1

아니요, 그냥 창만 있으면됩니다. 가장 좋은 방법은 메시지 루프를 펌핑하고 아이콘 알림을받을 수 있도록 스레드를 시작하는 것입니다. Shell_NotifyIcon() 호출에 사용할 수있는 숨겨진 작은 창을 만듭니다.