mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-18 09:04:27 -04:00
[net] Check for application update (part 4)
* Also improve Windows version check
This commit is contained in:
parent
8506e47fd3
commit
eed0b78ff0
8 changed files with 165 additions and 102 deletions
|
@ -85,8 +85,20 @@ const char* additional_copyrights =
|
||||||
"All other references can be found in the source.\\line\n}";
|
"All other references can be found in the source.\\line\n}";
|
||||||
|
|
||||||
const char* update_policy =
|
const char* update_policy =
|
||||||
"{\\rtf1\\ansi\n"
|
"{\\rtf1\\ansi{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil\\fcharset2 Symbol;}}\n"
|
||||||
"Hey sexy mama, Wanna kill all humans?}";
|
"\\fs16\\b Update Policy\\b0\\line\\line\n"
|
||||||
|
"If you choose to allow update checks, you agree that the following information may be collected on our server(s):\\par\n"
|
||||||
|
"\\pard{\\pntext\\f1\\'B7\\tab}{\\*\\pn\\pnlvlblt\\pnf2\\pnindent0{\\pntxtb\\'B7}}\\fi-150\\li220 Your Operating System's architecture and version\\par\n"
|
||||||
|
"{\\pntext\\f1\\'B7\\tab}The version of the application\\par\n"
|
||||||
|
"{\\pntext\\f1\\'B7\\tab}Your IP address\\line\\pard\n"
|
||||||
|
"\\line\n"
|
||||||
|
"\\b None\\b0 of the data above will be disclosed to third parties.\\line\n"
|
||||||
|
"However we reserve the right to keep the information collected, for at most a year, \n"
|
||||||
|
"for the purpose of generating private usage statistics.\\line\n\\line\n"
|
||||||
|
"\\b Update Process\\b0\\line\\line\n"
|
||||||
|
APPLICATION_NAME " does not install or run any background services, therefore update checks are only performed when the main application is running. \n"
|
||||||
|
"Internet access is required when checking for new versions.\n"
|
||||||
|
"}";
|
||||||
|
|
||||||
const char* gplv3 =
|
const char* gplv3 =
|
||||||
" GNU GENERAL PUBLIC LICENSE\r\n"
|
" GNU GENERAL PUBLIC LICENSE\r\n"
|
||||||
|
|
|
@ -387,10 +387,11 @@ DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
// Sleep(15000);
|
// Sleep(15000);
|
||||||
|
|
||||||
// verbose = ReadRegistryKey32(REGKEY_VERBOSE_UPDATES);
|
// verbose = ReadRegistryKey32(REGKEY_VERBOSE_UPDATES);
|
||||||
if (GetRegistryKeyBool(REGKEY_DISABLE_UPDATES)) {
|
// TODO: reenable this
|
||||||
vuprintf("Check for updates disabled, as per registry settings.\n");
|
// if (GetRegistryKeyBool(REGKEY_DISABLE_UPDATES)) {
|
||||||
return FALSE;
|
// vuprintf("Check for updates disabled, as per registry settings.\n");
|
||||||
}
|
// return FALSE;
|
||||||
|
// }
|
||||||
reg_time = ReadRegistryKey64(REGKEY_LAST_UPDATE);
|
reg_time = ReadRegistryKey64(REGKEY_LAST_UPDATE);
|
||||||
update_interval = (int64_t)ReadRegistryKey32(REGKEY_UPDATE_INTERVAL);
|
update_interval = (int64_t)ReadRegistryKey32(REGKEY_UPDATE_INTERVAL);
|
||||||
if (update_interval == 0) {
|
if (update_interval == 0) {
|
||||||
|
|
|
@ -31,12 +31,13 @@ extern "C" {
|
||||||
* These keys go into HKCU\Software\COMPANY_NAME\APPLICATION_NAME\
|
* These keys go into HKCU\Software\COMPANY_NAME\APPLICATION_NAME\
|
||||||
*/
|
*/
|
||||||
#define REGKEY_VERBOSE_UPDATES "VerboseUpdateCheck"
|
#define REGKEY_VERBOSE_UPDATES "VerboseUpdateCheck"
|
||||||
#define REGKEY_DISABLE_UPDATES "DisableUpdateCheck"
|
|
||||||
#define REGKEY_LAST_UPDATE "LastUpdateCheck"
|
#define REGKEY_LAST_UPDATE "LastUpdateCheck"
|
||||||
#define REGKEY_UPDATE_INTERVAL "UpdateCheckInterval"
|
#define REGKEY_UPDATE_INTERVAL "UpdateCheckInterval"
|
||||||
#define REGKEY_LAST_VERSION_SEEN "LastVersionSeen"
|
#define REGKEY_LAST_VERSION_SEEN "LastVersionSeen"
|
||||||
|
#define REGKEY_INCLUDE_BETAS "CheckForBetas"
|
||||||
|
#define REGKEY_COMM_CHECK "CommCheck"
|
||||||
|
|
||||||
/* Delete a registry key from HKCU\Software and all its subkeys
|
/* Delete a registry key from HKCU\Software and all its values
|
||||||
If the key has subkeys, this call will fail. */
|
If the key has subkeys, this call will fail. */
|
||||||
static __inline BOOL DeleteRegistryKey(const char* key_name)
|
static __inline BOOL DeleteRegistryKey(const char* key_name)
|
||||||
{
|
{
|
||||||
|
@ -117,9 +118,9 @@ static __inline int64_t ReadRegistryKey64(const char* key) {
|
||||||
GetRegistryKey64(key, &val);
|
GetRegistryKey64(key, &val);
|
||||||
return (int64_t)val;
|
return (int64_t)val;
|
||||||
}
|
}
|
||||||
static __inline void WriteRegistryKey64(const char* key, int64_t val) {
|
static __inline BOOL WriteRegistryKey64(const char* key, int64_t val) {
|
||||||
LONGLONG tmp = (LONGLONG)val;
|
LONGLONG tmp = (LONGLONG)val;
|
||||||
SetRegistryKey64(key, tmp);
|
return SetRegistryKey64(key, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helpers for 32 bit registry operations */
|
/* Helpers for 32 bit registry operations */
|
||||||
|
@ -134,14 +135,14 @@ static __inline int32_t ReadRegistryKey32(const char* key) {
|
||||||
GetRegistryKey32(key, &val);
|
GetRegistryKey32(key, &val);
|
||||||
return (int32_t)val;
|
return (int32_t)val;
|
||||||
}
|
}
|
||||||
static __inline void WriteRegistryKey32(const char* key, int32_t val) {
|
static __inline BOOL WriteRegistryKey32(const char* key, int32_t val) {
|
||||||
DWORD tmp = (DWORD)val;
|
DWORD tmp = (DWORD)val;
|
||||||
SetRegistryKey32(key, tmp);
|
return SetRegistryKey32(key, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helpers for boolean registry operations */
|
/* Helpers for boolean registry operations */
|
||||||
#define GetRegistryKeyBool(key) (ReadRegistryKey32(key) != 0)
|
#define GetRegistryKeyBool(key) (ReadRegistryKey32(key) != 0)
|
||||||
#define SetRegistryKeyBool(key) WriteRegistryKey32(key, 1)
|
#define SetRegistryKeyBool(key, b) WriteRegistryKey32(key, (b)?1:0)
|
||||||
#define CheckRegistryKeyBool CheckRegistryKey32
|
#define CheckRegistryKeyBool CheckRegistryKey32
|
||||||
|
|
||||||
/* Helpers for String registry operations */
|
/* Helpers for String registry operations */
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
#define IDC_EXTRA_PARTITION 1023
|
#define IDC_EXTRA_PARTITION 1023
|
||||||
#define IDC_ABOUT_LICENSE 1030
|
#define IDC_ABOUT_LICENSE 1030
|
||||||
#define IDC_ABOUT_ICON 1031
|
#define IDC_ABOUT_ICON 1031
|
||||||
|
#define IDC_ABOUT_UPDATES 1032
|
||||||
#define IDC_ABOUT_COPYRIGHTS 1033
|
#define IDC_ABOUT_COPYRIGHTS 1033
|
||||||
#define IDC_LICENSE_TEXT 1036
|
#define IDC_LICENSE_TEXT 1036
|
||||||
#define IDC_NOTIFICATION_ICON 1040
|
#define IDC_NOTIFICATION_ICON 1040
|
||||||
|
@ -81,7 +82,7 @@
|
||||||
#define IDC_LOG_SAVE 1051
|
#define IDC_LOG_SAVE 1051
|
||||||
#define IDC_LOG_CLEAR 1052
|
#define IDC_LOG_CLEAR 1052
|
||||||
#define IDC_MORE_INFO 1060
|
#define IDC_MORE_INFO 1060
|
||||||
#define IDC_UPDATES_POLICY 1061
|
#define IDC_POLICY 1061
|
||||||
#define IDC_UPDATE_FREQUENCY 1062
|
#define IDC_UPDATE_FREQUENCY 1062
|
||||||
#define IDC_INCLUDE_BETAS 1063
|
#define IDC_INCLUDE_BETAS 1063
|
||||||
#define IDC_ABOUT_BLURB 1064
|
#define IDC_ABOUT_BLURB 1064
|
||||||
|
|
34
src/rufus.c
34
src/rufus.c
|
@ -1496,7 +1496,7 @@ void InitDialog(HWND hDlg)
|
||||||
CreateTooltip(hClusterSize, "Minimum size that each data block occupies", -1);
|
CreateTooltip(hClusterSize, "Minimum size that each data block occupies", -1);
|
||||||
CreateTooltip(hLabel, "Use this field to set the drive label\nInternational characters are accepted", -1);
|
CreateTooltip(hLabel, "Use this field to set the drive label\nInternational characters are accepted", -1);
|
||||||
CreateTooltip(GetDlgItem(hDlg, IDC_ADVANCED), "Toggle advanced options", -1);
|
CreateTooltip(GetDlgItem(hDlg, IDC_ADVANCED), "Toggle advanced options", -1);
|
||||||
CreateTooltip(GetDlgItem(hDlg, IDC_BADBLOCKS), "Test the device for bad blocks using a set byte pattern", -1);
|
CreateTooltip(GetDlgItem(hDlg, IDC_BADBLOCKS), "Test the device for bad blocks using a byte pattern", -1);
|
||||||
CreateTooltip(GetDlgItem(hDlg, IDC_QUICKFORMAT), "Unchek this box to use the \"slow\" format method", -1);
|
CreateTooltip(GetDlgItem(hDlg, IDC_QUICKFORMAT), "Unchek this box to use the \"slow\" format method", -1);
|
||||||
CreateTooltip(hDOS, "Check this box to make the USB drive bootable", -1);
|
CreateTooltip(hDOS, "Check this box to make the USB drive bootable", -1);
|
||||||
CreateTooltip(hDOSType, "Boot method", -1);
|
CreateTooltip(hDOSType, "Boot method", -1);
|
||||||
|
@ -1528,6 +1528,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
wchar_t wtmp[128], wstr[MAX_PATH];
|
wchar_t wtmp[128], wstr[MAX_PATH];
|
||||||
static UINT uDOSChecked = BST_CHECKED, uQFChecked;
|
static UINT uDOSChecked = BST_CHECKED, uQFChecked;
|
||||||
static BOOL first_log_display = TRUE, user_changed_label = FALSE;
|
static BOOL first_log_display = TRUE, user_changed_label = FALSE;
|
||||||
|
notification_info more_info = { IDD_UPDATE_POLICY, UpdateCallback };
|
||||||
|
|
||||||
switch (message) {
|
switch (message) {
|
||||||
|
|
||||||
|
@ -1541,6 +1542,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
|
SetUpdateCheck();
|
||||||
// Create the log window (hidden)
|
// Create the log window (hidden)
|
||||||
hLogDlg = CreateDialogA(hMainInstance, MAKEINTRESOURCEA(IDD_LOG), hDlg, (DLGPROC)LogProc);
|
hLogDlg = CreateDialogA(hMainInstance, MAKEINTRESOURCEA(IDD_LOG), hDlg, (DLGPROC)LogProc);
|
||||||
InitDialog(hDlg);
|
InitDialog(hDlg);
|
||||||
|
@ -1627,20 +1629,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
break;
|
break;
|
||||||
#ifdef RUFUS_TEST
|
#ifdef RUFUS_TEST
|
||||||
case IDC_TEST:
|
case IDC_TEST:
|
||||||
testme = Notification(MSG_QUESTION, IDD_UPDATE_POLICY, UpdateCallback,
|
|
||||||
"Rufus updates", "Do you want to allow " APPLICATION_NAME " to check for updates?\n");
|
|
||||||
uprintf("User said %s\n", testme?"YES":"NO");
|
|
||||||
// CheckForUpdates();
|
|
||||||
/*
|
|
||||||
InitProgress();
|
|
||||||
if (!IsWindow(hISOProgressDlg)) {
|
|
||||||
hISOProgressDlg = CreateDialogA(hMainInstance, MAKEINTRESOURCEA(IDD_ISO_EXTRACT),
|
|
||||||
hDlg, (DLGPROC)ISOProc);
|
|
||||||
// The window is not visible by default but takes focus => restore it
|
|
||||||
SetFocus(hDlg);
|
|
||||||
}
|
|
||||||
DownloadFile("http://cloud.github.com/downloads/pbatard/rufus/vesamenu.c32", "vesamenu.c32");
|
|
||||||
*/
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case IDC_ADVANCED:
|
case IDC_ADVANCED:
|
||||||
|
@ -1904,12 +1892,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
||||||
SetTaskbarProgressState(TASKBAR_PAUSED);
|
SetTaskbarProgressState(TASKBAR_PAUSED);
|
||||||
PrintStatus(0, FALSE, "Cancelled");
|
PrintStatus(0, FALSE, "Cancelled");
|
||||||
Notification(MSG_INFO, 0, NULL, "Cancelled", "Operation cancelled by the user.");
|
Notification(MSG_INFO, NULL, "Cancelled", "Operation cancelled by the user.");
|
||||||
} else {
|
} else {
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||||
PrintStatus(0, FALSE, "FAILED");
|
PrintStatus(0, FALSE, "FAILED");
|
||||||
Notification(MSG_ERROR, 0, NULL, "Error", "Error: %s.%s", StrError(FormatStatus),
|
Notification(MSG_ERROR, NULL, "Error", "Error: %s.%s", StrError(FormatStatus),
|
||||||
(strchr(StrError(FormatStatus), '\n') != NULL)?"":"\nFor more information, please check the log.");
|
(strchr(StrError(FormatStatus), '\n') != NULL)?"":"\nFor more information, please check the log.");
|
||||||
}
|
}
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
|
@ -1944,17 +1932,17 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
// Initialize COM for folder selection
|
// Initialize COM for folder selection
|
||||||
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||||
|
|
||||||
// Retrieve the current application directory
|
|
||||||
GetCurrentDirectoryU(MAX_PATH, app_dir);
|
|
||||||
|
|
||||||
// Set the Windows version
|
|
||||||
DetectWindowsVersion();
|
|
||||||
|
|
||||||
// Some dialogs have Rich Edit controls and won't display without this
|
// Some dialogs have Rich Edit controls and won't display without this
|
||||||
if (LoadLibraryA("Riched20.dll") == NULL) {
|
if (LoadLibraryA("Riched20.dll") == NULL) {
|
||||||
uprintf("Could not load RichEdit library - some dialogs may not display: %s\n", WindowsErrorString());
|
uprintf("Could not load RichEdit library - some dialogs may not display: %s\n", WindowsErrorString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Retrieve the current application directory
|
||||||
|
GetCurrentDirectoryU(MAX_PATH, app_dir);
|
||||||
|
|
||||||
|
// Set the Windows version
|
||||||
|
nWindowsVersion = DetectWindowsVersion();
|
||||||
|
|
||||||
// We use local group policies rather than direct registry manipulation
|
// We use local group policies rather than direct registry manipulation
|
||||||
// 0x9e disables removable and fixed drive notifications
|
// 0x9e disables removable and fixed drive notifications
|
||||||
SetLGP(FALSE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e);
|
SetLGP(FALSE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e);
|
||||||
|
|
17
src/rufus.h
17
src/rufus.h
|
@ -24,7 +24,7 @@
|
||||||
/* Program options */
|
/* Program options */
|
||||||
#define RUFUS_DEBUG // print debug info to Debug facility
|
#define RUFUS_DEBUG // print debug info to Debug facility
|
||||||
/* Features not ready for prime time and that may *DESTROY* your data - USE AT YOUR OWN RISKS! */
|
/* Features not ready for prime time and that may *DESTROY* your data - USE AT YOUR OWN RISKS! */
|
||||||
#define RUFUS_TEST
|
//#define RUFUS_TEST
|
||||||
|
|
||||||
#define APPLICATION_NAME "Rufus"
|
#define APPLICATION_NAME "Rufus"
|
||||||
#define COMPANY_NAME "Akeo Consulting"
|
#define COMPANY_NAME "Akeo Consulting"
|
||||||
|
@ -96,6 +96,10 @@ enum notification_type {
|
||||||
MSG_QUESTION,
|
MSG_QUESTION,
|
||||||
};
|
};
|
||||||
typedef INT_PTR (CALLBACK *Callback_t)(HWND, UINT, WPARAM, LPARAM);
|
typedef INT_PTR (CALLBACK *Callback_t)(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
typedef struct {
|
||||||
|
WORD id;
|
||||||
|
Callback_t callback;
|
||||||
|
} notification_info; // To provide a "More info..." on notifications
|
||||||
|
|
||||||
/* Timers used throughout the program */
|
/* Timers used throughout the program */
|
||||||
enum timer_type {
|
enum timer_type {
|
||||||
|
@ -182,12 +186,12 @@ typedef enum TASKBAR_PROGRESS_FLAGS
|
||||||
enum WindowsVersion {
|
enum WindowsVersion {
|
||||||
WINDOWS_UNDEFINED,
|
WINDOWS_UNDEFINED,
|
||||||
WINDOWS_UNSUPPORTED,
|
WINDOWS_UNSUPPORTED,
|
||||||
WINDOWS_2K,
|
|
||||||
WINDOWS_XP,
|
WINDOWS_XP,
|
||||||
WINDOWS_2003_XP64,
|
WINDOWS_2003,
|
||||||
WINDOWS_VISTA,
|
WINDOWS_VISTA,
|
||||||
WINDOWS_7,
|
WINDOWS_7,
|
||||||
WINDOWS_8
|
WINDOWS_8,
|
||||||
|
WINDOWS_9
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -212,7 +216,7 @@ extern enum WindowsVersion nWindowsVersion;
|
||||||
/*
|
/*
|
||||||
* Shared prototypes
|
* Shared prototypes
|
||||||
*/
|
*/
|
||||||
extern void DetectWindowsVersion(void);
|
extern enum WindowsVersion DetectWindowsVersion(void);
|
||||||
extern const char *WindowsErrorString(void);
|
extern const char *WindowsErrorString(void);
|
||||||
extern void DumpBufferHex(void *buf, size_t size);
|
extern void DumpBufferHex(void *buf, size_t size);
|
||||||
extern void PrintStatus(unsigned int duration, BOOL debug, const char *format, ...);
|
extern void PrintStatus(unsigned int duration, BOOL debug, const char *format, ...);
|
||||||
|
@ -227,7 +231,7 @@ extern INT_PTR CreateAboutBox(void);
|
||||||
extern BOOL CreateTooltip(HWND hControl, const char* message, int duration);
|
extern BOOL CreateTooltip(HWND hControl, const char* message, int duration);
|
||||||
extern void DestroyTooltip(HWND hWnd);
|
extern void DestroyTooltip(HWND hWnd);
|
||||||
extern void DestroyAllTooltips(void);
|
extern void DestroyAllTooltips(void);
|
||||||
extern BOOL Notification(int type, WORD extra_id, Callback_t extra_callback, char* title, char* format, ...);
|
extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...);
|
||||||
extern BOOL Question(char* title, char* format, ...);
|
extern BOOL Question(char* title, char* format, ...);
|
||||||
extern BOOL ExtractDOS(const char* path);
|
extern BOOL ExtractDOS(const char* path);
|
||||||
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
||||||
|
@ -245,6 +249,7 @@ extern BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size);
|
||||||
extern LONG GetEntryWidth(HWND hDropDown, const char* entry);
|
extern LONG GetEntryWidth(HWND hDropDown, const char* entry);
|
||||||
extern BOOL DownloadFile(const char* url, const char* file);
|
extern BOOL DownloadFile(const char* url, const char* file);
|
||||||
extern INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
extern INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
extern BOOL SetUpdateCheck(void);
|
||||||
extern BOOL CheckForUpdates(void);
|
extern BOOL CheckForUpdates(void);
|
||||||
extern BOOL IsShown(HWND hDlg);
|
extern BOOL IsShown(HWND hDlg);
|
||||||
extern char* get_token_data_file(const char* token, const char* filename);
|
extern char* get_token_data_file(const char* token, const char* filename);
|
||||||
|
|
39
src/rufus.rc
39
src/rufus.rc
|
@ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 316
|
IDD_DIALOG DIALOGEX 12, 12, 206, 316
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_APPWINDOW
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
CAPTION "Rufus v1.2.1.200"
|
CAPTION "Rufus v1.2.1.201"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,278,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,278,50,14
|
||||||
|
@ -73,9 +73,10 @@ FONT 8, "Microsoft Sans Serif", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON IDI_ICON,IDC_ABOUT_ICON,11,8,20,20
|
ICON IDI_ICON,IDC_ABOUT_ICON,11,8,20,20
|
||||||
DEFPUSHBUTTON "OK",IDOK,231,181,50,14,WS_GROUP
|
DEFPUSHBUTTON "OK",IDOK,231,181,50,14,WS_GROUP
|
||||||
PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,181,50,14,WS_GROUP
|
PUSHBUTTON "License",IDC_ABOUT_LICENSE,46,181,50,14,WS_GROUP
|
||||||
CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",WS_VSCROLL | 0x804,46,101,235,74,WS_EX_STATICEDGE
|
CONTROL "",IDC_ABOUT_COPYRIGHTS,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,101,235,74,WS_EX_STATICEDGE
|
||||||
CONTROL "",IDC_ABOUT_BLURB,"RichEdit20W",WS_TABSTOP | 0x884,46,7,235,93
|
CONTROL "",IDC_ABOUT_BLURB,"RichEdit20W",ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | WS_TABSTOP,46,7,235,93
|
||||||
|
PUSHBUTTON "Updates",IDC_ABOUT_UPDATES,100,181,50,14,NOT WS_VISIBLE | WS_GROUP
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_ISO_EXTRACT DIALOGEX 0, 0, 262, 66
|
IDD_ISO_EXTRACT DIALOGEX 0, 0, 262, 66
|
||||||
|
@ -117,24 +118,24 @@ BEGIN
|
||||||
CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,0,0,263,38
|
CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,0,0,263,38
|
||||||
ICON 32516,IDC_NOTIFICATION_ICON,6,6,20,20
|
ICON 32516,IDC_NOTIFICATION_ICON,6,6,20,20
|
||||||
LTEXT "",IDC_NOTIFICATION_TEXT,35,10,219,20
|
LTEXT "",IDC_NOTIFICATION_TEXT,35,10,219,20
|
||||||
DEFPUSHBUTTON "No",IDNO,211,44,50,14
|
DEFPUSHBUTTON "No",IDNO,206,44,50,14
|
||||||
DEFPUSHBUTTON "More info...",IDC_MORE_INFO,8,44,50,14,NOT WS_VISIBLE
|
DEFPUSHBUTTON "More info...",IDC_MORE_INFO,8,44,50,14,NOT WS_VISIBLE
|
||||||
DEFPUSHBUTTON "Yes",IDYES,159,44,50,14,NOT WS_VISIBLE
|
DEFPUSHBUTTON "Yes",IDYES,154,44,50,14,NOT WS_VISIBLE
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 195
|
IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 198
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Update policy and settings"
|
CAPTION "Update policy and settings"
|
||||||
FONT 8, "Microsoft Sans Serif", 400, 0, 0x0
|
FONT 8, "Microsoft Sans Serif", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON IDI_ICON,IDC_ABOUT_ICON,11,8,20,20
|
ICON IDI_ICON,IDC_ABOUT_ICON,11,8,21,20
|
||||||
DEFPUSHBUTTON "OK",IDOK,231,166,50,14,WS_GROUP
|
DEFPUSHBUTTON "Close",IDCLOSE,229,176,50,14,WS_GROUP
|
||||||
CONTROL "",IDC_UPDATES_POLICY,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,8,235,130,WS_EX_STATICEDGE
|
CONTROL "",IDC_POLICY,"RichEdit20W",ES_MULTILINE | ES_READONLY | WS_VSCROLL,46,8,235,130,WS_EX_STATICEDGE
|
||||||
COMBOBOX IDC_UPDATE_FREQUENCY,121,150,66,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_UPDATE_FREQUENCY,145,155,66,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Check for updates:",IDC_STATIC,52,152,61,11
|
LTEXT "Check for updates (at most):",IDC_STATIC,52,157,92,11
|
||||||
LTEXT "Include beta versions:",IDC_STATIC,52,168,75,11
|
LTEXT "Include beta versions:",IDC_STATIC,52,173,93,11
|
||||||
COMBOBOX IDC_INCLUDE_BETAS,151,166,36,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_INCLUDE_BETAS,145,171,36,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
GROUPBOX "Settings",IDC_STATIC,46,140,149,43
|
GROUPBOX "Settings",IDC_STATIC,46,145,173,45
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
@ -248,8 +249,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,2,1,200
|
FILEVERSION 1,2,1,201
|
||||||
PRODUCTVERSION 1,2,1,200
|
PRODUCTVERSION 1,2,1,201
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -266,13 +267,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "1.2.1.200"
|
VALUE "FileVersion", "1.2.1.201"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "(c) 2011-2012 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "(c) 2011-2012 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "1.2.1.200"
|
VALUE "ProductVersion", "1.2.1.201"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
134
src/stdlg.c
134
src/stdlg.c
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
#include "rufus.h"
|
#include "rufus.h"
|
||||||
#include "msapi_utf8.h"
|
#include "msapi_utf8.h"
|
||||||
|
#include "registry.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "license.h"
|
#include "license.h"
|
||||||
|
|
||||||
|
@ -60,41 +61,43 @@ static LPITEMIDLIST (WINAPI *pSHSimpleIDListFromPath)(PCWSTR pszPath) = NULL;
|
||||||
static HICON hMessageIcon = (HICON)INVALID_HANDLE_VALUE;
|
static HICON hMessageIcon = (HICON)INVALID_HANDLE_VALUE;
|
||||||
static char* szMessageText = NULL;
|
static char* szMessageText = NULL;
|
||||||
static char* szMessageTitle = NULL;
|
static char* szMessageTitle = NULL;
|
||||||
enum WindowsVersion nWindowsVersion = WINDOWS_UNSUPPORTED;
|
enum WindowsVersion nWindowsVersion = WINDOWS_UNDEFINED;
|
||||||
static HWND hBrowseEdit;
|
static HWND hBrowseEdit;
|
||||||
static WNDPROC pOrgBrowseWndproc;
|
static WNDPROC pOrgBrowseWndproc;
|
||||||
static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8};
|
static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8};
|
||||||
static BOOL notification_is_question;
|
static BOOL notification_is_question;
|
||||||
static WORD notification_info_id;
|
static const notification_info* notification_more_info;
|
||||||
static Callback_t notification_info_callback;
|
static BOOL reg_commcheck = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Detect Windows version
|
* Detect Windows version
|
||||||
*/
|
*/
|
||||||
void DetectWindowsVersion(void)
|
enum WindowsVersion DetectWindowsVersion(void)
|
||||||
{
|
{
|
||||||
OSVERSIONINFO OSVersion;
|
OSVERSIONINFO OSVersion;
|
||||||
|
|
||||||
memset(&OSVersion, 0, sizeof(OSVERSIONINFO));
|
memset(&OSVersion, 0, sizeof(OSVERSIONINFO));
|
||||||
OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||||
nWindowsVersion = WINDOWS_UNSUPPORTED;
|
if (GetVersionEx(&OSVersion) == 0)
|
||||||
if ((GetVersionEx(&OSVersion) != 0) && (OSVersion.dwPlatformId == VER_PLATFORM_WIN32_NT)) {
|
return WINDOWS_UNDEFINED;
|
||||||
if ((OSVersion.dwMajorVersion == 5) && (OSVersion.dwMinorVersion == 0)) {
|
if (OSVersion.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
||||||
nWindowsVersion = WINDOWS_2K;
|
return WINDOWS_UNSUPPORTED;
|
||||||
} else if ((OSVersion.dwMajorVersion == 5) && (OSVersion.dwMinorVersion == 1)) {
|
// See the Remarks section from http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833.aspx
|
||||||
nWindowsVersion = WINDOWS_XP;
|
if ((OSVersion.dwMajorVersion < 5) || ((OSVersion.dwMajorVersion == 5) && (OSVersion.dwMinorVersion == 0)))
|
||||||
} else if ((OSVersion.dwMajorVersion == 5) && (OSVersion.dwMinorVersion == 2)) {
|
return WINDOWS_UNSUPPORTED; // Win2k or earlier
|
||||||
nWindowsVersion = WINDOWS_2003_XP64;
|
if ((OSVersion.dwMajorVersion == 5) && (OSVersion.dwMinorVersion == 1))
|
||||||
} else if (OSVersion.dwMajorVersion == 6) {
|
return WINDOWS_XP;
|
||||||
if (OSVersion.dwBuildNumber < 7000) {
|
if ((OSVersion.dwMajorVersion == 5) && (OSVersion.dwMinorVersion == 2))
|
||||||
nWindowsVersion = WINDOWS_VISTA;
|
return WINDOWS_2003;
|
||||||
} else {
|
if ((OSVersion.dwMajorVersion == 6) && (OSVersion.dwMinorVersion == 0))
|
||||||
nWindowsVersion = WINDOWS_7;
|
return WINDOWS_VISTA;
|
||||||
}
|
if ((OSVersion.dwMajorVersion == 6) && (OSVersion.dwMinorVersion == 1))
|
||||||
} else if (OSVersion.dwMajorVersion >= 8) {
|
return WINDOWS_7;
|
||||||
nWindowsVersion = WINDOWS_8;
|
if ((OSVersion.dwMajorVersion == 6) && (OSVersion.dwMinorVersion == 2))
|
||||||
}
|
return WINDOWS_8;
|
||||||
}
|
if ((OSVersion.dwMajorVersion > 6) || ((OSVersion.dwMajorVersion == 6) && (OSVersion.dwMinorVersion >= 3)))
|
||||||
|
return WINDOWS_9;
|
||||||
|
return WINDOWS_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -660,6 +663,8 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
|
||||||
switch (message) {
|
switch (message) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
CenterDialog(hDlg);
|
CenterDialog(hDlg);
|
||||||
|
if (reg_commcheck)
|
||||||
|
ShowWindow(GetDlgItem(hDlg, IDC_ABOUT_UPDATES), SW_SHOW);
|
||||||
safe_sprintf(about_blurb, sizeof(about_blurb), about_blurb_format,
|
safe_sprintf(about_blurb, sizeof(about_blurb), about_blurb_format,
|
||||||
rufus_version[0], rufus_version[1], rufus_version[2], rufus_version[3]);
|
rufus_version[0], rufus_version[1], rufus_version[2], rufus_version[3]);
|
||||||
for (i=0; i<ARRAYSIZE(hEdit); i++) {
|
for (i=0; i<ARRAYSIZE(hEdit); i++) {
|
||||||
|
@ -698,6 +703,9 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
|
||||||
case IDC_ABOUT_LICENSE:
|
case IDC_ABOUT_LICENSE:
|
||||||
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(IDD_LICENSE), hDlg, LicenseCallback);
|
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(IDD_LICENSE), hDlg, LicenseCallback);
|
||||||
break;
|
break;
|
||||||
|
case IDC_ABOUT_UPDATES:
|
||||||
|
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(IDD_UPDATE_POLICY), hDlg, UpdateCallback);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -740,7 +748,7 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
} else {
|
} else {
|
||||||
ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW);
|
ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW);
|
||||||
}
|
}
|
||||||
if (notification_info_callback != NULL) {
|
if ((notification_more_info != NULL) && (notification_more_info->callback != NULL)) {
|
||||||
ShowWindow(GetDlgItem(hDlg, IDC_MORE_INFO), SW_SHOW);
|
ShowWindow(GetDlgItem(hDlg, IDC_MORE_INFO), SW_SHOW);
|
||||||
}
|
}
|
||||||
// Set the control text
|
// Set the control text
|
||||||
|
@ -773,7 +781,9 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
case IDC_MORE_INFO:
|
case IDC_MORE_INFO:
|
||||||
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(notification_info_id), hDlg, notification_info_callback);
|
if (notification_more_info != NULL)
|
||||||
|
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(notification_more_info->id),
|
||||||
|
hDlg, notification_more_info->callback);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -784,7 +794,7 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
/*
|
/*
|
||||||
* Display a custom notification
|
* Display a custom notification
|
||||||
*/
|
*/
|
||||||
BOOL Notification(int type, WORD extra_id, Callback_t extra_callback, char* title, char* format, ...)
|
BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...)
|
||||||
{
|
{
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -795,8 +805,7 @@ BOOL Notification(int type, WORD extra_id, Callback_t extra_callback, char* titl
|
||||||
safe_vsnprintf(szMessageText, MAX_PATH-1, format, args);
|
safe_vsnprintf(szMessageText, MAX_PATH-1, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
szMessageText[MAX_PATH-1] = 0;
|
szMessageText[MAX_PATH-1] = 0;
|
||||||
notification_info_callback = extra_callback;
|
notification_more_info = more_info;
|
||||||
notification_info_id = extra_id;
|
|
||||||
notification_is_question = FALSE;
|
notification_is_question = FALSE;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
|
@ -1104,22 +1113,24 @@ BOOL SetTaskbarProgressValue(ULONGLONG ullCompleted, ULONGLONG ullTotal)
|
||||||
*/
|
*/
|
||||||
INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HWND hPolicy, hCombo;
|
HWND hPolicy;
|
||||||
|
static HWND hFrequency, hBeta;
|
||||||
|
DWORD frequency = -1;
|
||||||
|
|
||||||
switch (message) {
|
switch (message) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
CenterDialog(hDlg);
|
CenterDialog(hDlg);
|
||||||
hCombo = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY);
|
hFrequency = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY);
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Disabled"), -1));
|
IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Disabled"), -1));
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Daily (Default)"), 86400));
|
IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Daily (Default)"), 86400));
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Weekly"), 604800));
|
IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Weekly"), 604800));
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Monthly"), 2629800));
|
IGNORE_RETVAL(ComboBox_SetItemData(hFrequency, ComboBox_AddStringU(hFrequency, "Monthly"), 2629800));
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(hCombo, 1));
|
IGNORE_RETVAL(ComboBox_SetCurSel(hFrequency, 1));
|
||||||
hCombo = GetDlgItem(hDlg, IDC_INCLUDE_BETAS);
|
hBeta = GetDlgItem(hDlg, IDC_INCLUDE_BETAS);
|
||||||
IGNORE_RETVAL(ComboBox_AddStringU(hCombo, "No"));
|
IGNORE_RETVAL(ComboBox_AddStringU(hBeta, "Yes"));
|
||||||
IGNORE_RETVAL(ComboBox_AddStringU(hCombo, "Yes"));
|
IGNORE_RETVAL(ComboBox_AddStringU(hBeta, "No"));
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(hCombo, 0));
|
IGNORE_RETVAL(ComboBox_SetCurSel(hBeta, 1));
|
||||||
hPolicy = GetDlgItem(hDlg, IDC_UPDATES_POLICY);
|
hPolicy = GetDlgItem(hDlg, IDC_POLICY);
|
||||||
SendMessage(hPolicy, EM_AUTOURLDETECT, 1, 0);
|
SendMessage(hPolicy, EM_AUTOURLDETECT, 1, 0);
|
||||||
SendMessageA(hPolicy, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update_policy);
|
SendMessageA(hPolicy, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update_policy);
|
||||||
SendMessage(hPolicy, EM_SETSEL, -1, -1);
|
SendMessage(hPolicy, EM_SETSEL, -1, -1);
|
||||||
|
@ -1128,12 +1139,55 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l
|
||||||
break;
|
break;
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
switch (LOWORD(wParam)) {
|
switch (LOWORD(wParam)) {
|
||||||
case IDOK:
|
case IDCLOSE:
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
|
case IDC_UPDATE_FREQUENCY:
|
||||||
|
if (HIWORD(wParam) != CBN_SELCHANGE)
|
||||||
|
break;
|
||||||
|
WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, (DWORD)ComboBox_GetItemData(hFrequency, ComboBox_GetCurSel(hFrequency)));
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
|
case IDC_INCLUDE_BETAS:
|
||||||
|
if (HIWORD(wParam) != CBN_SELCHANGE)
|
||||||
|
break;
|
||||||
|
SetRegistryKeyBool(REGKEY_INCLUDE_BETAS, ComboBox_GetCurSel(hBeta) == 0);
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return (INT_PTR)FALSE;
|
return (INT_PTR)FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initial update check setup
|
||||||
|
*/
|
||||||
|
BOOL SetUpdateCheck(void)
|
||||||
|
{
|
||||||
|
BOOL enable_updates;
|
||||||
|
DWORD commcheck = GetTickCount();
|
||||||
|
notification_info more_info = { IDD_UPDATE_POLICY, UpdateCallback };
|
||||||
|
|
||||||
|
// Test if we have access to the registry. If not, forget it.
|
||||||
|
WriteRegistryKey32(REGKEY_COMM_CHECK, commcheck);
|
||||||
|
if (ReadRegistryKey32(REGKEY_COMM_CHECK) != commcheck)
|
||||||
|
return FALSE;
|
||||||
|
reg_commcheck = TRUE;
|
||||||
|
|
||||||
|
// If the update interval is not set, this is the first time we run so prompt the user
|
||||||
|
if (ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == 0) {
|
||||||
|
enable_updates = Notification(MSG_QUESTION, &more_info,
|
||||||
|
APPLICATION_NAME " updates", "Do you want to allow " APPLICATION_NAME " to check for updates?\n");
|
||||||
|
if (!enable_updates) {
|
||||||
|
WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, -1); // large enough
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
// If the user hasn't set the interval in the dialog, set to default
|
||||||
|
if ( (ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == 0) ||
|
||||||
|
((ReadRegistryKey32(REGKEY_UPDATE_INTERVAL) == -1) && enable_updates) )
|
||||||
|
WriteRegistryKey32(REGKEY_UPDATE_INTERVAL, 86400);
|
||||||
|
}
|
||||||
|
// TODO: check for lastcheck + interval & launch the background thread here?
|
||||||
|
// TODO: make sure we check for updates if user just accepted
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue