windows-nt/Source/XPSP1/NT/enduser/windows.com/wuau/wuauclt/wuauclt.h
2020-09-26 16:20:57 +08:00

164 lines
5 KiB
C++

#pragma once
#include "auinternals.h"
#include "resource.h"
class AUCLTTopWindows
{
public:
AUCLTTopWindows(): m_uNum(0)
{
ZeroMemory(m_hwnds, sizeof(m_hwnds));
}
void Add(HWND hwnd) {
if (NULL != hwnd)
{
m_hwnds[m_uNum++] = hwnd;
}
}
BOOL Remove(HWND hwnd){
if (NULL == hwnd)
{
return FALSE;
}
for (UINT u = 0 ; u < m_uNum; u++)
{
if (hwnd == m_hwnds[u])
{
m_hwnds[u] = m_hwnds[m_uNum-1];
m_hwnds[m_uNum-1] = NULL;
m_uNum--;
return TRUE;
}
}
return FALSE;
}
void Dismiss(void)
{
DEBUGMSG("WUAUCLT dismiss %d dialogs", m_uNum);
UINT uNum = m_uNum; //extra variable needed because m_uNum will change once a dialog is dismissed
HWND hwnds[ARRAYSIZE(m_hwnds)];
for (UINT u = 0; u < uNum; u++)
{
hwnds[u] = m_hwnds[u];
}
for (UINT u = 0; u < uNum; u++)
{
#ifdef DBG
// TCHAR buf[100];
// GetWindowText(hwnds[u], buf, 100);
// DEBUGMSG("Dismiss dialog %S", buf);
#endif
EndDialog(hwnds[u], S_OK);
}
m_uNum = 0;
ZeroMemory(m_hwnds, sizeof(m_hwnds));
}
private:
UINT m_uNum; //number of top wuauclt windows
HWND m_hwnds[2]; //maximum 2 top windows at the same time
};
#define QUITAUClient() { PostMessage(ghMainWindow, WM_CLOSE, 0, 0); }
// Global Data Items
extern CAUInternals* gInternals;
extern UINT guExitProcess;
extern CRITICAL_SECTION gcsClient;
extern LPCTSTR gtszAUSchedInstallUrl;
extern LPCTSTR gtszAUPrivacyUrl;
// Global UI Items
extern HINSTANCE ghInstance;
extern HFONT ghHeaderFont;
extern HWND ghMainWindow;
extern HWND ghCurrentDialog;
extern HWND ghCurrentMainDlg;
extern AUCLTTopWindows gTopWins;
extern HMENU ghCurrentMenu;
extern HMENU ghPauseMenu;
extern HMENU ghResumeMenu;
extern HICON ghAppIcon;
extern HICON ghAppSmIcon;
extern HICON ghTrayIcon;
extern HHOOK ghHook;
extern HACCEL ghCurrentAccel;
extern HCURSOR ghCursorHand;
extern HCURSOR ghCursorNormal;
//extern AUCatalogItemList gItemList;
struct ReminderItem
{
DWORD timeout;
WORD stringResId;
};
//IMPORTANT: Change constants below if you change ReminderItems constant
extern const ReminderItem ReminderTimes[];
typedef enum tagTIMEOUTINDEX
{
TIMEOUT_INX_MIN = 0,
TIMEOUT_INX_THIRTY_MINS = 0,
TIMEOUT_INX_ONE_HOUR = 1,
TIMEOUT_INX_TWO_HOURS = 2,
TIMEOUT_INX_FOUR_HOURS = 3,
TIMEOUT_INX_TOMORROW = 4,
TIMEOUT_INX_THREE_DAYS = 5,
TIMEOUT_INX_COUNT = 6
} TIMEOUTINDEX;
extern LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
extern void InitTrayIcon();
extern void UninitPopupMenus();
extern BOOL ShowTrayIcon();
extern void ShowTrayBalloon(WORD, WORD, WORD );
//extern void AddTrayToolTip(WORD tip);
extern void RemoveTrayIcon();
extern void ShowProgress();
extern void QuitNRemind(TIMEOUTINDEX enTimeoutIndex);
extern LPTSTR ResStrFromId(UINT uStrId);
extern UINT ControlId2StringId(UINT uCtrlId);
extern LRESULT CALLBACK AUTranslatorProc(int code, WPARAM wParam, LPARAM lParam);
extern BOOL CALLBACK InstallDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK SummaryDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK DetailsDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK ProgressDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK SettingsDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK InstallCompleteDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK RestartDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK WizardFrameProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK WelcomeDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK NotificationOptionsDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK SetupCompleteDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK DownloadDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK ReminderDlgProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK SetupCancelDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
inline void ShowSettingsDlg(HWND hWndOwner)
{
DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_SETTINGS), hWndOwner, (DLGPROC)SettingsDlgProc, (LPARAM)ghInstance);
}
void SetClientExitCode(UINT uExitCode);
inline UINT GetClientExitCode()
{
return guExitProcess;
}
extern LRESULT CALLBACK CustomLBWndProc(HWND, UINT, WPARAM, LPARAM);
extern BOOL fDisableSelection(void);
//extern void SaveSelection();
//Index for the events in main loop
const ISTATE_CHANGE = 0;
const IMESSAGE = 1;
const CNUM_EVENTS = 1;