2016-03-03 35 views
0

我們在我們的應用程序中使用SWT(基於Java)來貢獻Windows通知區域。Shell_NotifyIcon產生多個圖標

通過移動到Windows 10,我們看到圖標的顯示隨着時間的推移而增加,最終填滿整個通知區域。

我檢查了內部SWT代碼,下面是SWT調用Shell_NotifyIconW貢獻圖標的代碼。

NOTIFYICONDATA iconData = OS.IsUnicode ? (NOTIFYICONDATA) new NOTIFYICONDATAW() : new NOTIFYICONDATAA(); 
    iconData.cbSize = NOTIFYICONDATA.sizeof; 
    iconData.uID = id; 
    iconData.hWnd = display.hwndMessage; 
    iconData.hIcon = hIcon; 
    iconData.uFlags = OS.NIF_ICON; 
    OS.Shell_NotifyIcon (OS.NIM_MODIFY, iconData); 

代碼在OS.Shell_NotifyIcon方法

public static final boolean Shell_NotifyIcon (int dwMessage, NOTIFYICONDATA lpData) { 
    if (IsUnicode) return Shell_NotifyIconW (dwMessage, (NOTIFYICONDATAW)lpData); 
    return Shell_NotifyIconA (dwMessage, (NOTIFYICONDATAA)lpData); 
} 

所以每當我們調用SWT方法在通知區域設置圖像/圖標。多個托盤圖標被創建。

在我們的應用程序中,我們只使用OS.NIM_ADD初始化托盤項目,然後不斷設置托盤項目的圖像,並在內部調用OS.NIM_MODIFY,如上所示。

有沒有人在這個問題上有任何提示?

如何查看內部Windows shell SDK日誌/跟蹤?我如何查看誰在創建圖標?

UPDATE1

這個問題也是重複性當您的計算機的比例因子被改變

最好的問候,

Saurav

+0

你應該做一個[MCVE。如果你想讓我們看代碼。或者你可以自己調試。將所有調用記錄到'Shell_NotifyIcon'。那麼它應該是顯而易見的地方。 –

+0

@DavidHeffernan感謝您的回覆...另一個問題,我無法在我的系統上重現此問題...我的用戶可以重現此 – saurav

+0

添加日誌記錄代碼。讓用戶運行程序然後發送日誌輸出。 –

回答