Om du ser ett shell_notifyicon-fel kan den här artikeln vara till hjälp.
Godkänd: Fortect
g.Som folk nämnde tidigare, uppstår dessa vanliga fel för Shell_NotifyIcon när huvudkommunikationen med Explorer går ut eller inträffar innan Explorer lyssnar. Som sagt i kommentarerna på Shell_NotifyIcon ger GetLastError vanligtvis ERROR_TIMEOUT (äldre felkod som ärvts från internt SendMessageTimeout-anrop) vid timeout.
g.
Godkänd: Fortect
Fortect är världens mest populära och effektiva PC-reparationsverktyg. Det litar på miljontals människor för att hålla sina system igång snabbt, smidigt och felfritt. Med sitt enkla användargränssnitt och kraftfulla skanningsmotor hittar och fixar Fortect snabbt ett brett utbud av Windows-problem – från systeminstabilitet och säkerhetsproblem till minneshantering och prestandaflaskhalsar.
Jag skriver att ett program körs i bakgrunden och jag vill – placera en ikon i meddelandefältet av den anledningen så att användaren kan interagera med saken då och då. Appen fungerar för närvarande bra på min utvecklingsdator, men jag arbetar också på en annan bärbar dator. Maskin identisk, och jag märkte att jag anropade Shell_NotifyIcon med NIM_ADDmisslyckas alltid och GetLastError returnerar ERROR_NO_TOKEN 1008:. Windows 7th SP1 fungerar på båda datorerna
Det här specifika problemet verkar dock vara relaterat till en pålitlig nedladdningstidsgräns. Min applikation kraschar verkligen när du felsöker, annars kommer datorn att misslyckas Helt inaktiv.
Vad är den troliga orsaken? I sig själv kommer inte att kunna hitta någon information om vårt eget felsystem, åtminstone inget relaterat till Shell_NotifyIcon. jag en . m . att följa de bästa metoderna för varje målsystem när det gäller parametern lpdata, en hel del av dessa värden initieras så här:
// MEDDELANDEZeroMemory (& m_nid, sizeof (NOTIFYICONDATA));// Skaffa Shell32-versionsnumret och ställ in storleken på denna specifika struktur.// http://msdn.microsoft.com/en-us/library/bb773352%28v=vs.85%29.aspxULONGLONG version matchar GetDllVersion (_T ("Shell32.dll"));if (version> är lika med MAKEDLLVERULL (6,0,6,0))m_nid.cbSize = storlek på (NOTIFYICONDATA);m_nid.uVersion = NOTIFYICON_VERSION_4;annars, om (version> = MAKEDLLVERULL (6,0,0,0))m_nid.cbSize = NOTIFYICONDATA_V3_SIZE;m_nid.uVersion betyder NOTIFYICON_VERSION_4;annars, om (MAKEDLLVERULL version (5,0,0,0))M_nid> = .CbSize är lika med NOTIFYICONDATA_V2_SIZE;m_nid.uVersion = NOTIFYICON_VERSION;annanm_nid.cbSize = NOTIFYICONDATA_V1_SIZE;m_nid.uVersion = 0;m_nid.uFlags är lika med NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP;// Endast Windows 7 eller senare system kan använda generellt GUID för att identifiera meddelandeikonen.if (IsWin7OrLater ())= NIF_GUID;m_nid.guidItem = NOTIFICATION_ICON_GUID;annanm_nid.uID = NOTIFICATION_ICON_ID;// Fönster för varning om en uppsättning brickor:m_nid.hWnd = m_hWnd;m_nid.uCallbackMessage motsvarar UM_TRAYNOTIFY;// Definiera ikonfältet och verktygstipset:m_nid.hIcon matchar app.Tooltip-laddningsikonen (idr_mainframe);// visas så länge som musen alltid var över symbolen. NIF_TIP-flaggan måste ställas in, men i panoramaformat.CString = strToolTip _T ("Scheduler");_tcsncpy_s (m_nid.szTip, strToolTip, strToolTip.GetLength ());// Om applikationen inte stängdes ordentligt kan ikonen fortfarande finnas kvar,// men inte desto mindre, tillagd nu ogiltig hWnd. Ta bort den innan du lägger till den igen.Shell_NotifyIcon (NIM_DELETE, & m_nid);// Lägg till en symbol.bResult är lika med Shell_NotifyIcon (NIM_ADD, & m_nid);DWORD = dw GetLastError ();// Ange symbolens åtgärder.bResult = Shell_NotifyIcon (NIM_SETVERSION, & m_nid);
- Redigerad av Andrew Polden 27 mars nästa år, tisdag, 12:14. Ta bort oönskad kod
- Rör sig Mike Dos Zhang Onsdagen den 28 mars, 15:21 Shell API-fråga (från: Vanliga Windows Desktop Development Issues)