22#include <commoncontrols.h>
29#define DEBUG_SHELL_HOOK 0
31#define MAX_TASKS_COUNT (0x7FFF)
32#define TASK_ITEM_ARRAY_ALLOC 64
45 { HSHELL_WINDOWACTIVATED,
L"HSHELL_WINDOWACTIVATED" },
46 { HSHELL_GETMINRECT,
L"HSHELL_GETMINRECT" },
47 { HSHELL_REDRAW,
L"HSHELL_REDRAW" },
48 { HSHELL_TASKMAN,
L"HSHELL_TASKMAN" },
49 { HSHELL_LANGUAGE,
L"HSHELL_LANGUAGE" },
50 { HSHELL_SYSMENU,
L"HSHELL_SYSMENU" },
51 { HSHELL_ENDTASK,
L"HSHELL_ENDTASK" },
52 { HSHELL_ACCESSIBILITYSTATE,
L"HSHELL_ACCESSIBILITYSTATE" },
53 { HSHELL_APPCOMMAND,
L"HSHELL_APPCOMMAND" },
54 { HSHELL_WINDOWREPLACED,
L"HSHELL_WINDOWREPLACED" },
55 { HSHELL_WINDOWREPLACING,
L"HSHELL_WINDOWREPLACING" },
149 CLSCTX_INPROC_SERVER,
163 hr = pnotification->Show(
NULL, 0);
221 if (bHorizontal || uiBtnsPerLine > 1)
226 if (!bHorizontal || uiRows > 1)
252 tbbi.cbSize =
sizeof(tbbi);
254 tbbi.idCommand = iCommandId;
256 return SetButtonInfo(iButtonIndex, &tbbi) != 0;
300 public CWindowImpl < CTaskSwitchWnd, CWindow, CControlWinTraits >,
364 TRACE(
"Tasks dump:\n");
368 while (CurrentGroup !=
NULL)
374 while (CurrentTaskItem != LastTaskItem)
376 if (CurrentTaskItem->
Group == CurrentGroup)
378 TRACE(
" + Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->
hWnd, CurrentTaskItem->
Index);
383 CurrentGroup = CurrentGroup->
Next;
388 while (CurrentTaskItem != LastTaskItem)
392 TRACE(
"- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->
hWnd, CurrentTaskItem->
Index);
401 while (CurrentTaskItem != LastTaskItem)
403 TRACE(
"- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->
hWnd, CurrentTaskItem->
Index);
416 int offset = bInserted ? +1 : -1;
422 while (CurrentGroup !=
NULL)
425 CurrentGroup->
Index >= iIndex)
431 CurrentGroup->
Index = NewIndex;
434 CurrentGroup->
Index = -1;
437 CurrentGroup = CurrentGroup->
Next;
444 while (CurrentTaskItem != LastTaskItem)
446 CurrentGroup = CurrentTaskItem->
Group;
447 if (CurrentGroup !=
NULL)
450 CurrentTaskItem->
Index >= iIndex)
452 goto UpdateTaskItemBtn;
455 else if (CurrentTaskItem->
Index >= iIndex)
462 CurrentTaskItem->
Index = NewIndex;
465 CurrentTaskItem->
Index = -1;
475 ASSERT(TaskGroup->Index >= 0);
479 return TaskGroup->Index;
484 ASSERT(TaskGroup->dwTaskCount > 0);
485 ASSERT(TaskGroup->IsCollapsed);
486 ASSERT(TaskGroup->Index >= 0);
496#define GET_ICON(type) \
497 SendMessageTimeout(hwnd, WM_GETICON, (type), 0, SMTO_NOTIMEOUTIFNOTHUNG, 100, (PDWORD_PTR)&hIcon)
532 ASSERT(TaskItem->Index >= 0);
534 tbbi.cbSize =
sizeof(tbbi);
540 if (TaskItem->RenderFlashed)
560 tbbi.iImage = TaskItem->IconIndex;
562 if (!
m_TaskBar.SetButtonInfo(TaskItem->Index, &tbbi))
564 TaskItem->Index = -1;
568 TRACE(
"Updated button %d for hwnd 0x%p\n", TaskItem->Index, TaskItem->hWnd);
569 return TaskItem->Index;
577 if (TaskItem->IconIndex == -1)
580 tbbi.cbSize =
sizeof(tbbi);
585 while (currentTaskItem != LastItem)
587 if (currentTaskItem->
IconIndex > TaskItem->IconIndex)
590 tbbi.iImage = currentTaskItem->
IconIndex;
616 while (TaskItem != LastTaskItem)
618 if (TaskItem->
Group == TaskGroup)
620 if ((NewTaskItem !=
NULL && TaskItem != NewTaskItem) || NewTaskItem ==
NULL)
622 FoundTaskItem = TaskItem;
625 if (--dwTaskCount == 0)
635 return FoundTaskItem;
645 TaskGroup = TaskItem->Group;
648 if (TaskGroup !=
NULL)
656 if (LastTaskItem !=
NULL)
661 return LastTaskItem->
Index + 1;
670 if (LastTaskItem !=
NULL)
674 return LastTaskItem->
Index + 1;
689 if (TaskItem->Index >= 0)
694 if (TaskItem->Group !=
NULL &&
695 TaskItem->Group->IsCollapsed)
706 tbBtn.
iBitmap = TaskItem->IconIndex;
709 tbBtn.
dwData = TaskItem->Index;
723 if (
m_TaskBar.InsertButton(iIndex, &tbBtn))
727 TRACE(
"Added button %d for hwnd 0x%p\n", iIndex, TaskItem->hWnd);
729 TaskItem->Index = iIndex;
747 TaskGroup = TaskItem->Group;
749 if (TaskItem->Index >= 0)
757 iIndex = TaskItem->Index;
760 TaskItem->Index = -1;
785 TRACE(
"Cannot get process id of hwnd 0x%p\n",
hWnd);
792 while (TaskGroup !=
NULL)
800 PrevLink = &TaskGroup->
Next;
801 TaskGroup = TaskGroup->
Next;
808 if (TaskGroup !=
NULL)
812 TaskGroup->
Index = -1;
815 *PrevLink = TaskGroup;
825 TaskGroup = TaskItem->Group;
826 if (TaskGroup !=
NULL)
829 if (dwNewTaskCount == 0)
834 while (CurrentGroup != TaskGroup)
836 PrevLink = &CurrentGroup->
Next;
837 CurrentGroup = CurrentGroup->
Next;
841 ASSERT(TaskGroup == CurrentGroup);
842 *PrevLink = TaskGroup->
Next;
850 TaskGroup->
Index >= 0)
852 if (dwNewTaskCount > 1)
873 while (TaskItem != LastItem)
899 while (TaskItem != LastItem)
901 TaskGroup = TaskItem->
Group;
902 if (TaskGroup !=
NULL)
909 DWORD dwProcessIdTask;
913 dwProcessIdTask == dwProcessId)
951 SIZE_T NewArrayLength, ActiveTaskItemIndex;
959 if (NewArray !=
NULL)
1017 if (TaskItem !=
NULL)
1018 TaskGroup = TaskItem->Group;
1021 TaskGroup !=
NULL &&
1028 if (CurrentTaskItem !=
NULL)
1032 if (CurrentTaskItem == TaskItem)
1035 CurrentTaskGroup = CurrentTaskItem->
Group;
1038 CurrentTaskGroup !=
NULL &&
1041 if (CurrentTaskGroup == TaskGroup)
1049 if (CurrentTaskItem->
Index >= 0)
1058 if (TaskItem !=
NULL && TaskItem->Index >= 0)
1062 else if (TaskItem ==
NULL)
1064 TRACE(
"Active TaskItem now NULL\n");
1074 while (TaskItem != LastItem)
1090 while (CurrentGroup !=
NULL)
1095 CurrentGroup = CurrentGroup->
Next;
1098 return CurrentGroup;
1109 if (TaskItem ==
NULL)
1113 if (TaskItem !=
NULL)
1117 TaskItem->
Index = -1;
1127 return TaskItem !=
NULL;
1132 if (TaskItem !=
NULL)
1134 TRACE(
"Activate window 0x%p on button %d\n", TaskItem->hWnd, TaskItem->Index);
1151 if (TaskItem ==
NULL)
1156 if (TaskItem ==
NULL)
1158 WARN(
"Activate window 0x%p, could not find task\n",
hWnd);
1170 if (TaskItem !=
NULL)
1172 TRACE(
"Delete window 0x%p on button %d\n",
hWnd, TaskItem->
Index);
1198 TaskItem->RenderFlashed = 1;
1207 if (TaskItem !=
NULL)
1209 TRACE(
"Flashing window 0x%p on button %d\n",
hWnd, TaskItem->
Index);
1221 TaskGroup = TaskItem->Group;
1228 else if (TaskItem->Index >= 0)
1230 goto UpdateTaskItem;
1233 else if (TaskItem->Index >= 0)
1236 TaskItem->RenderFlashed = 0;
1247 if (TaskItem !=
NULL)
1259 UINT uiRows, uiMax, uiMin, uiBtnsPerLine,
ui;
1276 while (TaskItem != LastTaskItem)
1290 Horizontal =
m_Tray->IsHorizontal();
1295 tbm.
cbSize =
sizeof(tbm);
1315 if (!bRedrawDisabled)
1321 uiRows, uiBtnsPerLine);
1330 NewBtnSize = (rcClient.
right - (uiBtnsPerLine * cxButtonSpacing)) / uiBtnsPerLine;
1332 if (NewBtnSize < (
LONG) uiMin)
1334 if (NewBtnSize >(
LONG)uiMax)
1338 uiBtnsPerLine = rcClient.
right / (NewBtnSize + cxButtonSpacing);
1339 if (uiBtnsPerLine == 0)
1344 NewBtnSize = uiMax = rcClient.
right;
1354 tbbi.
cbSize =
sizeof(tbbi);
1356 tbbi.
cx = (
INT) NewBtnSize;
1363 if ((
ui + 1) % uiBtnsPerLine == 0)
1405 return This->EnumWindowsProc(
hWnd);
1410 TRACE(
"Refreshing window list...\n");
1417 TRACE(
"OmThemeChanged\n");
1513 if (bResult && *szBuf)
1520 const UINT uAppCmd = GET_APPCOMMAND_LPARAM(
lParam);
1525 case APPCOMMAND_VOLUME_MUTE:
1526 case APPCOMMAND_VOLUME_DOWN:
1527 case APPCOMMAND_VOLUME_UP:
1529 FIXME(
"Call the mixer API to change the global volume\n");
1531 case APPCOMMAND_BROWSER_SEARCH:
1548 TRACE(
"Received shell hook message: wParam=%08lx, lParam=%08lx\n",
wParam,
lParam);
1552 case HSHELL_APPCOMMAND:
1568 case HSHELL_WINDOWACTIVATED:
1581 case HSHELL_TASKMAN:
1590 case HSHELL_LANGUAGE:
1591 case HSHELL_SYSMENU:
1592 case HSHELL_ENDTASK:
1593 case HSHELL_ACCESSIBILITYSTATE:
1594 case HSHELL_WINDOWREPLACED:
1595 case HSHELL_WINDOWREPLACING:
1597 case HSHELL_GETMINRECT:
1602 for (
i = 0, found = 0;
i !=
_countof(hshell_msg);
i++)
1606 TRACE(
"Shell message %ws unhandled (lParam = 0x%p)!\n", hshell_msg[
i].msg_name,
lParam);
1636 TRACE(
"Valid button clicked. HWND=%p, IsMinimized=%s, IsActive=%s...\n",
1637 TaskItem->hWnd, bIsMinimized ?
"Yes" :
"No", bIsActive ?
"Yes" :
"No");
1639 if (!bIsMinimized && bIsActive)
1643 TRACE(
"Valid button clicked. App window Minimized.\n");
1649 TRACE(
"Valid button clicked. App window Restored.\n");
1675 if (TaskItem !=
NULL)
1701 ERR(
"HandleTaskItemRightClick detected the window did not become foreground\n");
1728 if (TaskItem !=
NULL)
1746 if (TaskGroup ==
NULL && TaskItem !=
NULL)
1760 nmtbcd->nmcd.rc.left,
1761 nmtbcd->nmcd.rc.top,
1762 nmtbcd->nmcd.rc.right,
1763 nmtbcd->nmcd.rc.bottom);
1774 else if (TaskGroup !=
NULL)
1892 bSettingsChanged =
TRUE;
1899 bSettingsChanged =
TRUE;
1903 if (bSettingsChanged)
1947 RECT rcItem, rcToolbar;
1953 *prcMinRect = rcItem;
1984 if (
wParam == SPI_SETNONCLIENTMETRICS)
#define InterlockedExchange
#define TWM_OPENSTARTMENU
#define TSWM_UPDATETASKBARPOS
TaskbarSettings g_TaskbarSettings
#define TWM_SETTINGSCHANGED
BOOL SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
BOOL ScreenToClient(LPPOINT lpPoint) const
void SetRedraw(BOOL bRedraw=TRUE)
BOOL GetWindowRect(LPRECT lpRect) const
BOOL InvalidateRect(LPCRECT lpRect, BOOL bErase=TRUE)
static DWORD CALLBACK s_HardErrorThreadProc(IN OUT LPVOID lpParameter)
void StartThread(PBALLOON_HARD_ERROR_DATA pData)
BOOL HandleAppCommand(IN WPARAM wParam, IN LPARAM lParam)
static BOOL CALLBACK s_EnumWindowsProc(IN HWND hWnd, IN LPARAM lParam)
VOID RedrawTaskItem(IN OUT PTASK_ITEM TaskItem)
LRESULT OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
INT UpdateTaskItemButton(IN PTASK_ITEM TaskItem)
INT GetWndTextFromTaskItem(IN PTASK_ITEM TaskItem, LPWSTR szBuf, DWORD cchBuf)
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
PTASK_ITEM FindOtherTaskItem(IN HWND hWnd)
VOID UpdateButtonsSize(IN BOOL bRedrawDisabled)
BOOL HandleButtonClick(IN WORD wIndex)
virtual ~CTaskSwitchWnd()
PTASK_ITEM m_ActiveTaskItem
VOID ExpandTaskGroup(IN PTASK_GROUP TaskGroup)
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override
PTASK_GROUP AddToTaskGroup(IN HWND hWnd)
VOID RemoveIcon(IN PTASK_ITEM TaskItem)
CComPtr< ITrayWindow > m_Tray
VOID CheckActivateTaskItem(IN OUT PTASK_ITEM TaskItem)
VOID UpdateIndexesAfter(IN INT iIndex, BOOL bInserted)
VOID SendPulseToTray(BOOL bDelete, HWND hwndActive)
VOID FreeTaskItem(IN OUT PTASK_ITEM TaskItem)
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
PTASK_ITEM AllocTaskItem()
LRESULT OnSettingChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CHardErrorThread m_HardErrorThread
VOID FlashTaskItem(IN OUT PTASK_ITEM TaskItem)
VOID RemoveTaskFromTaskGroup(IN OUT PTASK_ITEM TaskItem)
BOOL FlashTask(IN HWND hWnd)
PTASK_ITEM FindLastTaskItemOfGroup(IN PTASK_GROUP TaskGroup OPTIONAL, IN PTASK_ITEM NewTaskItem OPTIONAL)
LRESULT OnShellHook(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
INT AddTaskItemButton(IN OUT PTASK_ITEM TaskItem)
LRESULT OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
BOOL ActivateTask(IN HWND hWnd)
INT UpdateTaskGroupButton(IN PTASK_GROUP TaskGroup)
VOID DeleteTaskItem(IN OUT PTASK_ITEM TaskItem)
BOOL ActivateTaskItem(IN OUT PTASK_ITEM TaskItem OPTIONAL)
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
BOOL RedrawTask(IN HWND hWnd)
PTASK_GROUP FindTaskGroupByIndex(IN INT Index)
LRESULT OnKludgeItemRect(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
BOOL DeleteTaskItemButton(IN OUT PTASK_ITEM TaskItem)
HICON GetWndIcon(HWND hwnd)
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
static BOOL InvokeRegistryAppKeyCommand(UINT uAppCmd)
VOID HandleTaskGroupRightClick(IN OUT PTASK_GROUP TaskGroup)
BOOL CALLBACK EnumWindowsProc(IN HWND hWnd)
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
WORD m_AllocatedTaskItems
LRESULT OnThemeChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
VOID HandleTaskGroupClick(IN OUT PTASK_GROUP TaskGroup)
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
PTASK_ITEM FindTaskItem(IN HWND hWnd)
LRESULT HandleItemPaint(IN OUT NMTBCUSTOMDRAW *nmtbcd)
STDMETHODIMP GetWindow(HWND *phwnd) override
PTASK_ITEM FindTaskItemByIndex(IN INT Index)
VOID HandleTaskItemClick(IN OUT PTASK_ITEM TaskItem)
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
static VOID CALLBACK SendAsyncProc(HWND hwnd, UINT uMsg, DWORD_PTR dwData, LRESULT lResult)
VOID HandleTaskItemRightClick(IN OUT PTASK_ITEM TaskItem)
BOOL DeleteTask(IN HWND hWnd)
HRESULT Initialize(IN HWND hWndParent, IN OUT ITrayWindow *tray)
INT CalculateTaskItemNewButtonIndex(IN PTASK_ITEM TaskItem)
LRESULT OnUpdateTaskbarPos(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT HandleToolbarNotification(IN const NMHDR *nmh)
BOOL HandleButtonRightClick(IN WORD wIndex)
BOOL AddTask(IN HWND hWnd)
BOOL WINAPI ImageList_SetIconSize(HIMAGELIST himl, INT cx, INT cy)
BOOL WINAPI ImageList_Remove(HIMAGELIST himl, INT i)
INT WINAPI ImageList_ReplaceIcon(HIMAGELIST himl, INT nIndex, HICON hIcon)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
#define HeapFree(x, y, z)
#define FAILED_UNEXPECTEDLY(hr)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
BOOL WINAPI TerminateThread(IN HANDLE hThread, IN DWORD dwExitCode)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
LONG WINAPI SHRegOpenUSKeyW(LPCWSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
LONG WINAPI SHRegCloseUSKey(HUSKEY hUSKey)
LONG WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
EXTERN_C HRESULT WINAPI SHRunIndirectRegClientCommand(_In_opt_ HWND hWnd, _In_ PCWSTR pszClientType)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
BOOL WINAPI IsThemeActive(void)
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
BOOL WINAPI IsAppThemed(void)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define COM_INTERFACE_ENTRY_IID(iid, x)
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
#define DECLARE_NOT_AGGREGATABLE(x)
#define MESSAGE_HANDLER(msg, func)
#define BEGIN_MSG_MAP(theClass)
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd)
static HANDLE ULONG_PTR dwData
static HMODULE MODULEINFO DWORD cb
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
const GUID IID_IOleWindow
_Out_opt_ int _Out_opt_ int * cy
#define CDDS_ITEMPREPAINT
#define CDRF_NOTIFYITEMDRAW
#define TBCDRF_NOBACKGROUND
#define TBSTYLE_TRANSPARENT
#define TBMF_BUTTONSPACING
struct _NMTBCUSTOMDRAW * LPNMTBCUSTOMDRAW
#define REGSTR_PATH_EXPLORER
BOOL WINAPI RegisterShellHook(HWND hWnd, DWORD dwType)
BOOL WINAPI SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidlSaveFile)
EXTERN_C VOID WINAPI ShellExec_RunDLLW(_In_opt_ HWND hwnd, _In_opt_ HINSTANCE hInstance, _In_ PCWSTR pszCmdLine, _In_ INT nCmdShow)
PULONG MinorVersion OPTIONAL
struct _TASK_GROUP * Next
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
struct _TASK_ITEM * PTASK_ITEM
HRESULT CTaskSwitchWnd_CreateInstance(IN HWND hWndParent, IN OUT ITrayWindow *Tray, REFIID riid, void **ppv)
#define TASK_ITEM_ARRAY_ALLOC
struct _TASK_GROUP TASK_GROUP
const WCHAR szTaskSwitchWndClass[]
const WCHAR szRunningApps[]
struct _TASK_GROUP * PTASK_GROUP
struct _TASK_ITEM TASK_ITEM
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
struct _BALLOON_HARD_ERROR_DATA * PBALLOON_HARD_ERROR_DATA
#define WM_POPUPSYSTEMMENU
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
_In_ WDFCOLLECTION _In_ ULONG Index
VOID WINAPI SwitchToThisWindow(HWND hwnd, BOOL fAltTab)
BOOL WINAPI IsHungAppWindow(HWND hwnd)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define SubclassWindow(hwnd, lpfn)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
DWORD WINAPI GetSysColor(_In_ int)
#define HSHELL_RUDEAPPACTIVATED
#define HSHELL_ACTIVATESHELLWINDOW
HWND WINAPI GetForegroundWindow(void)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HSHELL_WINDOWDESTROYED
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define HSHELL_WINDOWCREATED
HBRUSH WINAPI GetSysColorBrush(_In_ int)
struct tagCOPYDATASTRUCT * PCOPYDATASTRUCT
BOOL WINAPI SetForegroundWindow(_In_ HWND)
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
#define PostThreadMessage
BOOL WINAPI SendMessageCallbackW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ SENDASYNCPROC, _In_ ULONG_PTR)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)
#define COLOR_HIGHLIGHTTEXT
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define MAKEINTRESOURCEW(i)
INT WINAPI InternalGetWindowText(_In_ HWND hWnd, _Out_writes_to_(cchMaxCount, return+1) LPWSTR pString, _In_ int cchMaxCount)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define IID_PPV_ARG(Itype, ppType)