2015-01-06 2 views
0

Я создаю пользовательскую оболочку для Windows 7/8. Как создать пользовательский лоток для моей оболочки? Я знаю, что в окне лотка есть имя класса «Shell_TrayWnd». Я попытался создать его самостоятельно и опубликовал сообщение «TaskbarCreated» с помощью PostMessage, но я не получаю сообщение «WM_COPYDATA» в своем лотке WndProc. Я что-то упускаю? Нужна помощь.Пользовательский системный лоток для настраиваемой оболочки

Код выглядит следующим образом:

static LRESULT CALLBACK tray_proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    if (uMsg == WM_COPYDATA) 
    { 
     COPYDATASTRUCT *cpdata = (COPYDATASTRUCT*)lParam; 
    } 
    return DefWindowProc(hWnd, uMsg, wParam, lParam); 
} 

int init_tray(void) 
{ 
    WNDCLASS wc; 
    memset(&wc, 0, sizeof(wc)); 
    wc.lpfnWndProc = tray_proc; 
    wc.hInstance = GetModuleHandle(NULL); 
    wc.lpszClassName = TEXT("Shell_TrayWnd"); 

    if (!RegisterClass(&wc)) 
    { 
     return 0; 
    } 

tray_window = CreateWindowEx(
    WS_EX_TOOLWINDOW, 
    wc.lpszClassName, 
    NULL, 
    WS_POPUP, 
    0, 0, 0, 0, 
    NULL, NULL, 
    wc.hInstance, 
    NULL); 

if (!tray_window) 
    return 0; 

/* let running apps know that a new tray is around */ 
PostMessage(HWND_BROADCAST, RegisterWindowMessage(TEXT("TaskbarCreated")), 0, 0); 

return 1; 
} 
+1

Как транслировать сообщение '' TaskbarCreated '', относящееся к' WM_COPYDATA'? Возможно, ваша связь с клиентом должна возвратиться с клиентом и предоставить вам реальный, неотложный вопрос. Как сообщалось, он не компилируется, чтобы сделать много смысла. – IInspectable

+0

Я видел в другой оболочке, что сообщение «TaskbarCreated» было передано после создания окна лотка. Если это не имеет смысла, вы не можете помочь мне? Моя цель - получить пользовательский лоток. –

+0

Я бы начал использовать правильную терминологию. Его никогда не называли лотком. Это область уведомлений. –

ответ

0

Понял работает!

SendNotifyMessage(HWND_BROADCAST, RegisterWindowMessage("TaskbarCreated"), 0, 0); 

Это сообщение является ключом. Без этого лоток WndProc не получит данные.

 Смежные вопросы

  • Нет связанных вопросов^_^