2009-12-07 1 views
4

FormCreate 이벤트 처리기에서 다음 코드를 사용하여 시스템 트레이 아이콘을 만듭니다. 프로그램을 실행하면 시스템 트레이 아이콘이 정상적으로 나타납니다.시작시 시스템 트레이 아이콘이 나타나지 않음

Windows를 시작할 때 내 애플리케이션이 자동으로 시작되도록 설정했습니다. 컴퓨터를 다시 시작하면 응용 프로그램의 프로세스가 시작되지만 시스템 트레이 아이콘이 나타나지 않습니다.

코드가 실행될 때 시스템 트레이가 채워질 준비가되지 않았을 때와 관련이 있다고 생각합니다. 만들

코드 "$ INSTDIR \ MyApp.exe의" "MyApp를" WriteRegStr HKLM "마이크로 소프트 \ 윈도우 \ CurrentVersion을 \ 실행 \ 소프트웨어"

가 나는 NSIS 설치의를 통해 실행 시작하는 내 응용 프로그램을 얻을 시스템 트레이 아이콘 :

with TrayIconData do 
    begin 
    cbSize := SizeOf(TrayIconData); 
    Wnd := Handle; 
    uID := 0; 
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP; 
    uCallbackMessage := WM_ICONTRAY; 
    hIcon := Application.Icon.Handle; 
    StrPCopy(szTip, Application.Title); 
    end; 

    Shell_NotifyIcon(NIM_ADD, @TrayIconData); 

답변

1

Explorer를 완전히 시작하기 전에 아이콘을 만들려고합니다. handle errors gracefully ("Shell_NotifyIcon 오류 처리"로 스크롤)해야합니다.

TaskbarCreated notification도 처리해야합니다. Explorer가 충돌하여 다시 시작한 후 아이콘을 다시 만들 수 있습니다.

+0

유용한 정보 주셔서 감사합니다. 잠을 사용하여 shell_NotifyIcon을 처리하고 제안 된대로 재 시도하십시오. 나는 정보 검색을 계속하고 문제가 내 구체적인 경우에 해결되면 대답을 수락합니다. – SamH

+0

'Handling Shell_NotifyIcon failure' [here] (http://msdn.microsoft.com/en-us/library/bb762159.aspx)에 대한 절은 없습니다. @RogerLipscombe, 실패에 대한 자세한 내용이있는 다른 링크가 있습니까? OP와 같은 문제가 있습니다 : https://stackoverflow.com/questions/45255294/rare-error-on-tray-icon-creation-after-a-user-log-out-log-in 그리고 아무런 성공도 없습니다. 나는'TaskbarCreated' 등을 시도했지만 아무 것도 바뀌지 않았습니다 : 3, 4 또는 5가 한번 실행될 때마다, 시스템 트레이 아이콘이 나타나지 않습니다. – Basj

0

시작시 현재 디렉토리가 실행 파일이있는 디렉토리가 아니기 때문에 문제가 발생했습니다.

그래서 getCurrentDir은 실제로 시작할 때와 다른 시간에 앱이 실행될 때 다른 디렉토리를 반환했습니다.

내 응용 프로그램은 현재 디렉토리가 실행 파일이 상주한다는 가난한 가정을하고있었습니다.

이 가정은 앱에 코드를 추가하는 트레이 아이콘에 도달하지 못하게 만들었습니다. 일단 디렉토리 문제를 해결하자마자 코드가 실행되었고 아이콘이 올바르게 생성되었습니다.

+0

오늘 같은 문제가 있습니다. 왜 현재 디렉터리가 systrayicon에 대해 아무 것도 변경하지 않습니까? 더 설명해 주시겠습니까? 실행 파일 내부에서 아이콘을로드하고 있습니다. 그래서, 왜 현재 디렉토리가 importan입니까? – Basj