Als je een shell_notifyicon-fout ziet, kan dit waardevolle artikel helpen.
Goedgekeurd: Fortect
g.Zoals je al eerder wist, treden deze veelvoorkomende fouten voor Shell_NotifyIcon op gedurende de tijd dat de hoofdcommunicatie met Explorer een time-out heeft, voordat Explorer luistert. Zoals vermeld in sommige opmerkingen over Shell_NotifyIcon, retourneert GetLastError gewoonlijk ERROR_TIMEOUT (verouderde foutcode overgenomen van interne SendMessageTimeout-aanroep) tijdens de time-out.
G.
Goedgekeurd: Fortect
Fortect is 's werelds meest populaire en effectieve pc-reparatietool. Miljoenen mensen vertrouwen erop dat hun systemen snel, soepel en foutloos blijven werken. Met zijn eenvoudige gebruikersinterface en krachtige scanengine kan Fortect snel een breed scala aan Windows-problemen vinden en oplossen - van systeeminstabiliteit en beveiligingsproblemen tot geheugenbeheer en prestatieproblemen.
Ik ben een applicatie aan het schrijven die op de achtergrond draait en ik wil elk pictogram in het systeemvak plaatsen, zodat de meeste gebruikers van seconde tot tijd met het element kunnen communiceren. De app werkt momenteel erg goed op mijn ontwikkeldesktop, maar ik werk ook op een andere laptop. Machine ook, en ik merkte dat het aanroepen van Shell_NotifyIcon met NIM_ADDmislukt altijd naast GetLastError retourneert ERROR_NO_TOKEN 1008:. Windows 7 SP1 werkt op beide machines
Het probleem lijkt echter te maken te hebben met een goede time-out voor beoordelingen. Mijn applicatie crasht echt tijdens het debuggen, anders zal de computer falen. Volledig inactief.
Wat is echt de waarschijnlijke oorzaak? Kan op zichzelf geen virtuele informatie vinden over onze eigen foutcode, in ieder geval niets met betrekking tot Shell_NotifyIcon. Ik volg de belangrijkste best practices voor elk doelbesturingssysteem in termen van de lpdata-parameter, de meeste soorten waarden als volgt geïnitialiseerd:
// KENNISGEVINGZeroMemory (& m_nid, sizeof (NOTIFYICONDATA));// Haal de Shell32-versiesom op en stel de grootte van deze structuur in.// http://msdn.microsoft.com/en-us/library/bb773352%28v=vs.85%29.aspxULONGLONG-optie komt overeen met GetDllVersion (_T ("Shell32.dll"));if (versie> = MAKEDLLVERULL (6,0,6,0))m_nid.cbSize = sizeof (NOTIFYICONDATA);m_nid.uVersion = NOTIFYICON_VERSION_4;anders echter als (versie> = MAKEDLLVERULL (6,0,0,0))m_nid.cbSize = NOTIFYICONDATA_V3_SIZE;m_nid.uVersion = NOTIFYICON_VERSION_4;anders, zolang (MAKEDLLVERULL-versie (5,0,0,0))M_nid> = .CbSize = NOTIFYICONDATA_V2_SIZE;m_nid.uVersion is gelijk aan NOTIFYICON_VERSION;een anderm_nid.cbSize = NOTIFYICONDATA_V1_SIZE;m_nid.uVersie = 0;m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP;// Alleen Windows veel meer of latere systemen kunnen de GUID gebruiken om u te helpen het meldingspictogram te identificeren.als (IsWin7OrLater ())= NIF_GUID;m_nid.guidItem is gelijk aan NOTIFICATION_ICON_GUID;een anderm_nid.uID = NOTIFICATION_ICON_ID;// Venster voor melding over een absolute set trays:m_nid.hWnd = m_hWnd;m_nid.uCallbackMessage = UM_TRAYNOTIFY;// Definieer de pictogrambalk en tooltip:m_nid.hIcon komt overeen met het hoofdpictogram voor het laden van de App.Tooltip (idr_mainframe);// weergegeven als de eend altijd boven het symbool was. De NIF_TIP-code moet worden ingesteld, maar in liggend formaat.CString impliceert strToolTip _T ("Scheduler");_tcsncpy_s (m_nid.szTip, strToolTip, strToolTip.GetLength ());// Als de applicatie niet goed is afgesloten, kan een pictogram nog steeds aanwezig zijn,// maar momenteel toegevoegd ongeldig hWnd. Verwijder het voordat u het opnieuw toevoegt.Shell_NotifyIcon (NIM_DELETE, & m_nid);// Voeg een symbool toe.bResult = Shell_NotifyIcon (NIM_ADD, & m_nid);DWORD = dw GetLastError ();// Specificeer welke de acties van het symbool.bResult = Shell_NotifyIcon (NIM_SETVERSION, & m_nid);
- Bewerkt door Andrew Polden 27 maart volgend jaar, dinsdag, 12:14 uur. Verwijder onnodige code
- beweegt Mike Dos Zhang woensdag 39 maart, 15:21 Shell API speculeren (uit: Common Windows Desktop Development Issues)