트 레이 아이콘 이상 사라 짐 문제 분석 및 해결

1348 단어 shell테스트과업
        테스트 를 통 해 트 레이 아이콘 을 사용 하 는 프로그램 에 대해 트 레이 아이콘 은 다음 과 같은 이상 이 발생 할 수 있 습 니 다.
        (1) 자원 관리자 explorer. exe 가 비정상적 으로 재 부팅 되면 작업 표시 줄 에 있 는 트 레이 아이콘 이 사라 집 니 다.
        (2) 개별 기기 에 트 레이 아이콘 이 알 수 없 는 이유 로 사 라 졌 고 이 때 도 프로그램 이 실행 되 고 있 습 니 다 (작업 관리자 에서 해당 하 는 프로 세 스 를 찾 을 수 있 습 니 다).
        첫 번 째 상황 에 대해 explorer. exe 가 비정상적 으로 재 부팅 될 때 Taskbar Created 라 는 메시지 가 발생 합 니 다. 이 메시지 가 울 릴 때 트 레이 아이콘 을 트 레이 아이콘 영역 에 추가 하여 이러한 상황 에서 발생 하 는 문 제 를 피 할 수 있 습 니 다.관련 코드 는 다음 과 같다.
	UINT m_uMsgTaskbarRestart;
        ......
	m_uMsgTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated")); \\ 注册这个消息,记录消息ID
        ......
LRESULT CXXDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	if ( message == m_uMsgTaskbarRestart )
	{
		Shell_NotifyIcon( NIM_ADD, &m_nid);
	}

	return CDialog::DefWindowProc( message, wParam, lParam );
}
        두 번 째 상황 에 대해 구체 적 인 원인 이 불분명 하면 피 할 수 있 는 방법 을 찾 을 수 있 습 니 다. 트 레이 아이콘 을 지 키 는 타 이 머 를 켜 고 트 레이 아이콘 이 존재 하 는 지 확인 하 며 존재 하지 않 으 면 추가 합 니 다. 관련 코드 는 다음 과 같 습 니 다. (타이머 메시지 응답 함수 만 제공 하 는 코드 세그먼트)
void CXXDlg::OnTimer( UINT_PTR nIDEvent )
{
	if ( nIDEvent == 100 )
	{
		if ( !Shell_NotifyIcon( NIM_MODIFY, &m_nid ) )
			Shell_NotifyIcon( NIM_ADD, &m_nid );
	}

	CDialog::OnTimer(nIDEvent);
}

좋은 웹페이지 즐겨찾기