32位程式在64位系統下隱藏托盤圖示
阿新 • • 發佈:2019-01-26
網上有很多程式碼,多是在32位系統下正常,64位系統則無法隱藏系統圖標,分析發現原因如下。
原因:64位系統下Explorer.exe是64位的,訪問其程序時結構體資料與32位系統有所差異,導致讀取資料錯誤。
解決:按64位系統內結構讀取資料賦值,結構如下:
#define SYSTEM64 #ifdef SYSTEM64 #define TBBUTTONEX _TBBUTTON64 #else #define TBBUTTONEX _TBBUTTON #endif #ifdef SYSTEM64 #define TRAYDATAEX _TRAYDATA64 #else #define TRAYDATAEX _TRAYDATA32 #endif typedef struct _TBBUTTON64 { int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; BYTE bReserved[6]; // padding for alignment PVOID64 dwData; PVOID64 iString; } TBBUTTON64; struct _TRAYDATA32 { HWND hWnd; UINT uID; UINT uCallbackMessage; DWORD Reserved1[2]; HICON hIcon; DWORD Reserved2[3]; TCHAR szExePath[MAX_PATH]; TCHAR szTip[128]; } TRAYDATA32; struct _TRAYDATA64 { PVOID64 hWnd; //HWND 64位 8位元組 UINT uID; UINT uCallbackMessage; DWORD Reserved1[2]; PVOID64 hIcon; //HICON 64位 8位元組 DWORD Reserved2[4]; TCHAR szExePath[MAX_PATH]; TCHAR szTip[128]; } TRAYDATA64;