11#include <commoncontrols.h>
19#define DEBUG_SHELL_HOOK 0
21#define MAX_TASKS_COUNT (0x7FFF)
22#define TASK_ITEM_ARRAY_ALLOC 64
27#define TIMER_ID_VALIDATE_RUDE_APP 5
28#define VALIDATE_RUDE_INTERVAL 1000
29#define VALIDATE_RUDE_MAX_COUNT 5
61 if (
hWnd == hwndTarget)
89 if ((
style & CHECK_STYLE) == CHECK_STYLE)
135 { HSHELL_WINDOWACTIVATED,
L"HSHELL_WINDOWACTIVATED" },
136 { HSHELL_GETMINRECT,
L"HSHELL_GETMINRECT" },
137 { HSHELL_REDRAW,
L"HSHELL_REDRAW" },
138 { HSHELL_TASKMAN,
L"HSHELL_TASKMAN" },
139 { HSHELL_LANGUAGE,
L"HSHELL_LANGUAGE" },
140 { HSHELL_SYSMENU,
L"HSHELL_SYSMENU" },
141 { HSHELL_ENDTASK,
L"HSHELL_ENDTASK" },
142 { HSHELL_ACCESSIBILITYSTATE,
L"HSHELL_ACCESSIBILITYSTATE" },
143 { HSHELL_APPCOMMAND,
L"HSHELL_APPCOMMAND" },
144 { HSHELL_WINDOWREPLACED,
L"HSHELL_WINDOWREPLACED" },
145 { HSHELL_WINDOWREPLACING,
L"HSHELL_WINDOWREPLACING" },
239 CLSCTX_INPROC_SERVER,
253 hr = pnotification->Show(
NULL, 0);
310 if (bHorizontal || uiBtnsPerLine > 1)
315 if (!bHorizontal || uiRows > 1)
341 tbbi.cbSize =
sizeof(tbbi);
343 tbbi.idCommand = iCommandId;
345 return SetButtonInfo(iButtonIndex, &tbbi) != 0;
389 public CWindowImpl < CTaskSwitchWnd, CWindow, CControlWinTraits >,
459 TRACE(
"Tasks dump:\n");
463 while (CurrentGroup !=
NULL)
469 while (CurrentTaskItem != LastTaskItem)
471 if (CurrentTaskItem->
Group == CurrentGroup)
473 TRACE(
" + Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->
hWnd, CurrentTaskItem->
Index);
478 CurrentGroup = CurrentGroup->
Next;
483 while (CurrentTaskItem != LastTaskItem)
487 TRACE(
"- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->
hWnd, CurrentTaskItem->
Index);
496 while (CurrentTaskItem != LastTaskItem)
498 TRACE(
"- Task hwnd: 0x%p Index: %d\n", CurrentTaskItem->
hWnd, CurrentTaskItem->
Index);
511 int offset = bInserted ? +1 : -1;
517 while (CurrentGroup !=
NULL)
520 CurrentGroup->
Index >= iIndex)
526 CurrentGroup->
Index = NewIndex;
529 CurrentGroup->
Index = -1;
532 CurrentGroup = CurrentGroup->
Next;
539 while (CurrentTaskItem != LastTaskItem)
541 CurrentGroup = CurrentTaskItem->
Group;
542 if (CurrentGroup !=
NULL)
545 CurrentTaskItem->
Index >= iIndex)
547 goto UpdateTaskItemBtn;
550 else if (CurrentTaskItem->
Index >= iIndex)
557 CurrentTaskItem->
Index = NewIndex;
560 CurrentTaskItem->
Index = -1;
570 ASSERT(TaskGroup->Index >= 0);
574 return TaskGroup->Index;
579 ASSERT(TaskGroup->dwTaskCount > 0);
580 ASSERT(TaskGroup->IsCollapsed);
581 ASSERT(TaskGroup->Index >= 0);
591#define GET_ICON(type) \
592 SendMessageTimeout(hwnd, WM_GETICON, (type), 0, SMTO_NOTIMEOUTIFNOTHUNG, 100, (PDWORD_PTR)&hIcon)
627 ASSERT(TaskItem->Index >= 0);
629 tbbi.cbSize =
sizeof(tbbi);
635 if (TaskItem->RenderFlashed)
655 tbbi.iImage = TaskItem->IconIndex;
657 if (!
m_TaskBar.SetButtonInfo(TaskItem->Index, &tbbi))
659 TaskItem->Index = -1;
663 TRACE(
"Updated button %d for hwnd 0x%p\n", TaskItem->Index, TaskItem->hWnd);
664 return TaskItem->Index;
672 if (TaskItem->IconIndex == -1)
675 tbbi.cbSize =
sizeof(tbbi);
680 while (currentTaskItem != LastItem)
682 if (currentTaskItem->
IconIndex > TaskItem->IconIndex)
685 tbbi.iImage = currentTaskItem->
IconIndex;
711 while (TaskItem != LastTaskItem)
713 if (TaskItem->
Group == TaskGroup)
715 if ((NewTaskItem !=
NULL && TaskItem != NewTaskItem) || NewTaskItem ==
NULL)
717 FoundTaskItem = TaskItem;
720 if (--dwTaskCount == 0)
730 return FoundTaskItem;
740 TaskGroup = TaskItem->Group;
743 if (TaskGroup !=
NULL)
751 if (LastTaskItem !=
NULL)
756 return LastTaskItem->
Index + 1;
765 if (LastTaskItem !=
NULL)
769 return LastTaskItem->
Index + 1;
784 if (TaskItem->Index >= 0)
789 if (TaskItem->Group !=
NULL &&
790 TaskItem->Group->IsCollapsed)
801 tbBtn.
iBitmap = TaskItem->IconIndex;
804 tbBtn.
dwData = TaskItem->Index;
818 if (
m_TaskBar.InsertButton(iIndex, &tbBtn))
822 TRACE(
"Added button %d for hwnd 0x%p\n", iIndex, TaskItem->hWnd);
824 TaskItem->Index = iIndex;
842 TaskGroup = TaskItem->Group;
844 if (TaskItem->Index >= 0)
852 iIndex = TaskItem->Index;
855 TaskItem->Index = -1;
880 TRACE(
"Cannot get process id of hwnd 0x%p\n",
hWnd);
887 while (TaskGroup !=
NULL)
895 PrevLink = &TaskGroup->
Next;
896 TaskGroup = TaskGroup->
Next;
903 if (TaskGroup !=
NULL)
907 TaskGroup->
Index = -1;
910 *PrevLink = TaskGroup;
920 TaskGroup = TaskItem->Group;
921 if (TaskGroup !=
NULL)
924 if (dwNewTaskCount == 0)
929 while (CurrentGroup != TaskGroup)
931 PrevLink = &CurrentGroup->
Next;
932 CurrentGroup = CurrentGroup->
Next;
936 ASSERT(TaskGroup == CurrentGroup);
937 *PrevLink = TaskGroup->
Next;
945 TaskGroup->
Index >= 0)
947 if (dwNewTaskCount > 1)
968 while (TaskItem != LastItem)
994 while (TaskItem != LastItem)
996 TaskGroup = TaskItem->
Group;
997 if (TaskGroup !=
NULL)
1004 DWORD dwProcessIdTask;
1007 &dwProcessIdTask) &&
1046 SIZE_T NewArrayLength, ActiveTaskItemIndex;
1054 if (NewArray !=
NULL)
1112 if (TaskItem !=
NULL)
1113 TaskGroup = TaskItem->Group;
1116 TaskGroup !=
NULL &&
1123 if (CurrentTaskItem !=
NULL)
1127 if (CurrentTaskItem == TaskItem)
1130 CurrentTaskGroup = CurrentTaskItem->
Group;
1133 CurrentTaskGroup !=
NULL &&
1136 if (CurrentTaskGroup == TaskGroup)
1144 if (CurrentTaskItem->
Index >= 0)
1153 if (TaskItem !=
NULL && TaskItem->Index >= 0)
1157 else if (TaskItem ==
NULL)
1159 TRACE(
"Active TaskItem now NULL\n");
1169 while (TaskItem != LastItem)
1185 while (CurrentGroup !=
NULL)
1190 CurrentGroup = CurrentGroup->
Next;
1193 return CurrentGroup;
1204 if (TaskItem ==
NULL)
1208 if (TaskItem !=
NULL)
1212 TaskItem->
Index = -1;
1222 return TaskItem !=
NULL;
1227 if (TaskItem !=
NULL)
1229 TRACE(
"Activate window 0x%p on button %d\n", TaskItem->hWnd, TaskItem->Index);
1246 if (TaskItem ==
NULL)
1251 if (TaskItem ==
NULL)
1253 WARN(
"Activate window 0x%p, could not find task\n",
hWnd);
1265 if (TaskItem !=
NULL)
1267 TRACE(
"Delete window 0x%p on button %d\n",
hWnd, TaskItem->
Index);
1293 TaskItem->RenderFlashed = 1;
1302 if (TaskItem !=
NULL)
1304 TRACE(
"Flashing window 0x%p on button %d\n",
hWnd, TaskItem->
Index);
1316 TaskGroup = TaskItem->Group;
1323 else if (TaskItem->Index >= 0)
1325 goto UpdateTaskItem;
1328 else if (TaskItem->Index >= 0)
1331 TaskItem->RenderFlashed = 0;
1342 if (TaskItem !=
NULL)
1354 UINT uiRows, uiMax, uiMin, uiBtnsPerLine,
ui;
1371 while (TaskItem != LastTaskItem)
1385 Horizontal =
m_Tray->IsHorizontal();
1390 tbm.
cbSize =
sizeof(tbm);
1410 if (!bRedrawDisabled)
1416 uiRows, uiBtnsPerLine);
1425 NewBtnSize = (rcClient.
right - (uiBtnsPerLine * cxButtonSpacing)) / uiBtnsPerLine;
1427 if (NewBtnSize < (
LONG) uiMin)
1429 if (NewBtnSize >(
LONG)uiMax)
1433 uiBtnsPerLine = rcClient.
right / (NewBtnSize + cxButtonSpacing);
1434 if (uiBtnsPerLine == 0)
1439 NewBtnSize = uiMax = rcClient.
right;
1449 tbbi.
cbSize =
sizeof(tbbi);
1451 tbbi.
cx = (
INT) NewBtnSize;
1458 if ((
ui + 1) % uiBtnsPerLine == 0)
1500 return This->EnumWindowsProc(
hWnd);
1505 TRACE(
"Refreshing window list...\n");
1512 TRACE(
"OmThemeChanged\n");
1616 if (bResult && *szBuf)
1623 const UINT uAppCmd = GET_APPCOMMAND_LPARAM(
lParam);
1629 case APPCOMMAND_VOLUME_MUTE:
1631 case APPCOMMAND_VOLUME_DOWN:
1632 case APPCOMMAND_VOLUME_UP:
1634 case APPCOMMAND_BROWSER_SEARCH:
1651 TRACE(
"Received shell hook message: wParam=%08lx, lParam=%08lx\n",
wParam,
lParam);
1655 case HSHELL_APPCOMMAND:
1670 case HSHELL_WINDOWACTIVATED:
1683 case HSHELL_TASKMAN:
1692 case HSHELL_LANGUAGE:
1693 case HSHELL_SYSMENU:
1694 case HSHELL_ENDTASK:
1695 case HSHELL_ACCESSIBILITYSTATE:
1696 case HSHELL_WINDOWREPLACED:
1697 case HSHELL_WINDOWREPLACING:
1699 case HSHELL_GETMINRECT:
1704 for (
i = 0, found = 0;
i !=
_countof(hshell_msg);
i++)
1708 TRACE(
"Shell message %ws unhandled (lParam = 0x%p)!\n", hshell_msg[
i].msg_name,
lParam);
1726 TRACE(
"Audio device was added or removed, invalidating mixer\n");
1745 TRACE(
"Valid button clicked. HWND=%p, IsMinimized=%s, IsActive=%s...\n",
1746 TaskItem->hWnd, bIsMinimized ?
"Yes" :
"No", bIsActive ?
"Yes" :
"No");
1748 if (!bIsMinimized && bIsActive)
1752 TRACE(
"Valid button clicked. App window Minimized.\n");
1758 TRACE(
"Valid button clicked. App window Restored.\n");
1784 if (TaskItem !=
NULL)
1809 ERR(
"HandleTaskItemRightClick detected the window did not become foreground\n");
1836 if (TaskItem !=
NULL)
1854 if (TaskGroup ==
NULL && TaskItem !=
NULL)
1868 nmtbcd->nmcd.rc.left,
1869 nmtbcd->nmcd.rc.top,
1870 nmtbcd->nmcd.rc.right,
1871 nmtbcd->nmcd.rc.bottom);
1882 else if (TaskGroup !=
NULL)
1937 (
pData->hTargetMonitor &&
pData->hTargetMonitor != hMon) ||
1961 BOOL bFullOpening = (
pData->hTargetMonitor == hMonitor);
1962 if (!bFullOpening &&
pData->pRect)
1971 pData->pTray->NotifyFullScreenToAppBars(hMonitor, bFullOpening);
2008 return hwndFirstCheck;
2013 return data.hwndFound;
2147 RECT rcItem, rcToolbar;
2169 if (!bIsMinimized && bIsActive)
2190 bSettingsChanged =
TRUE;
2197 bSettingsChanged =
TRUE;
2201 if (bSettingsChanged)
2245 RECT rcItem, rcToolbar;
2251 *prcMinRect = rcItem;
2300 if (
wParam == SPI_SETNONCLIENTMETRICS)
#define IID_PPV_ARG(Itype, ppType)
#define InterlockedExchange
#define TWM_OPENSTARTMENU
#define TSWM_UPDATETASKBARPOS
TaskbarSettings g_TaskbarSettings
#define TSWM_ACTIVATETASKINDEX
#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)
CMultimediaBackend m_Mixer
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)
INT m_nRudeAppValidationCounter
VOID RemoveIcon(IN PTASK_ITEM TaskItem)
CComPtr< ITrayWindow > m_Tray
VOID CheckActivateTaskItem(IN OUT PTASK_ITEM TaskItem)
VOID UpdateIndexesAfter(IN INT iIndex, BOOL bInserted)
LRESULT OnWindowPosChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
VOID FreeTaskItem(IN OUT PTASK_ITEM TaskItem)
LRESULT OnWinMMDeviceChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
PTASK_ITEM AllocTaskItem()
LRESULT OnSettingChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
static BOOL CALLBACK IsRudeEnumProc(_In_ HWND hwnd, _In_ LPARAM lParam)
CHardErrorThread m_HardErrorThread
static BOOL CALLBACK FullScreenEnumProc(_In_ HMONITOR hMonitor, _In_opt_ HDC hDC, _In_ LPRECT prc, _In_ LPARAM lParam)
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)
struct CTaskSwitchWnd::tagRUDEAPPDATA RUDEAPPDATA
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)
LRESULT OnActivateTaskIndex(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
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)
struct CTaskSwitchWnd::tagFULLSCREENDATA FULLSCREENDATA
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
HWND FindRudeApp(_In_opt_ HWND hwndFirstCheck)
struct CTaskSwitchWnd::tagRUDEAPPDATA * PRUDEAPPDATA
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)
void HandleFullScreenApp(_In_opt_ HWND hwndRude)
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
void OnWindowDestroyed(_In_ HWND hwndTarget)
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)
void OnWindowActivated(_In_ HWND hwndTarget)
BOOL HandleButtonRightClick(IN WORD wIndex)
struct CTaskSwitchWnd::tagFULLSCREENDATA * PFULLSCREENDATA
BOOL AddTask(IN HWND hWnd)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
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)
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
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 GetModuleFileNameExW(w, x, y, z)
#define HeapFree(x, y, z)
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
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)
LONG WINAPI SHRegCloseUSKey(HUSKEY hUSKey)
LONG WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len, BOOL ignore_hkcu, void *default_data, DWORD default_data_len)
LONG WINAPI SHRegOpenUSKeyW(const WCHAR *path, REGSAM access_mask, HUSKEY relative_key, HUSKEY *uskey, BOOL ignore_hkcu)
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
#define FAILED_UNEXPECTEDLY
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)
BOOL WINAPI IsThemeActive(void)
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR pszClassList)
BOOL WINAPI IsAppThemed(void)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
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 PROCESS_QUERY_INFORMATION
#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)
_In_ BOOL _In_ HANDLE hProcess
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
HMONITOR WINAPI MonitorFromWindow(HWND, DWORD)
static HANDLE ULONG_PTR dwData
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
DWORD WINAPI GetSysColor(_In_ int)
#define HSHELL_RUDEAPPACTIVATED
#define GetWindowLongPtrW
#define HSHELL_ACTIVATESHELLWINDOW
HWND WINAPI GetForegroundWindow(void)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HSHELL_WINDOWDESTROYED
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define HSHELL_WINDOWCREATED
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
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)
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
#define PostThreadMessage
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
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)
HWND WINAPI GetDesktopWindow(void)
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)
#define COLOR_HIGHLIGHTTEXT
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
HWND WINAPI GetParent(_In_ HWND)
#define SWP_NOOWNERZORDER
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
#define MAKEINTRESOURCEW(i)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
BOOL WINAPI UnionRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
INT WINAPI InternalGetWindowText(_In_ HWND hWnd, _Out_writes_to_(cchMaxCount, return+1) LPWSTR pString, _In_ int cchMaxCount)
#define WM_WINDOWPOSCHANGED
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#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)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
PULONG MinorVersion OPTIONAL
struct _TASK_GROUP * Next
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
struct _TASK_ITEM * PTASK_ITEM
#define VALIDATE_RUDE_MAX_COUNT
static BOOL SHELL_IsRudeWindowActive(_In_ HWND hWnd)
static BOOL SHELL_GetImageFileNameByWindow(_In_ HWND hWnd, _Out_cap_(cchPath) LPWSTR pszPath, _In_ DWORD cchPath)
static BOOL SHELL_GetMonitorRect(_In_opt_ HMONITOR hMonitor, _Out_opt_ PRECT prcDest, _In_ BOOL bWorkAreaOnly)
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[]
#define TIMER_ID_VALIDATE_RUDE_APP
const WCHAR szRunningApps[]
#define VALIDATE_RUDE_INTERVAL
static BOOL SHELL_IsParentOwnerOrSelf(_In_ HWND hwndTarget, _In_ HWND hWnd)
static BOOL SHELL_IsRudeWindow(_In_opt_ HMONITOR hMonitor, _In_ HWND hWnd, _In_ BOOL bDontCheckActive)
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)