簡體   English   中英

C ++ Windows系統托盤不會顯示消息

[英]C++ Windows System Tray wont display message

我已經在這里停留了4天。 我做了一個將程序放入系統托盤的函數,但是這里的問題是它不會顯示氣球標題和消息 我究竟做錯了什么? 我什至提供了一個單獨的函數來確定我們正在運行哪些windows os ,並根據檢測到的windows os來初始化cbSize 任何幫助將不勝感激。 波紋管是功能。

編輯:我正在使用Windows 7 ,並且圖標顯示在系統托盤中,但不會顯示消息或標題。 我現在也在做這個控制台應用程序,因為它將用作Unity3D的插件。 我想要一個使用Windows API但不使用Windows窗體的解決方案,因為我不希望從中打開任何新窗口。

void createSystemTray()
{
    HWND wHandler = GetDesktopWindow();
    NOTIFYICONDATA iData;
    ZeroMemory(&iData,sizeof(iData));



    if(getOsVersion()=="Windows Vista" || getOsVersion()=="Windows 7" || getOsVersion()=="Windows 8" || getOsVersion()=="Windows 8.1")
    {
        iData.cbSize = sizeof(NOTIFYICONDATA);
    }

    else if (getOsVersion()=="Windows XP"||getOsVersion()=="Windows XP Professional x64 Edition")
    {
        iData.cbSize = NOTIFYICONDATA_V3_SIZE;
    }

    else if (getOsVersion()=="Windows 2000")
    {
        iData.cbSize = NOTIFYICONDATA_V2_SIZE;
    }

    else if (getOsVersion()=="UNKNOWN OS")
    {
//Assume we have old Windows Os such as Me,95....
        iData.cbSize = NOTIFYICONDATA_V1_SIZE;
    }
    iData.hWnd = wHandler;
    iData.uID = 100;
    iData.uVersion = NOTIFYICON_VERSION_4;
    iData.uCallbackMessage = WM_MESSAGE;
    iData.hIcon = LoadIcon(NULL,(LPCTSTR)IDI_WARNING);
    lstrcpy(iData.szTip,"My First Tray Icon");
    lstrcpy(iData.szInfo,"My App Info");
    lstrcpy(iData.szInfoTitle,"My Info Title");
    iData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    Shell_NotifyIcon(NIM_SETVERSION,&iData); //called only when usingNIM_ADD
    Shell_NotifyIcon(NIM_ADD,&iData);
}

我將NIF_INFO添加到uFlags ,問題消失了。 現在,它將顯示所有內容,包括文本,標題和信息標題。 下面的代碼解決了它。

iData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP|NIF_SHOWTIP|NIF_INFO;

問題中的代碼最大的問題是傳遞了錯誤的窗口句柄。 您必須通過您的窗口句柄之一。 但是,您可以傳遞桌面的窗口句柄。

您將需要創建一個窗口並使用其句柄。 該窗口不需要是可見的。 我相信您可以使用“僅消息”窗口。

你還必須調用NIM_SETVERSIONNIM_ADD

我非常懷疑您的版本切換基於字符串相等性測試。 例如,您的代碼將在Windows 9上中斷。 使用版本幫助器功能

您也不會執行任何錯誤檢查。 這不是最容易調用的函數,但是如果您無法檢查錯誤,則會使事情變得比原本更難做。 請閱讀文檔並添加錯誤檢查代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM