Jeśli zobaczysz każdy błąd shell_notifyicon, ten artykuł może pomóc.
Zatwierdzono: Fortect
g.Jak wspomniałeś wcześniej, te typowe błędy, gdy Shell_NotifyIcon występują, gdy główna komunikacja z Eksploratorem przekracza limit czasu lub występuje, zanim Eksplorator nasłuchuje. Jak wspomniano w komentarzach do Shell_NotifyIcon, GetLastError niezmiennie zwraca ERROR_TIMEOUT (starszy kod błędu odziedziczony z dostępnego wywołania SendMessageTimeout) po przekroczeniu limitu czasu.
g.
Zatwierdzono: Fortect
Fortect to najpopularniejsze i najskuteczniejsze narzędzie do naprawy komputerów na świecie. Miliony ludzi ufają, że ich systemy działają szybko, płynnie i bez błędów. Dzięki prostemu interfejsowi użytkownika i potężnemu silnikowi skanowania, Fortect szybko znajduje i naprawia szeroki zakres problemów z systemem Windows - od niestabilności systemu i problemów z bezpieczeństwem po zarządzanie pamięcią i wąskie gardła wydajności.
Piszę aplikacje działające w tle i wybieram umieszczenie ikony w mieście powiadomień, aby użytkownik mógł od czasu do czasu wchodzić w interakcję z elementem. Aplikacja zwykle działa dobrze na moim pulpicie programistycznym, ale niestety pracuję również na innym laptopie. Maszyna też i zauważyłem, że wywoływanie Shell_NotifyIcon z NIM_ADDzawsze kończy się niepowodzeniem i GetLastError zwraca ERROR_NO_TOKEN 1008:. Windows o wiele więcej SP1 działa na obu komputerach
Jednak wydaje się, że problem jest związany z pewnym dobrym limitem czasu pobierania. Moja aplikacja naprawdę się zawiesza przy każdym debugowaniu, w przeciwnym razie komputer zawiedzie Całkowicie nic nie robiąc.
Jaka jest prawdopodobna przyczyna? Sam nie może znaleźć żadnych informacji o naszym kodzie błędu uruchamiania, a przynajmniej nic związanego z Shell_NotifyIcon. Postępuję zgodnie z najlepszymi praktykami dla każdego niszowego systemu operacyjnego pod względem parametru lpdata, bardzo z tych wartości zainicjowane w ten sposób:
// UWAGAZeroMemory (& m_nid, sizeof (NOTIFYICONDATA));// Pobierz numer wersji Shell32 i ustaw rozmiar całej tej struktury.// http://msdn.microsoft.com/en-us/library/bb773352%28v=vs.85%29.aspxWersja ULONGLONG odpowiada GetDllVersion (_T ("Shell32.dll"));if (wersja> = MAKEDLLVERULL (6,0,6,0))m_nid.cbSize = rozmiar(NOTIFYICONDATA);m_nid.uVersion jest równa NOTIFYICON_VERSION_4;w przeciwnym razie, jeśli (wersja> = MAKEDLLVERULL (6,0,0,0))m_nid.cbSize = POWIADOMIĆ_ROZMIAR_V3;m_nid.uVersion = NOTIFYICON_VERSION_4;w przeciwnym razie, jeśli (wersja MAKEDLLVERULL (5,0,0,0))M_nid> = .CbSize = NOTIFYICONDATA_V2_SIZE;m_nid.uVersion = NOTIFYICON_VERSION;innem_nid.cbSize = POWIADOMIENIE IKONDATA_V1_ROZMIAR;m_nid.uVersion równa się 0;m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP;// Tylko systemy Windows 7 lub nowsze mogą zaimplementować identyfikator GUID do identyfikacji ikony powiadomienia.jeśli (IsWin7OrLater ())= NIF_GUID;m_nid.guidItem = NOTIFICATION_ICON_GUID;innem_nid.uID = NOTIFICATION_ICON_ID;// Okno jeśli chodzi o powiadomienie o zestawie tac:m_nid.hWnd jest równe m_hWnd;m_nid.uCallbackMessage = UM_TRAYNOTIFY;// Zdefiniuj podpowiedź paska ikon:m_nid.hIcon odpowiada ikonie ładowania App.Tooltip (idr_mainframe);// udostępniane, jeśli mysz była zawsze nad logo. Flaga NIF_TIP musi być ustawiona, ale w formacie poziomym.CString = strToolTip _T ("Harmonogram");_tcsncpy_s (m_nid.szTip, strToolTip, strToolTip.GetLength ());// Jeśli aplikacja nie była poprawnie zapełniona, ikona może nadal być obecna,// ale dodano teraz nieprawidłowy hWnd. Usuń go przed ponownym dodaniem.Shell_NotifyIcon (NIM_DELETE i m_nid);// Dodaj ważny symbol.bResult = Shell_NotifyIcon (NIM_ADD i m_nid);DWORD = dw GetLastError ();// Określ akcje symbolu.bResult równa się Shell_NotifyIcon (NIM_SETVERSION i m_nid);
- Edytowany przez Andrzej Polden 27 marca 2010, wtorek, 12:14. Usuń niechciany kod
- Ruchy Mike Dos Zhang Środa, 28 marca, 15:21 Pytanie Shell API (od: Typowe problemy z programowaniem pulpitu Windows)