Я создаю пользовательскую оболочку для 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;
}
Как транслировать сообщение '' TaskbarCreated '', относящееся к' WM_COPYDATA'? Возможно, ваша связь с клиентом должна возвратиться с клиентом и предоставить вам реальный, неотложный вопрос. Как сообщалось, он не компилируется, чтобы сделать много смысла. – IInspectable
Я видел в другой оболочке, что сообщение «TaskbarCreated» было передано после создания окна лотка. Если это не имеет смысла, вы не можете помочь мне? Моя цель - получить пользовательский лоток. –
Я бы начал использовать правильную терминологию. Его никогда не называли лотком. Это область уведомлений. –