Кол-во непрочитанных сообщений на экране приветствия

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 4 Jan 2011.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Недавно задался вопросом: Каким это образом QIP Infium выводит на экран приветствия, кол-во непрочитанных сообщений. Пример:
    [​IMG]

    Довольно интересная вещь. Может кому нибудь пригодиться. За всё это отвечает ключик в реестре

    Code:
        Windows Registry Editor Version 5.00
    
        [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UnreadMail\Qip Infium: у вас есть непрочитанные сообщения]
        "MessageCount"=dword:00000012
        "TimeStamp"=hex:ea,df,4a,50,81,ab,cb,01
        "Application"=""
    
    Непосредственно параметр MessageCount отображает кол-во. Когда он равен нулю, то сообщение не показывается.

    Как показали опыты, MessageCount задает int значение. т.к. при FFFFFFFF на экране выдало что -1 сообщение непрочитано.

    И самое главное - за всё это отвечает только одна WinApi функция - SHSetUnreadMailCountW из shell32.dll

    Для Delphi написал прототип:
    Code:
    function SHSetUnreadMailCountW(pszMailAddress: PWideChar; dwCount : DWORD; pszShellExecuteCommand : PWideChar): HRESULT; stdcall;
     external 'shell32.dll' name 'SHSetUnreadMailCountW';
    
    Пример использования:
    SHSetUnreadMailCountW('Текст подсказки', 12, ''); - установить что не прочитано 12 сообщений
    SHSetUnreadMailCountW('Текст подсказки', 0, ''); - убрать уведомление.

    Данная фишка доступна начиная с Windows XP (версия shell32.dll >= 5.60).
    Не работает в системах с доменным входом, потому что там страница приветствия не отображается.
     
  2. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    198
    Likes Received:
    12
    Reputations:
    1
    Спасибо, возможно пригодится :)!