mirror of
https://github.com/henrypp/simplewall.git
synced 2026-10-21 18:43:09 -05:00
3804 lines
91 KiB
C
3804 lines
91 KiB
C
// simplewall
|
|
// Copyright (c) 2016-2023 Henry++
|
|
|
|
#include "global.h"
|
|
|
|
BOOLEAN _app_changefilters (
|
|
_In_ HWND hwnd,
|
|
_In_ BOOLEAN is_install,
|
|
_In_ BOOLEAN is_forced
|
|
)
|
|
{
|
|
PITEM_CONTEXT context;
|
|
INT listview_id;
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
|
|
_app_listview_sort (hwnd, listview_id);
|
|
|
|
if (is_forced || _wfp_isfiltersinstalled ())
|
|
{
|
|
_app_initinterfacestate (hwnd, TRUE);
|
|
|
|
context = _r_freelist_allocateitem (&context_free_list);
|
|
|
|
context->hwnd = hwnd;
|
|
context->is_install = is_install;
|
|
|
|
_r_workqueue_queueitem (&wfp_queue, &_wfp_applythread, context);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
_r_listview_redraw (hwnd, listview_id, -1);
|
|
|
|
_app_profile_save ();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOLEAN _app_installmessage (
|
|
_In_opt_ HWND hwnd,
|
|
_In_ BOOLEAN is_install
|
|
)
|
|
{
|
|
TASKDIALOGCONFIG tdc = {0};
|
|
WCHAR str_main[256];
|
|
WCHAR radio_text_1[128];
|
|
WCHAR radio_text_2[128];
|
|
WCHAR str_flag[128];
|
|
WCHAR str_button_text_1[64];
|
|
WCHAR str_button_text_2[64];
|
|
TASKDIALOG_BUTTON td_buttons[2] = {0};
|
|
TASKDIALOG_BUTTON td_radios[2] = {0};
|
|
INT command_id;
|
|
INT radio_id;
|
|
BOOL is_flagchecked;
|
|
|
|
tdc.cbSize = sizeof (tdc);
|
|
tdc.dwFlags = TDF_ENABLE_HYPERLINKS | TDF_ALLOW_DIALOG_CANCELLATION | TDF_NO_SET_FOREGROUND | TDF_VERIFICATION_FLAG_CHECKED;
|
|
tdc.hwndParent = hwnd;
|
|
tdc.pszWindowTitle = _r_app_getname ();
|
|
tdc.pszMainIcon = is_install ? TD_INFORMATION_ICON : TD_WARNING_ICON;
|
|
//tdc.dwCommonButtons = TDCBF_YES_BUTTON | TDCBF_NO_BUTTON;
|
|
tdc.pfCallback = &_r_msg_callback;
|
|
tdc.lpCallbackData = MAKELONG (0, TRUE); // on top
|
|
|
|
tdc.pButtons = td_buttons;
|
|
tdc.cButtons = RTL_NUMBER_OF (td_buttons);
|
|
|
|
tdc.nDefaultButton = IDYES;
|
|
|
|
_r_str_copy (
|
|
str_button_text_1,
|
|
RTL_NUMBER_OF (str_button_text_1),
|
|
_app_getstateaction (is_install ? INSTALL_DISABLED : INSTALL_ENABLED)
|
|
);
|
|
|
|
_r_str_copy (str_button_text_2, RTL_NUMBER_OF (str_button_text_2), _r_locale_getstring (IDS_CLOSE));
|
|
|
|
td_buttons[0].nButtonID = IDYES;
|
|
td_buttons[0].pszButtonText = str_button_text_1;
|
|
|
|
td_buttons[1].nButtonID = IDNO;
|
|
td_buttons[1].pszButtonText = str_button_text_2;
|
|
|
|
if (is_install)
|
|
{
|
|
_r_str_copy (str_main, RTL_NUMBER_OF (str_main), _r_locale_getstring (IDS_QUESTION_START));
|
|
_r_str_copy (str_flag, RTL_NUMBER_OF (str_flag), _r_locale_getstring (IDS_DISABLEWINDOWSFIREWALL_CHK));
|
|
|
|
tdc.pRadioButtons = td_radios;
|
|
tdc.cRadioButtons = RTL_NUMBER_OF (td_radios);
|
|
|
|
tdc.nDefaultRadioButton = IDYES;
|
|
|
|
_r_str_copy (radio_text_1, RTL_NUMBER_OF (radio_text_1), _r_locale_getstring (IDS_INSTALL_PERMANENT));
|
|
_r_str_copy (radio_text_2, RTL_NUMBER_OF (radio_text_2), _r_locale_getstring (IDS_INSTALL_TEMPORARY));
|
|
|
|
td_radios[0].nButtonID = IDYES;
|
|
td_radios[0].pszButtonText = radio_text_1;
|
|
|
|
td_radios[1].nButtonID = IDNO;
|
|
td_radios[1].pszButtonText = radio_text_2;
|
|
}
|
|
else
|
|
{
|
|
_r_str_copy (str_main, RTL_NUMBER_OF (str_main), _r_locale_getstring (IDS_QUESTION_STOP));
|
|
_r_str_copy (str_flag, RTL_NUMBER_OF (str_flag), _r_locale_getstring (IDS_ENABLEWINDOWSFIREWALL_CHK));
|
|
}
|
|
|
|
tdc.pszMainInstruction = str_main;
|
|
tdc.pszVerificationText = str_flag;
|
|
|
|
if (SUCCEEDED (_r_msg_taskdialog (&tdc, &command_id, &radio_id, &is_flagchecked)))
|
|
{
|
|
if (command_id == IDYES)
|
|
{
|
|
if (is_install)
|
|
{
|
|
config.is_filterstemporary = (radio_id == IDNO);
|
|
|
|
if (is_flagchecked)
|
|
_wfp_firewallenable (FALSE);
|
|
}
|
|
else
|
|
{
|
|
config.is_filterstemporary = FALSE;
|
|
|
|
if (is_flagchecked)
|
|
_wfp_firewallenable (TRUE);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
VOID _app_config_apply (
|
|
_In_ HWND hwnd,
|
|
_In_opt_ HWND hsettings,
|
|
_In_ INT ctrl_id
|
|
)
|
|
{
|
|
HMENU hmenu;
|
|
BOOLEAN is_enabled;
|
|
BOOLEAN new_val;
|
|
|
|
switch (ctrl_id)
|
|
{
|
|
case IDC_LOADONSTARTUP_CHK:
|
|
case IDM_LOADONSTARTUP_CHK:
|
|
{
|
|
new_val = !_r_autorun_isenabled ();
|
|
break;
|
|
}
|
|
|
|
case IDC_STARTMINIMIZED_CHK:
|
|
case IDM_STARTMINIMIZED_CHK:
|
|
{
|
|
new_val = !_r_config_getboolean (L"IsStartMinimized", FALSE);
|
|
break;
|
|
}
|
|
|
|
case IDC_SKIPUACWARNING_CHK:
|
|
case IDM_SKIPUACWARNING_CHK:
|
|
{
|
|
new_val = !_r_skipuac_isenabled ();
|
|
break;
|
|
}
|
|
|
|
case IDC_CHECKUPDATES_CHK:
|
|
case IDM_CHECKUPDATES_CHK:
|
|
{
|
|
new_val = !_r_update_isenabled (FALSE);
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_BLOCKOUTBOUND:
|
|
case IDM_RULE_BLOCKOUTBOUND:
|
|
{
|
|
new_val = !_r_config_getboolean (L"BlockOutboundConnections", TRUE);
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_BLOCKINBOUND:
|
|
case IDM_RULE_BLOCKINBOUND:
|
|
{
|
|
new_val = !_r_config_getboolean (L"BlockInboundConnections", TRUE);
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_ALLOWLOOPBACK:
|
|
case IDM_RULE_ALLOWLOOPBACK:
|
|
{
|
|
new_val = !_r_config_getboolean (L"AllowLoopbackConnections", TRUE);
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_ALLOW6TO4:
|
|
case IDM_RULE_ALLOW6TO4:
|
|
{
|
|
new_val = !_r_config_getboolean (L"AllowIPv6", TRUE);
|
|
break;
|
|
}
|
|
|
|
case IDM_RULE_ALLOWWINDOWSUPDATE:
|
|
{
|
|
new_val = !_r_config_getboolean (L"IsWUFixEnabled", FALSE);
|
|
break;
|
|
}
|
|
|
|
case IDC_USESTEALTHMODE_CHK:
|
|
{
|
|
new_val = !_r_config_getboolean (L"UseStealthMode", TRUE);
|
|
break;
|
|
}
|
|
|
|
case IDC_INSTALLBOOTTIMEFILTERS_CHK:
|
|
{
|
|
new_val = !_r_config_getboolean (L"InstallBoottimeFilters", TRUE);
|
|
break;
|
|
}
|
|
|
|
case IDC_USENETWORKRESOLUTION_CHK:
|
|
case IDM_USENETWORKRESOLUTION_CHK:
|
|
{
|
|
new_val = !_r_config_getboolean (L"IsNetworkResolutionsEnabled", FALSE);
|
|
break;
|
|
}
|
|
|
|
case IDM_USEAPPMONITOR_CHK:
|
|
{
|
|
new_val = !_r_config_getboolean (L"IsEnableAppMonitor", FALSE);
|
|
break;
|
|
}
|
|
|
|
case IDM_PROFILETYPE_PLAIN:
|
|
case IDM_PROFILETYPE_COMPRESSED:
|
|
case IDM_PROFILETYPE_ENCRYPTED:
|
|
{
|
|
break;
|
|
}
|
|
|
|
default:
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
hmenu = GetMenu (hwnd);
|
|
|
|
if (!hmenu)
|
|
return;
|
|
|
|
switch (ctrl_id)
|
|
{
|
|
case IDC_LOADONSTARTUP_CHK:
|
|
case IDM_LOADONSTARTUP_CHK:
|
|
{
|
|
_r_autorun_enable (hsettings ? hsettings : hwnd, new_val);
|
|
|
|
is_enabled = _r_autorun_isenabled ();
|
|
|
|
_r_menu_checkitem (hmenu, IDM_LOADONSTARTUP_CHK, 0, MF_BYCOMMAND, is_enabled);
|
|
|
|
if (hsettings)
|
|
_r_ctrl_checkbutton (hsettings, IDC_LOADONSTARTUP_CHK, is_enabled);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_STARTMINIMIZED_CHK:
|
|
case IDM_STARTMINIMIZED_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsStartMinimized", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_STARTMINIMIZED_CHK, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_SKIPUACWARNING_CHK:
|
|
case IDM_SKIPUACWARNING_CHK:
|
|
{
|
|
_r_skipuac_enable (hsettings ? hsettings : hwnd, new_val);
|
|
|
|
is_enabled = _r_skipuac_isenabled ();
|
|
|
|
_r_menu_checkitem (hmenu, IDM_SKIPUACWARNING_CHK, 0, MF_BYCOMMAND, is_enabled);
|
|
|
|
if (hsettings)
|
|
_r_ctrl_checkbutton (hsettings, IDC_SKIPUACWARNING_CHK, is_enabled);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_CHECKUPDATES_CHK:
|
|
case IDM_CHECKUPDATES_CHK:
|
|
{
|
|
_r_update_enable (new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_CHECKUPDATES_CHK, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_BLOCKOUTBOUND:
|
|
case IDM_RULE_BLOCKOUTBOUND:
|
|
{
|
|
_r_config_setboolean (L"BlockOutboundConnections", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_RULE_BLOCKOUTBOUND, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_BLOCKINBOUND:
|
|
case IDM_RULE_BLOCKINBOUND:
|
|
{
|
|
_r_config_setboolean (L"BlockInboundConnections", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_RULE_BLOCKINBOUND, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_ALLOWLOOPBACK:
|
|
case IDM_RULE_ALLOWLOOPBACK:
|
|
{
|
|
_r_config_setboolean (L"AllowLoopbackConnections", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_RULE_ALLOWLOOPBACK, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_RULE_ALLOW6TO4:
|
|
case IDM_RULE_ALLOW6TO4:
|
|
{
|
|
_r_config_setboolean (L"AllowIPv6", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_RULE_ALLOW6TO4, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_RULE_ALLOWWINDOWSUPDATE:
|
|
{
|
|
_r_config_setboolean (L"IsWUFixEnabled", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_RULE_ALLOWWINDOWSUPDATE, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_PROFILETYPE_PLAIN:
|
|
{
|
|
_r_config_setlong (L"ProfileType", 0);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_PROFILETYPE_PLAIN, IDM_PROFILETYPE_ENCRYPTED, MF_BYCOMMAND, IDM_PROFILETYPE_PLAIN);
|
|
|
|
_app_profile_save ();
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_PROFILETYPE_COMPRESSED:
|
|
{
|
|
_r_config_setlong (L"ProfileType", 1);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_PROFILETYPE_PLAIN, IDM_PROFILETYPE_ENCRYPTED, MF_BYCOMMAND, IDM_PROFILETYPE_COMPRESSED);
|
|
|
|
_app_profile_save ();
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_PROFILETYPE_ENCRYPTED:
|
|
{
|
|
_r_config_setlong (L"ProfileType", 2);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_PROFILETYPE_PLAIN, IDM_PROFILETYPE_ENCRYPTED, MF_BYCOMMAND, IDM_PROFILETYPE_ENCRYPTED);
|
|
|
|
_app_profile_save ();
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_USESTEALTHMODE_CHK:
|
|
{
|
|
_r_config_setboolean (L"UseStealthMode", new_val);
|
|
break;
|
|
}
|
|
|
|
case IDC_INSTALLBOOTTIMEFILTERS_CHK:
|
|
{
|
|
_r_config_setboolean (L"InstallBoottimeFilters", new_val);
|
|
break;
|
|
}
|
|
|
|
case IDC_USENETWORKRESOLUTION_CHK:
|
|
case IDM_USENETWORKRESOLUTION_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsNetworkResolutionsEnabled", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_USENETWORKRESOLUTION_CHK, 0, MF_BYCOMMAND, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_USEAPPMONITOR_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsEnableAppMonitor", new_val);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_USEAPPMONITOR_CHK, 0, MF_BYCOMMAND, new_val);
|
|
|
|
_app_fileloggingenable ();
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (ctrl_id)
|
|
{
|
|
case IDM_LOADONSTARTUP_CHK:
|
|
case IDC_LOADONSTARTUP_CHK:
|
|
case IDM_STARTMINIMIZED_CHK:
|
|
case IDC_STARTMINIMIZED_CHK:
|
|
case IDM_SKIPUACWARNING_CHK:
|
|
case IDC_SKIPUACWARNING_CHK:
|
|
case IDM_CHECKUPDATES_CHK:
|
|
case IDC_CHECKUPDATES_CHK:
|
|
case IDM_PROFILETYPE_PLAIN:
|
|
case IDM_PROFILETYPE_COMPRESSED:
|
|
case IDM_PROFILETYPE_ENCRYPTED:
|
|
case IDC_USENETWORKRESOLUTION_CHK:
|
|
case IDM_USENETWORKRESOLUTION_CHK:
|
|
case IDM_USEAPPMONITOR_CHK:
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_wfp_isfiltersinstalled ())
|
|
_app_changefilters (hwnd, TRUE, TRUE);
|
|
}
|
|
|
|
INT_PTR CALLBACK SettingsProc (
|
|
_In_ HWND hwnd,
|
|
_In_ UINT msg,
|
|
_In_ WPARAM wparam,
|
|
_In_ LPARAM lparam
|
|
)
|
|
{
|
|
switch (msg)
|
|
{
|
|
case RM_INITIALIZE:
|
|
{
|
|
INT dialog_id = (INT)wparam;
|
|
|
|
switch (dialog_id)
|
|
{
|
|
case IDD_SETTINGS_GENERAL:
|
|
{
|
|
_r_ctrl_checkbutton (hwnd, IDC_ALWAYSONTOP_CHK, _r_config_getboolean (L"AlwaysOnTop", FALSE));
|
|
|
|
#if defined(APP_HAVE_AUTORUN)
|
|
_r_ctrl_checkbutton (hwnd, IDC_LOADONSTARTUP_CHK, _r_autorun_isenabled ());
|
|
#endif // APP_HAVE_AUTORUN
|
|
|
|
_r_ctrl_checkbutton (hwnd, IDC_STARTMINIMIZED_CHK, _r_config_getboolean (L"IsStartMinimized", FALSE));
|
|
|
|
#if defined(APP_HAVE_SKIPUAC)
|
|
_r_ctrl_checkbutton (hwnd, IDC_SKIPUACWARNING_CHK, _r_skipuac_isenabled ());
|
|
#endif // APP_HAVE_SKIPUAC
|
|
|
|
_r_ctrl_checkbutton (hwnd, IDC_CHECKUPDATES_CHK, _r_update_isenabled (FALSE));
|
|
|
|
_r_locale_enum (hwnd, IDC_LANGUAGE, 0);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_RULES:
|
|
{
|
|
HWND htip;
|
|
|
|
_r_ctrl_checkbutton (hwnd, IDC_RULE_BLOCKOUTBOUND, _r_config_getboolean (L"BlockOutboundConnections", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_RULE_BLOCKINBOUND, _r_config_getboolean (L"BlockInboundConnections", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_RULE_ALLOWLOOPBACK, _r_config_getboolean (L"AllowLoopbackConnections", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_RULE_ALLOW6TO4, _r_config_getboolean (L"AllowIPv6", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_USESTEALTHMODE_CHK, _r_config_getboolean (L"UseStealthMode", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_INSTALLBOOTTIMEFILTERS_CHK, _r_config_getboolean (L"InstallBoottimeFilters", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_USENETWORKRESOLUTION_CHK, _r_config_getboolean (L"IsNetworkResolutionsEnabled", FALSE));
|
|
|
|
htip = _r_ctrl_createtip (hwnd);
|
|
|
|
if (!htip)
|
|
break;
|
|
|
|
_r_ctrl_settiptext (htip, hwnd, IDC_RULE_BLOCKOUTBOUND, LPSTR_TEXTCALLBACK);
|
|
_r_ctrl_settiptext (htip, hwnd, IDC_RULE_BLOCKINBOUND, LPSTR_TEXTCALLBACK);
|
|
_r_ctrl_settiptext (htip, hwnd, IDC_RULE_ALLOWLOOPBACK, LPSTR_TEXTCALLBACK);
|
|
_r_ctrl_settiptext (htip, hwnd, IDC_RULE_ALLOW6TO4, LPSTR_TEXTCALLBACK);
|
|
|
|
_r_ctrl_settiptext (htip, hwnd, IDC_USESTEALTHMODE_CHK, LPSTR_TEXTCALLBACK);
|
|
_r_ctrl_settiptext (htip, hwnd, IDC_INSTALLBOOTTIMEFILTERS_CHK, LPSTR_TEXTCALLBACK);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_BLOCKLIST:
|
|
{
|
|
for (INT i = IDC_BLOCKLIST_SPY_DISABLE; i <= IDC_BLOCKLIST_EXTRA_BLOCK; i++)
|
|
_r_ctrl_checkbutton (hwnd, i, FALSE); // HACK!!! reset button checkboxes!
|
|
|
|
_r_ctrl_checkbutton (
|
|
hwnd,
|
|
IDC_BLOCKLIST_SPY_DISABLE + _r_calc_clamp (_r_config_getlong (L"BlocklistSpyState", 2), 0, 2),
|
|
TRUE
|
|
);
|
|
|
|
_r_ctrl_checkbutton (
|
|
hwnd,
|
|
IDC_BLOCKLIST_UPDATE_DISABLE + _r_calc_clamp (_r_config_getlong (L"BlocklistUpdateState", 0), 0, 2),
|
|
TRUE
|
|
);
|
|
|
|
_r_ctrl_checkbutton (
|
|
hwnd,
|
|
IDC_BLOCKLIST_EXTRA_DISABLE + _r_calc_clamp (_r_config_getlong (L"BlocklistExtraState", 0), 0, 2),
|
|
TRUE
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_INTERFACE:
|
|
{
|
|
_r_ctrl_checkbutton (hwnd, IDC_CONFIRMEXIT_CHK, _r_config_getboolean (L"ConfirmExit2", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_CONFIRMEXITTIMER_CHK, _r_config_getboolean (L"ConfirmExitTimer", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_CONFIRMLOGCLEAR_CHK, _r_config_getboolean (L"ConfirmLogClear", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_CONFIRMALLOW_CHK, _r_config_getboolean (L"ConfirmAllow", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_TRAYICONSINGLECLICK_CHK, _r_config_getboolean (L"IsTrayIconSingleClick", TRUE));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_HIGHLIGHTING:
|
|
{
|
|
PITEM_COLOR ptr_clr = NULL;
|
|
ULONG_PTR enum_key = 0;
|
|
BOOLEAN val;
|
|
LONG icon_id;
|
|
INT item_id = 0;
|
|
|
|
// configure listview
|
|
_r_listview_setstyle (
|
|
hwnd,
|
|
IDC_COLORS,
|
|
LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_CHECKBOXES,
|
|
FALSE
|
|
);
|
|
|
|
_app_listview_setview (hwnd, IDC_COLORS);
|
|
|
|
_r_listview_deleteallitems (hwnd, IDC_COLORS);
|
|
_r_listview_deleteallcolumns (hwnd, IDC_COLORS);
|
|
|
|
_r_listview_addcolumn (hwnd, IDC_COLORS, 0, L"", 0, LVCFMT_LEFT);
|
|
|
|
icon_id = _app_icons_getdefaultapp_id (DATA_APP_REGULAR);
|
|
|
|
_app_listview_lock (hwnd, IDC_COLORS, TRUE);
|
|
|
|
while (_r_obj_enumhashtable (colors_table, &ptr_clr, NULL, &enum_key))
|
|
{
|
|
ptr_clr->new_clr = _r_config_getulong_ex (ptr_clr->config_value->buffer, ptr_clr->default_clr, L"colors");
|
|
|
|
_r_listview_additem_ex (
|
|
hwnd,
|
|
IDC_COLORS,
|
|
item_id,
|
|
_r_locale_getstring (ptr_clr->locale_id),
|
|
icon_id,
|
|
I_GROUPIDNONE,
|
|
(LPARAM)ptr_clr
|
|
);
|
|
|
|
val = _r_config_getboolean_ex (ptr_clr->config_name->buffer, ptr_clr->is_enabled, L"colors");
|
|
|
|
_r_listview_setitemcheck (hwnd, IDC_COLORS, item_id, val);
|
|
|
|
item_id += 1;
|
|
}
|
|
|
|
_app_listview_lock (hwnd, IDC_COLORS, FALSE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_NOTIFICATIONS:
|
|
{
|
|
_r_ctrl_checkbutton (hwnd, IDC_ENABLENOTIFICATIONS_CHK, _r_config_getboolean (L"IsNotificationsEnabled", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_NOTIFICATIONSOUND_CHK, _r_config_getboolean (L"IsNotificationsSound", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_NOTIFICATIONFULLSCREENSILENTMODE_CHK, _r_config_getboolean (L"IsNotificationsFullscreenSilentMode", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_NOTIFICATIONONTRAY_CHK, _r_config_getboolean (L"IsNotificationsOnTray", FALSE));
|
|
|
|
SendDlgItemMessage (
|
|
hwnd,
|
|
IDC_NOTIFICATIONTIMEOUT,
|
|
UDM_SETRANGE32,
|
|
0,
|
|
(LPARAM)_r_calc_days2seconds (7)
|
|
);
|
|
|
|
SendDlgItemMessage (
|
|
hwnd,
|
|
IDC_NOTIFICATIONTIMEOUT,
|
|
UDM_SETPOS32,
|
|
0,
|
|
(LPARAM)_r_config_getulong (L"NotificationsTimeout", NOTIFY_TIMEOUT_DEFAULT)
|
|
);
|
|
|
|
PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_ENABLENOTIFICATIONS_CHK, 0), WM_APP);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_LOGGING:
|
|
{
|
|
UDACCEL ud = {0};
|
|
PR_STRING string;
|
|
|
|
_r_ctrl_checkbutton (hwnd, IDC_ENABLELOG_CHK, _r_config_getboolean (L"IsLogEnabled", FALSE));
|
|
|
|
string = _app_getlogpath ();
|
|
|
|
if (string)
|
|
{
|
|
_r_ctrl_setstring (hwnd, IDC_LOGPATH, string->buffer);
|
|
|
|
_r_obj_dereference (string);
|
|
}
|
|
|
|
string = _app_getlogviewer ();
|
|
|
|
if (string)
|
|
{
|
|
_r_ctrl_setstring (hwnd, IDC_LOGVIEWER, string->buffer);
|
|
|
|
_r_obj_dereference (string);
|
|
}
|
|
|
|
ud.nInc = 64; // set step to 64kb
|
|
|
|
SendDlgItemMessage (
|
|
hwnd,
|
|
IDC_LOGSIZELIMIT,
|
|
UDM_SETACCEL,
|
|
1,
|
|
(LPARAM)&ud
|
|
);
|
|
|
|
SendDlgItemMessage (
|
|
hwnd,
|
|
IDC_LOGSIZELIMIT,
|
|
UDM_SETRANGE32,
|
|
(WPARAM)64,
|
|
(LPARAM)_r_calc_kilobytes2bytes (512)
|
|
);
|
|
|
|
SendDlgItemMessage (
|
|
hwnd,
|
|
IDC_LOGSIZELIMIT,
|
|
UDM_SETPOS32,
|
|
0,
|
|
(LPARAM)_r_config_getulong (L"LogSizeLimitKb", LOG_SIZE_LIMIT_DEFAULT)
|
|
);
|
|
|
|
_r_ctrl_checkbutton (hwnd, IDC_ENABLEUILOG_CHK, _r_config_getboolean (L"IsLogUiEnabled", FALSE));
|
|
|
|
PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_ENABLELOG_CHK, 0), WM_APP);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_EXCLUDE:
|
|
{
|
|
_r_ctrl_checkbutton (hwnd, IDC_EXCLUDEBLOCKLIST_CHK, _r_config_getboolean (L"IsExcludeBlocklist", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_EXCLUDECUSTOM_CHK, _r_config_getboolean (L"IsExcludeCustomRules", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_EXCLUDESTEALTH_CHK, _r_config_getboolean (L"IsExcludeStealth", TRUE));
|
|
_r_ctrl_checkbutton (hwnd, IDC_EXCLUDECLASSIFYALLOW_CHK, _r_config_getboolean (L"IsExcludeClassifyAllow", TRUE));
|
|
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case RM_LOCALIZE:
|
|
{
|
|
INT dialog_id = (INT)wparam;
|
|
|
|
// localize titles
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_GENERAL,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_GENERAL)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_LANGUAGE,
|
|
L"%s: (Language)",
|
|
_r_locale_getstring (IDS_TITLE_LANGUAGE)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_BLOCKLIST_SPY,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_BLOCKLIST_SPY)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_BLOCKLIST_UPDATE,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_BLOCKLIST_UPDATE)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_BLOCKLIST_EXTRA,
|
|
L"%s: (Skype, Bing, Live, Outlook, etc.)",
|
|
_r_locale_getstring (IDS_BLOCKLIST_EXTRA)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_CONNECTIONS,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TAB_NETWORK)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_SECURITY,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_SECURITY)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_CONFIRMATIONS,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_CONFIRMATIONS)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_TRAY,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_TRAY)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_HIGHLIGHTING,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_HIGHLIGHTING)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_LOGVIEWER,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_LOGVIEWER_HINT)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_INTERFACE,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_INTERFACE)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_NOTIFICATIONS,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_NOTIFICATIONS)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd, IDC_TITLE_LOGGING,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_LOGGING)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_TITLE_ADVANCED,
|
|
L"%s:",
|
|
_r_locale_getstring (IDS_TITLE_ADVANCED)
|
|
);
|
|
|
|
switch (dialog_id)
|
|
{
|
|
case IDD_SETTINGS_GENERAL:
|
|
{
|
|
_r_ctrl_setstring (hwnd, IDC_ALWAYSONTOP_CHK, _r_locale_getstring (IDS_ALWAYSONTOP_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_LOADONSTARTUP_CHK, _r_locale_getstring (IDS_LOADONSTARTUP_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_STARTMINIMIZED_CHK, _r_locale_getstring (IDS_STARTMINIMIZED_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_SKIPUACWARNING_CHK, _r_locale_getstring (IDS_SKIPUACWARNING_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_CHECKUPDATES_CHK, _r_locale_getstring (IDS_CHECKUPDATES_CHK));
|
|
|
|
_r_ctrl_setstring (hwnd, IDC_LANGUAGE_HINT, _r_locale_getstring (IDS_LANGUAGE_HINT));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_RULES:
|
|
{
|
|
LPCWSTR recommended_string;
|
|
|
|
recommended_string = _r_locale_getstring (IDS_RECOMMENDED);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_RULE_BLOCKOUTBOUND,
|
|
L"%s (%s)",
|
|
_r_locale_getstring (IDS_RULE_BLOCKOUTBOUND),
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_RULE_BLOCKINBOUND,
|
|
L"%s (%s)",
|
|
_r_locale_getstring (IDS_RULE_BLOCKINBOUND),
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_RULE_ALLOWLOOPBACK,
|
|
L"%s (%s)",
|
|
_r_locale_getstring (IDS_RULE_ALLOWLOOPBACK),
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_RULE_ALLOW6TO4,
|
|
L"%s (%s)",
|
|
_r_locale_getstring (IDS_RULE_ALLOW6TO4),
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_USESTEALTHMODE_CHK,
|
|
L"%s (%s)",
|
|
_r_locale_getstring (IDS_USESTEALTHMODE_CHK),
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_INSTALLBOOTTIMEFILTERS_CHK,
|
|
L"%s (%s)",
|
|
_r_locale_getstring (IDS_INSTALLBOOTTIMEFILTERS_CHK),
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_USENETWORKRESOLUTION_CHK,
|
|
_r_locale_getstring (IDS_USENETWORKRESOLUTION_CHK)
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_BLOCKLIST:
|
|
{
|
|
LPCWSTR recommended_string;
|
|
LPCWSTR disable_string;
|
|
LPCWSTR allow_string;
|
|
LPCWSTR block_string;
|
|
|
|
recommended_string = _r_locale_getstring (IDS_RECOMMENDED);
|
|
disable_string = _r_locale_getstring (IDS_DISABLE);
|
|
allow_string = _r_locale_getstring (IDS_ACTION_ALLOW);
|
|
block_string = _r_locale_getstring (IDS_ACTION_BLOCK);
|
|
|
|
_r_ctrl_setstring (hwnd, IDC_BLOCKLIST_SPY_DISABLE, disable_string);
|
|
_r_ctrl_setstring (hwnd, IDC_BLOCKLIST_SPY_ALLOW, allow_string);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_BLOCKLIST_SPY_BLOCK,
|
|
L"%s (%s)",
|
|
block_string,
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_BLOCKLIST_UPDATE_DISABLE,
|
|
L"%s (%s)",
|
|
disable_string,
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstring (hwnd, IDC_BLOCKLIST_UPDATE_ALLOW, allow_string);
|
|
_r_ctrl_setstring (hwnd, IDC_BLOCKLIST_UPDATE_BLOCK, block_string);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_BLOCKLIST_EXTRA_DISABLE,
|
|
L"%s (%s)",
|
|
disable_string,
|
|
recommended_string
|
|
);
|
|
|
|
_r_ctrl_setstring (hwnd, IDC_BLOCKLIST_EXTRA_ALLOW, allow_string);
|
|
_r_ctrl_setstring (hwnd, IDC_BLOCKLIST_EXTRA_BLOCK, block_string);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_BLOCKLIST_INFO,
|
|
L"Author: <a href=\"%s\">WindowsSpyBlocker</a> - block spying and tracking on Windows systems.",
|
|
WINDOWSSPYBLOCKER_URL
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_INTERFACE:
|
|
{
|
|
_r_ctrl_setstring (hwnd, IDC_CONFIRMEXIT_CHK, _r_locale_getstring (IDS_CONFIRMEXIT_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_CONFIRMEXITTIMER_CHK, _r_locale_getstring (IDS_CONFIRMEXITTIMER_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_CONFIRMLOGCLEAR_CHK, _r_locale_getstring (IDS_CONFIRMLOGCLEAR_CHK));
|
|
_r_ctrl_setstring (hwnd, IDC_CONFIRMALLOW_CHK, _r_locale_getstring (IDS_CONFIRMALLOW_CHK));
|
|
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_TRAYICONSINGLECLICK_CHK,
|
|
_r_locale_getstring (IDS_TRAYICONSINGLECLICK_CHK)
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_HIGHLIGHTING:
|
|
{
|
|
PITEM_COLOR ptr_clr;
|
|
|
|
_r_listview_setcolumn (hwnd, IDC_COLORS, 0, NULL, -100);
|
|
|
|
for (INT i = 0; i < _r_listview_getitemcount (hwnd, IDC_COLORS); i++)
|
|
{
|
|
ptr_clr = (PITEM_COLOR)_r_listview_getitemlparam (hwnd, IDC_COLORS, i);
|
|
|
|
if (ptr_clr)
|
|
_r_listview_setitem (hwnd, IDC_COLORS, i, 0, _r_locale_getstring (ptr_clr->locale_id));
|
|
}
|
|
|
|
_r_ctrl_setstring (hwnd, IDC_COLORS_HINT, _r_locale_getstring (IDS_COLORS_HINT));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_NOTIFICATIONS:
|
|
{
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_ENABLENOTIFICATIONS_CHK,
|
|
_r_locale_getstring (IDS_ENABLENOTIFICATIONS_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_NOTIFICATIONSOUND_CHK,
|
|
_r_locale_getstring (IDS_NOTIFICATIONSOUND_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_NOTIFICATIONFULLSCREENSILENTMODE_CHK,
|
|
_r_locale_getstring (IDS_NOTIFICATIONFULLSCREENSILENTMODE_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_NOTIFICATIONONTRAY_CHK,
|
|
_r_locale_getstring (IDS_NOTIFICATIONONTRAY_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstring (
|
|
hwnd,
|
|
IDC_NOTIFICATIONTIMEOUT_HINT,
|
|
_r_locale_getstring (IDS_NOTIFICATIONTIMEOUT_HINT)
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_LOGGING:
|
|
{
|
|
_r_ctrl_setstring (hwnd, IDC_ENABLELOG_CHK, _r_locale_getstring (IDS_ENABLELOG_CHK));
|
|
|
|
_r_ctrl_setstring (hwnd, IDC_LOGSIZELIMIT_HINT, _r_locale_getstring (IDS_LOGSIZELIMIT_HINT));
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_ENABLEUILOG_CHK,
|
|
L"%s (session only)",
|
|
_r_locale_getstring (IDS_ENABLEUILOG_CHK)
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDD_SETTINGS_EXCLUDE:
|
|
{
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_EXCLUDEBLOCKLIST_CHK,
|
|
L"%s %s",
|
|
_r_locale_getstring (IDS_TITLE_EXCLUDE),
|
|
_r_locale_getstring (IDS_EXCLUDEBLOCKLIST_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_EXCLUDECUSTOM_CHK,
|
|
L"%s %s",
|
|
_r_locale_getstring (IDS_TITLE_EXCLUDE),
|
|
_r_locale_getstring (IDS_EXCLUDECUSTOM_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_EXCLUDESTEALTH_CHK,
|
|
L"%s %s",
|
|
_r_locale_getstring (IDS_TITLE_EXCLUDE),
|
|
_r_locale_getstring (IDS_EXCLUDESTEALTH_CHK)
|
|
);
|
|
|
|
_r_ctrl_setstringformat (
|
|
hwnd,
|
|
IDC_EXCLUDECLASSIFYALLOW_CHK,
|
|
L"%s %s",
|
|
_r_locale_getstring (IDS_TITLE_EXCLUDE),
|
|
_r_locale_getstring (IDS_EXCLUDECLASSIFYALLOW_CHK)
|
|
);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_SIZE:
|
|
{
|
|
RECT rect;
|
|
HWND hlistview;
|
|
|
|
hlistview = GetDlgItem (hwnd, IDC_COLORS);
|
|
|
|
if (!hlistview)
|
|
break;
|
|
|
|
if (GetClientRect (hlistview, &rect))
|
|
_r_listview_setcolumn (hwnd, IDC_COLORS, 0, NULL, rect.right);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_VSCROLL:
|
|
case WM_HSCROLL:
|
|
{
|
|
ULONG value;
|
|
INT ctrl_id;
|
|
|
|
ctrl_id = GetDlgCtrlID ((HWND)lparam);
|
|
|
|
if (ctrl_id == IDC_LOGSIZELIMIT)
|
|
{
|
|
value = (ULONG)SendDlgItemMessage (hwnd, ctrl_id, UDM_GETPOS32, 0, 0);
|
|
|
|
_r_config_setulong (L"LogSizeLimitKb", value);
|
|
}
|
|
else if (ctrl_id == IDC_NOTIFICATIONTIMEOUT)
|
|
{
|
|
value = (ULONG)SendDlgItemMessage (hwnd, ctrl_id, UDM_GETPOS32, 0, 0);
|
|
|
|
_r_config_setulong (L"NotificationsTimeout", value);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR nmlp;
|
|
|
|
nmlp = (LPNMHDR)lparam;
|
|
|
|
switch (nmlp->code)
|
|
{
|
|
case TTN_GETDISPINFO:
|
|
{
|
|
LPNMTTDISPINFO lpnmdi = (LPNMTTDISPINFO)lparam;
|
|
WCHAR buffer[1024] = {0};
|
|
INT locale_id;
|
|
INT ctrl_id;
|
|
|
|
if ((lpnmdi->uFlags & TTF_IDISHWND) != TTF_IDISHWND)
|
|
break;
|
|
|
|
ctrl_id = GetDlgCtrlID ((HWND)(lpnmdi->hdr.idFrom));
|
|
|
|
if (ctrl_id == IDC_RULE_BLOCKOUTBOUND)
|
|
{
|
|
locale_id = IDS_RULE_BLOCKOUTBOUND;
|
|
}
|
|
else if (ctrl_id == IDC_RULE_BLOCKINBOUND)
|
|
{
|
|
locale_id = IDS_RULE_BLOCKINBOUND;
|
|
}
|
|
else if (ctrl_id == IDC_RULE_ALLOWLOOPBACK)
|
|
{
|
|
locale_id = IDS_RULE_ALLOWLOOPBACK_HINT;
|
|
}
|
|
else if (ctrl_id == IDC_USESTEALTHMODE_CHK)
|
|
{
|
|
locale_id = IDS_USESTEALTHMODE_HINT;
|
|
}
|
|
else if (ctrl_id == IDC_INSTALLBOOTTIMEFILTERS_CHK)
|
|
{
|
|
locale_id = IDS_INSTALLBOOTTIMEFILTERS_HINT;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
|
|
_r_str_copy (buffer, RTL_NUMBER_OF (buffer), _r_locale_getstring (locale_id));
|
|
|
|
lpnmdi->lpszText = buffer;
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_ITEMCHANGED:
|
|
{
|
|
LPNMLISTVIEW lpnmlv;
|
|
INT listview_id;
|
|
PITEM_COLOR ptr_clr;
|
|
BOOLEAN is_enabled;
|
|
|
|
lpnmlv = (LPNMLISTVIEW)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
if ((lpnmlv->uChanged & LVIF_STATE) == 0)
|
|
break;
|
|
|
|
if (listview_id != IDC_COLORS)
|
|
break;
|
|
|
|
if ((lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (1) || ((lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (2)))
|
|
{
|
|
if (_app_listview_islocked (hwnd, (INT)(INT_PTR)lpnmlv->hdr.idFrom))
|
|
break;
|
|
|
|
ptr_clr = (PITEM_COLOR)lpnmlv->lParam;
|
|
|
|
if (ptr_clr)
|
|
{
|
|
is_enabled = (lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (2);
|
|
|
|
_r_config_setboolean_ex (ptr_clr->config_name->buffer, is_enabled, L"colors");
|
|
|
|
_r_listview_redraw (_r_app_gethwnd (), _app_listview_getcurrent (_r_app_gethwnd ()), -1);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case NM_CUSTOMDRAW:
|
|
{
|
|
LONG_PTR result;
|
|
|
|
result = _app_message_custdraw (hwnd, (LPNMLVCUSTOMDRAW)lparam);
|
|
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, result);
|
|
return result;
|
|
}
|
|
|
|
case NM_DBLCLK:
|
|
{
|
|
LPNMITEMACTIVATE lpnmlv;
|
|
INT listview_id;
|
|
PITEM_COLOR ptr_clr_crnt;
|
|
CHOOSECOLOR cc = {0};
|
|
COLORREF cust[16] = {0};
|
|
PITEM_COLOR ptr_clr = NULL;
|
|
ULONG_PTR enum_key = 0;
|
|
ULONG_PTR index = 0;
|
|
|
|
lpnmlv = (LPNMITEMACTIVATE)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
if (lpnmlv->iItem == -1)
|
|
break;
|
|
|
|
if (listview_id != IDC_COLORS)
|
|
break;
|
|
|
|
ptr_clr_crnt = (PITEM_COLOR)_r_listview_getitemlparam (hwnd, listview_id, lpnmlv->iItem);
|
|
|
|
if (!ptr_clr_crnt)
|
|
break;
|
|
|
|
while (_r_obj_enumhashtable (colors_table, &ptr_clr, NULL, &enum_key))
|
|
{
|
|
cust[index++] = ptr_clr->default_clr;
|
|
}
|
|
|
|
cc.lStructSize = sizeof (cc);
|
|
cc.Flags = CC_RGBINIT | CC_FULLOPEN;
|
|
cc.hwndOwner = hwnd;
|
|
cc.lpCustColors = cust;
|
|
cc.rgbResult = ptr_clr_crnt->new_clr;
|
|
|
|
if (ChooseColor (&cc))
|
|
{
|
|
ptr_clr_crnt->new_clr = cc.rgbResult;
|
|
|
|
_r_config_setulong_ex (ptr_clr_crnt->config_value->buffer, cc.rgbResult, L"colors");
|
|
|
|
_r_listview_redraw (hwnd, IDC_COLORS, -1);
|
|
|
|
_r_listview_redraw (_r_app_gethwnd (), _app_listview_getcurrent (_r_app_gethwnd ()), -1);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case NM_CLICK:
|
|
case NM_RETURN:
|
|
{
|
|
PNMLINK pnmlink;
|
|
|
|
pnmlink = (PNMLINK)lparam;
|
|
|
|
if (!_r_str_isempty (pnmlink->item.szUrl))
|
|
_r_shell_opendefault (pnmlink->item.szUrl);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
INT ctrl_id = LOWORD (wparam);
|
|
INT notify_code = HIWORD (wparam);
|
|
|
|
switch (ctrl_id)
|
|
{
|
|
case IDC_ALWAYSONTOP_CHK:
|
|
{
|
|
BOOLEAN is_enabled;
|
|
|
|
is_enabled = _r_ctrl_isbuttonchecked (hwnd, ctrl_id);
|
|
|
|
_r_config_setboolean (L"AlwaysOnTop", is_enabled);
|
|
_r_menu_checkitem (GetMenu (_r_app_gethwnd ()), IDM_ALWAYSONTOP_CHK, 0, MF_BYCOMMAND, is_enabled);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LANGUAGE:
|
|
{
|
|
if (notify_code != CBN_SELCHANGE)
|
|
break;
|
|
|
|
_r_locale_apply (hwnd, ctrl_id, 0);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_CONFIRMEXIT_CHK:
|
|
{
|
|
_r_config_setboolean (L"ConfirmExit2", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_CONFIRMEXITTIMER_CHK:
|
|
{
|
|
_r_config_setboolean (L"ConfirmExitTimer", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_CONFIRMLOGCLEAR_CHK:
|
|
{
|
|
_r_config_setboolean (L"ConfirmLogClear", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_CONFIRMALLOW_CHK:
|
|
{
|
|
_r_config_setboolean (L"ConfirmAllow", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_TRAYICONSINGLECLICK_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsTrayIconSingleClick", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LOADONSTARTUP_CHK:
|
|
case IDC_STARTMINIMIZED_CHK:
|
|
case IDC_SKIPUACWARNING_CHK:
|
|
case IDC_CHECKUPDATES_CHK:
|
|
case IDC_RULE_BLOCKOUTBOUND:
|
|
case IDC_RULE_BLOCKINBOUND:
|
|
case IDC_RULE_ALLOWLOOPBACK:
|
|
case IDC_RULE_ALLOW6TO4:
|
|
case IDC_USESTEALTHMODE_CHK:
|
|
case IDC_INSTALLBOOTTIMEFILTERS_CHK:
|
|
case IDC_USENETWORKRESOLUTION_CHK:
|
|
{
|
|
_app_config_apply (_r_app_gethwnd (), hwnd, ctrl_id);
|
|
break;
|
|
}
|
|
|
|
case IDC_BLOCKLIST_SPY_DISABLE:
|
|
case IDC_BLOCKLIST_SPY_ALLOW:
|
|
case IDC_BLOCKLIST_SPY_BLOCK:
|
|
case IDC_BLOCKLIST_UPDATE_DISABLE:
|
|
case IDC_BLOCKLIST_UPDATE_ALLOW:
|
|
case IDC_BLOCKLIST_UPDATE_BLOCK:
|
|
case IDC_BLOCKLIST_EXTRA_DISABLE:
|
|
case IDC_BLOCKLIST_EXTRA_ALLOW:
|
|
case IDC_BLOCKLIST_EXTRA_BLOCK:
|
|
{
|
|
HMENU hmenu;
|
|
LONG new_state;
|
|
|
|
hmenu = GetMenu (_r_app_gethwnd ());
|
|
|
|
if (ctrl_id >= IDC_BLOCKLIST_SPY_DISABLE && ctrl_id <= IDC_BLOCKLIST_SPY_BLOCK)
|
|
{
|
|
new_state = _r_calc_clamp (
|
|
_r_ctrl_isradiochecked (hwnd, IDC_BLOCKLIST_SPY_DISABLE, IDC_BLOCKLIST_SPY_BLOCK) - IDC_BLOCKLIST_SPY_DISABLE,
|
|
0,
|
|
2
|
|
);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_BLOCKLIST_SPY_DISABLE, IDM_BLOCKLIST_SPY_BLOCK, MF_BYCOMMAND, IDM_BLOCKLIST_SPY_DISABLE + new_state);
|
|
|
|
_r_config_setlong (L"BlocklistSpyState", new_state);
|
|
|
|
_app_ruleblocklistset (_r_app_gethwnd (), new_state, -1, -1, TRUE);
|
|
}
|
|
else if (ctrl_id >= IDC_BLOCKLIST_UPDATE_DISABLE && ctrl_id <= IDC_BLOCKLIST_UPDATE_BLOCK)
|
|
{
|
|
new_state = _r_calc_clamp (
|
|
_r_ctrl_isradiochecked (hwnd, IDC_BLOCKLIST_UPDATE_DISABLE, IDC_BLOCKLIST_UPDATE_BLOCK) - IDC_BLOCKLIST_UPDATE_DISABLE,
|
|
0,
|
|
2
|
|
);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_BLOCKLIST_UPDATE_DISABLE, IDM_BLOCKLIST_UPDATE_BLOCK, MF_BYCOMMAND, IDM_BLOCKLIST_UPDATE_DISABLE + new_state);
|
|
|
|
_r_config_setlong (L"BlocklistUpdateState", new_state);
|
|
|
|
_app_ruleblocklistset (_r_app_gethwnd (), -1, new_state, -1, TRUE);
|
|
}
|
|
else if (ctrl_id >= IDC_BLOCKLIST_EXTRA_DISABLE && ctrl_id <= IDC_BLOCKLIST_EXTRA_BLOCK)
|
|
{
|
|
new_state = _r_calc_clamp (
|
|
_r_ctrl_isradiochecked (hwnd, IDC_BLOCKLIST_EXTRA_DISABLE, IDC_BLOCKLIST_EXTRA_BLOCK) - IDC_BLOCKLIST_EXTRA_DISABLE,
|
|
0,
|
|
2
|
|
);
|
|
|
|
_r_menu_checkitem (hmenu, IDM_BLOCKLIST_EXTRA_DISABLE, IDM_BLOCKLIST_EXTRA_BLOCK, MF_BYCOMMAND, IDM_BLOCKLIST_EXTRA_DISABLE + new_state);
|
|
|
|
_r_config_setlong (L"BlocklistExtraState", new_state);
|
|
|
|
_app_ruleblocklistset (_r_app_gethwnd (), -1, -1, new_state, TRUE);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_ENABLELOG_CHK:
|
|
{
|
|
HWND hctrl;
|
|
BOOLEAN is_postmessage;
|
|
BOOLEAN is_enabled;
|
|
BOOLEAN is_logging_enabled;
|
|
|
|
is_postmessage = ((INT)lparam == WM_APP);
|
|
is_enabled = _r_ctrl_isbuttonchecked (hwnd, ctrl_id);
|
|
is_logging_enabled = is_enabled || _r_ctrl_isbuttonchecked (hwnd, IDC_ENABLEUILOG_CHK);
|
|
|
|
if (!is_postmessage)
|
|
{
|
|
_r_config_setboolean (L"IsLogEnabled", is_enabled);
|
|
|
|
_app_loginit (is_enabled);
|
|
}
|
|
|
|
SendDlgItemMessage (
|
|
config.hrebar,
|
|
IDC_TOOLBAR,
|
|
TB_PRESSBUTTON,
|
|
IDM_TRAY_ENABLELOG_CHK,
|
|
MAKELPARAM (is_enabled, 0)
|
|
);
|
|
|
|
_r_ctrl_enable (hwnd, IDC_LOGPATH, is_enabled); // input
|
|
_r_ctrl_enable (hwnd, IDC_LOGPATH_BTN, is_enabled); // button
|
|
|
|
hctrl = (HWND)SendDlgItemMessage (hwnd, IDC_LOGSIZELIMIT, UDM_GETBUDDY, 0, 0);
|
|
|
|
if (hctrl)
|
|
_r_ctrl_enable (hctrl, 0, is_enabled);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_ENABLEUILOG_CHK:
|
|
{
|
|
BOOLEAN is_enabled;
|
|
BOOLEAN is_logging_enabled;
|
|
|
|
is_enabled = _r_ctrl_isbuttonchecked (hwnd, ctrl_id);
|
|
is_logging_enabled = is_enabled || _r_ctrl_isbuttonchecked (hwnd, IDC_ENABLELOG_CHK);
|
|
|
|
_r_config_setboolean (L"IsLogUiEnabled", is_enabled);
|
|
|
|
SendDlgItemMessage (
|
|
config.hrebar,
|
|
IDC_TOOLBAR,
|
|
TB_PRESSBUTTON,
|
|
IDM_TRAY_ENABLEUILOG_CHK,
|
|
MAKELPARAM (is_enabled, 0)
|
|
);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LOGPATH:
|
|
{
|
|
PR_STRING log_path;
|
|
|
|
if (notify_code == EN_KILLFOCUS)
|
|
{
|
|
log_path = _r_ctrl_getstring (hwnd, ctrl_id);
|
|
|
|
if (log_path)
|
|
{
|
|
_r_config_setstringexpand (L"LogPath", log_path->buffer);
|
|
|
|
if (_r_config_getboolean (L"IsLogEnabled", FALSE))
|
|
_app_loginit (TRUE);
|
|
|
|
_r_obj_dereference (log_path);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LOGPATH_BTN:
|
|
{
|
|
static COMDLG_FILTERSPEC filters[] = {
|
|
L"Log files (*.log, *.csv)", L"*.log;*.csv",
|
|
L"All files (*.*)", L"*.*",
|
|
};
|
|
|
|
R_FILE_DIALOG file_dialog;
|
|
PR_STRING path;
|
|
|
|
if (_r_filedialog_initialize (&file_dialog, PR_FILEDIALOG_SAVEFILE))
|
|
{
|
|
_r_filedialog_setfilter (&file_dialog, filters, RTL_NUMBER_OF (filters));
|
|
|
|
path = _r_ctrl_getstring (hwnd, IDC_LOGPATH);
|
|
|
|
if (path)
|
|
_r_filedialog_setpath (&file_dialog, path->buffer);
|
|
|
|
if (_r_filedialog_show (hwnd, &file_dialog))
|
|
{
|
|
_r_obj_movereference (&path, _r_filedialog_getpath (&file_dialog));
|
|
|
|
if (path)
|
|
{
|
|
_r_config_setstringexpand (L"LogPath", path->buffer);
|
|
_r_ctrl_setstring (hwnd, IDC_LOGPATH, path->buffer);
|
|
|
|
_app_loginit (_r_config_getboolean (L"IsLogEnabled", FALSE));
|
|
}
|
|
}
|
|
|
|
if (path)
|
|
_r_obj_dereference (path);
|
|
|
|
_r_filedialog_destroy (&file_dialog);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LOGVIEWER:
|
|
{
|
|
PR_STRING log_viewer;
|
|
|
|
if (notify_code != EN_KILLFOCUS)
|
|
break;
|
|
|
|
log_viewer = _r_ctrl_getstring (hwnd, ctrl_id);
|
|
|
|
if (!log_viewer)
|
|
break;
|
|
|
|
_r_config_setstringexpand (L"LogViewer", log_viewer->buffer);
|
|
|
|
_r_obj_dereference (log_viewer);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LOGVIEWER_BTN:
|
|
{
|
|
static COMDLG_FILTERSPEC filters[] = {
|
|
L"Executable files (*.exe)", L"*.exe",
|
|
L"All files (*.*)", L"*.*",
|
|
};
|
|
|
|
R_FILE_DIALOG file_dialog;
|
|
PR_STRING path;
|
|
|
|
if (_r_filedialog_initialize (&file_dialog, PR_FILEDIALOG_OPENFILE))
|
|
{
|
|
_r_filedialog_setfilter (&file_dialog, filters, RTL_NUMBER_OF (filters));
|
|
|
|
path = _r_ctrl_getstring (hwnd, IDC_LOGVIEWER);
|
|
|
|
if (path)
|
|
_r_filedialog_setpath (&file_dialog, path->buffer);
|
|
|
|
if (_r_filedialog_show (hwnd, &file_dialog))
|
|
{
|
|
_r_obj_movereference (&path, _r_filedialog_getpath (&file_dialog));
|
|
|
|
if (path)
|
|
{
|
|
_r_config_setstringexpand (L"LogViewer", path->buffer);
|
|
_r_ctrl_setstring (hwnd, IDC_LOGVIEWER, path->buffer);
|
|
}
|
|
}
|
|
|
|
if (path)
|
|
_r_obj_dereference (path);
|
|
|
|
_r_filedialog_destroy (&file_dialog);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_LOGSIZELIMIT_CTRL:
|
|
{
|
|
ULONG value;
|
|
|
|
if (notify_code != EN_KILLFOCUS)
|
|
break;
|
|
|
|
value = (ULONG)SendDlgItemMessage (hwnd, IDC_LOGSIZELIMIT, UDM_GETPOS32, 0, 0);
|
|
|
|
_r_config_setulong (L"LogSizeLimitKb", value);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_ENABLENOTIFICATIONS_CHK:
|
|
{
|
|
HWND hctrl;
|
|
BOOLEAN is_postmessage;
|
|
BOOLEAN is_enabled;
|
|
|
|
is_postmessage = ((INT)lparam == WM_APP);
|
|
is_enabled = _r_ctrl_isbuttonchecked (hwnd, ctrl_id);
|
|
|
|
if (!is_postmessage)
|
|
_r_config_setboolean (L"IsNotificationsEnabled", is_enabled);
|
|
|
|
SendDlgItemMessage (
|
|
config.hrebar,
|
|
IDC_TOOLBAR,
|
|
TB_PRESSBUTTON,
|
|
IDM_TRAY_ENABLENOTIFICATIONS_CHK,
|
|
MAKELPARAM (is_enabled, 0)
|
|
);
|
|
|
|
_r_ctrl_enable (hwnd, IDC_NOTIFICATIONSOUND_CHK, is_enabled);
|
|
_r_ctrl_enable (hwnd, IDC_NOTIFICATIONONTRAY_CHK, is_enabled);
|
|
|
|
hctrl = (HWND)SendDlgItemMessage (hwnd, IDC_NOTIFICATIONTIMEOUT, UDM_GETBUDDY, 0, 0);
|
|
|
|
if (hctrl)
|
|
_r_ctrl_enable (hctrl, 0, is_enabled);
|
|
|
|
PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDC_NOTIFICATIONSOUND_CHK, 0), WM_APP);
|
|
|
|
if (is_postmessage)
|
|
break;
|
|
|
|
hctrl = _app_notify_getwindow (NULL);
|
|
|
|
if (hctrl)
|
|
_app_notify_refresh (hctrl);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_NOTIFICATIONSOUND_CHK:
|
|
{
|
|
BOOLEAN is_postmessage;
|
|
BOOLEAN is_checked;
|
|
|
|
is_postmessage = ((INT)lparam == WM_APP);
|
|
is_checked = _r_ctrl_isbuttonchecked (hwnd, ctrl_id);
|
|
|
|
_r_ctrl_checkbutton (hwnd, IDC_NOTIFICATIONFULLSCREENSILENTMODE_CHK, _r_config_getboolean (L"IsNotificationsFullscreenSilentMode", TRUE));
|
|
|
|
if (!is_postmessage)
|
|
_r_config_setboolean (L"IsNotificationsSound", is_checked);
|
|
|
|
_r_ctrl_enable (hwnd, IDC_NOTIFICATIONFULLSCREENSILENTMODE_CHK, _r_ctrl_isenabled (hwnd, ctrl_id) && is_checked);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_NOTIFICATIONFULLSCREENSILENTMODE_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsNotificationsFullscreenSilentMode", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_NOTIFICATIONONTRAY_CHK:
|
|
{
|
|
HWND hnotify;
|
|
|
|
_r_config_setboolean (L"IsNotificationsOnTray", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
hnotify = _app_notify_getwindow (NULL);
|
|
|
|
if (hnotify)
|
|
_app_notify_setposition (hnotify, TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_NOTIFICATIONTIMEOUT_CTRL:
|
|
{
|
|
if (notify_code == EN_KILLFOCUS)
|
|
{
|
|
_r_config_setulong (L"NotificationsTimeout", (ULONG)SendDlgItemMessage (hwnd, IDC_NOTIFICATIONTIMEOUT, UDM_GETPOS32, 0, 0));
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_EXCLUDESTEALTH_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsExcludeStealth", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_EXCLUDECLASSIFYALLOW_CHK:
|
|
{
|
|
HANDLE hengine;
|
|
|
|
_r_config_setboolean (L"IsExcludeClassifyAllow", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (hengine)
|
|
_wfp_logsetoption (hengine);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDC_EXCLUDEBLOCKLIST_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsExcludeBlocklist", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
break;
|
|
}
|
|
|
|
case IDC_EXCLUDECUSTOM_CHK:
|
|
{
|
|
_r_config_setboolean (L"IsExcludeCustomRules", _r_ctrl_isbuttonchecked (hwnd, ctrl_id));
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
INT _app_addwindowtabs (
|
|
_In_ HWND hwnd
|
|
)
|
|
{
|
|
INT tabs_count = 0;
|
|
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_APPS_PROFILE);
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_APPS_SERVICE);
|
|
|
|
// uwp apps (win8+)
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_APPS_UWP);
|
|
|
|
if (!_r_config_getboolean (L"IsInternalRulesDisabled", FALSE))
|
|
{
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_RULES_BLOCKLIST);
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_RULES_SYSTEM);
|
|
}
|
|
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_RULES_CUSTOM);
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_NETWORK);
|
|
_r_tab_additem (hwnd, IDC_TAB, tabs_count++, L"", I_IMAGENONE, (LPARAM)IDC_LOG);
|
|
|
|
return tabs_count;
|
|
}
|
|
|
|
VOID _app_tabs_init (
|
|
_In_ HWND hwnd,
|
|
_In_ LONG dpi_value
|
|
)
|
|
{
|
|
RECT rect = {0};
|
|
LONG statusbar_height;
|
|
LONG rebar_height;
|
|
ULONG style;
|
|
HWND hlistview;
|
|
INT listview_id;
|
|
INT tabs_count;
|
|
|
|
statusbar_height = _r_status_getheight (hwnd, IDC_STATUSBAR);
|
|
rebar_height = _r_rebar_getheight (hwnd, IDC_REBAR);
|
|
|
|
GetClientRect (hwnd, &rect);
|
|
|
|
SetWindowPos (
|
|
config.hrebar,
|
|
NULL,
|
|
0,
|
|
0,
|
|
rect.right,
|
|
rebar_height,
|
|
SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER
|
|
);
|
|
|
|
SetWindowPos (
|
|
GetDlgItem (hwnd, IDC_TAB),
|
|
NULL
|
|
,
|
|
0,
|
|
rebar_height,
|
|
rect.right,
|
|
rect.bottom - rebar_height - statusbar_height,
|
|
SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER
|
|
);
|
|
|
|
_app_listview_loadfont (dpi_value, TRUE);
|
|
|
|
style = LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP |
|
|
LVS_EX_HEADERINALLVIEWS | LVS_EX_HEADERDRAGDROP;
|
|
|
|
tabs_count = _app_addwindowtabs (hwnd);
|
|
|
|
for (INT i = 0; i < tabs_count; i++)
|
|
{
|
|
listview_id = _app_listview_getbytab (hwnd, i);
|
|
hlistview = GetDlgItem (hwnd, listview_id);
|
|
|
|
if (!hlistview)
|
|
continue;
|
|
|
|
_r_tab_adjustchild (hwnd, IDC_TAB, hlistview);
|
|
|
|
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_RULES_CUSTOM)
|
|
{
|
|
_r_listview_setstyle (hwnd, listview_id, style | LVS_EX_CHECKBOXES, TRUE); // with checkboxes
|
|
|
|
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
|
|
{
|
|
_r_listview_addcolumn (hwnd, listview_id, 0, L"", -80, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 1, L"", -20, LVCFMT_RIGHT);
|
|
}
|
|
else
|
|
{
|
|
_r_listview_addcolumn (hwnd, listview_id, 0, L"", -80, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 1, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 2, L"", -10, LVCFMT_RIGHT);
|
|
}
|
|
|
|
_r_listview_addgroup (hwnd, listview_id, 0, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
_r_listview_addgroup (hwnd, listview_id, 1, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
_r_listview_addgroup (hwnd, listview_id, 2, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
_r_listview_addgroup (hwnd, listview_id, 3, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
_r_listview_addgroup (hwnd, listview_id, 4, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
}
|
|
else if (listview_id == IDC_NETWORK)
|
|
{
|
|
_r_listview_setstyle (hwnd, listview_id, style, TRUE);
|
|
|
|
_r_listview_addcolumn (hwnd, listview_id, 0, L"", -20, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 1, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 2, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 3, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 4, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 5, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 6, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 7, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 8, L"", -10, LVCFMT_RIGHT);
|
|
|
|
_r_listview_addgroup (hwnd, listview_id, 0, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
_r_listview_addgroup (hwnd, listview_id, 1, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
_r_listview_addgroup (hwnd, listview_id, 2, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
|
|
}
|
|
else if (listview_id == IDC_LOG)
|
|
{
|
|
_r_listview_setstyle (hwnd, listview_id, style, TRUE);
|
|
|
|
_r_listview_addcolumn (hwnd, listview_id, 0, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 1, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 2, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 3, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 4, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 5, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 6, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 7, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 8, L"", -10, LVCFMT_LEFT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 9, L"", -10, LVCFMT_RIGHT);
|
|
_r_listview_addcolumn (hwnd, listview_id, 10, L"", -10, LVCFMT_LEFT);
|
|
|
|
_r_listview_addgroup (hwnd, listview_id, 0, L"", 0, LVGS_NOHEADER, LVGS_NOHEADER);
|
|
}
|
|
|
|
// add filter group
|
|
_r_listview_addgroup (hwnd, listview_id, LV_HIDDEN_GROUP_ID, L"", 0, LVGS_HIDDEN | LVGS_NOHEADER | LVGS_COLLAPSED, LVGS_HIDDEN | LVGS_NOHEADER | LVGS_COLLAPSED);
|
|
|
|
_app_listview_setfont (hwnd, listview_id);
|
|
|
|
BringWindowToTop (hlistview); // HACK!!!
|
|
}
|
|
}
|
|
|
|
VOID _app_initialize ()
|
|
{
|
|
static ULONG privileges[] = {
|
|
SE_SECURITY_PRIVILEGE,
|
|
SE_TAKE_OWNERSHIP_PRIVILEGE,
|
|
SE_INC_BASE_PRIORITY_PRIVILEGE,
|
|
SE_BACKUP_PRIVILEGE,
|
|
SE_RESTORE_PRIVILEGE,
|
|
SE_DEBUG_PRIVILEGE,
|
|
};
|
|
|
|
R_ENVIRONMENT environment;
|
|
|
|
// set privileges
|
|
_r_sys_setprocessprivilege (NtCurrentProcess (), privileges, RTL_NUMBER_OF (privileges), TRUE);
|
|
|
|
// set process priority
|
|
_r_sys_setenvironment (&environment, PROCESS_PRIORITY_CLASS_HIGH, IoPriorityHigh, MEMORY_PRIORITY_NORMAL);
|
|
|
|
_r_sys_setprocessenvironment (NtCurrentProcess (), &environment);
|
|
|
|
// initialize workqueue
|
|
_r_sys_setenvironment (&environment, THREAD_PRIORITY_ABOVE_NORMAL, IoPriorityHigh, MEMORY_PRIORITY_NORMAL);
|
|
|
|
_r_workqueue_initialize (&file_queue, 12, &environment, L"FilesQueue");
|
|
_r_workqueue_initialize (&log_queue, 6, &environment, L"PacketsQueue");
|
|
_r_workqueue_initialize (&resolver_queue, 6, &environment, L"ResolverQueue");
|
|
_r_workqueue_initialize (&resolve_notify_queue, 2, &environment, L"NotificationQueue");
|
|
|
|
_r_sys_setenvironment (&environment, THREAD_PRIORITY_HIGHEST, IoPriorityHigh, MEMORY_PRIORITY_NORMAL);
|
|
|
|
_r_workqueue_initialize (&wfp_queue, 1, &environment, L"FiltersQueue");
|
|
|
|
// static initializer
|
|
_r_sys_getsystemroot (&config.windows_dir);
|
|
|
|
_app_profile_initialize ();
|
|
|
|
config.my_path = _r_obj_createstring (_r_sys_getimagepath ());
|
|
|
|
config.svchost_path = _r_obj_concatstrings (
|
|
2,
|
|
_r_sys_getsystemdirectory ()->buffer,
|
|
PATH_SVCHOST
|
|
);
|
|
|
|
config.system_path = _r_obj_createstring (PROC_SYSTEM_NAME);
|
|
|
|
config.ntoskrnl_path = _r_obj_concatstrings (
|
|
2,
|
|
_r_sys_getsystemdirectory ()->buffer,
|
|
PATH_NTOSKRNL
|
|
);
|
|
|
|
config.my_hash = _r_str_gethash2 (config.my_path, TRUE);
|
|
config.ntoskrnl_hash = _r_str_gethash2 (config.system_path, TRUE);
|
|
config.svchost_hash = _r_str_gethash2 (config.svchost_path, TRUE);
|
|
|
|
// initialize free list
|
|
_r_freelist_initialize (&context_free_list, sizeof (ITEM_CONTEXT), 32);
|
|
_r_freelist_initialize (&listview_free_list, sizeof (ITEM_LISTVIEW_CONTEXT), 2048);
|
|
|
|
// initialize colors array
|
|
if (!colors_table)
|
|
{
|
|
colors_table = _r_obj_createhashtable (sizeof (ITEM_COLOR), NULL);
|
|
|
|
// initialize colors
|
|
config.color_invalid = _app_addcolor (IDS_HIGHLIGHT_INVALID, L"IsHighlightInvalid", TRUE, L"ColorInvalid", LV_COLOR_INVALID);
|
|
config.color_special = _app_addcolor (IDS_HIGHLIGHT_SPECIAL, L"IsHighlightSpecial", TRUE, L"ColorSpecial", LV_COLOR_SPECIAL);
|
|
config.color_signed = _app_addcolor (IDS_HIGHLIGHT_SIGNED, L"IsHighlightSigned", TRUE, L"ColorSigned", LV_COLOR_SIGNED);
|
|
config.color_pico = _app_addcolor (IDS_HIGHLIGHT_PICO, L"IsHighlightPico", TRUE, L"ColorPico", LV_COLOR_PICO);
|
|
config.color_system = _app_addcolor (IDS_HIGHLIGHT_SYSTEM, L"IsHighlightSystem", TRUE, L"ColorSystem", LV_COLOR_SYSTEM);
|
|
config.color_network = _app_addcolor (IDS_HIGHLIGHT_CONNECTION, L"IsHighlightConnection", TRUE, L"ColorConnection", LV_COLOR_CONNECTION);
|
|
}
|
|
|
|
_app_generate_credentials ();
|
|
|
|
// load default icons
|
|
_app_icons_getdefault ();
|
|
|
|
// initialize global filters array object
|
|
filter_ids = _r_obj_createarray (sizeof (GUID), NULL);
|
|
|
|
// initialize apps table
|
|
apps_table = _r_obj_createhashtablepointer (32);
|
|
|
|
// initialize rules array object
|
|
rules_list = _r_obj_createlist (&_r_obj_dereference);
|
|
|
|
// initialize rules configuration table
|
|
rules_config = _r_obj_createhashtable (sizeof (ITEM_RULE_CONFIG), &_app_dereferenceruleconfig);
|
|
|
|
// initialize log hashtable object
|
|
log_table = _r_obj_createhashtablepointer (32);
|
|
|
|
// initialize cache table
|
|
cache_information = _r_obj_createhashtablepointer (32);
|
|
|
|
cache_resolution = _r_obj_createhashtablepointer (32);
|
|
|
|
config.hnotify_evt = CreateEvent (NULL, FALSE, TRUE, NULL);
|
|
}
|
|
|
|
INT FirstDriveFromMask (
|
|
_In_ ULONG unitmask
|
|
)
|
|
{
|
|
INT i;
|
|
|
|
for (i = 0; i < PR_DEVICE_COUNT; ++i)
|
|
{
|
|
if (unitmask & 0x1)
|
|
break;
|
|
|
|
unitmask = unitmask >> 1;
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
INT_PTR CALLBACK DlgProc (
|
|
_In_ HWND hwnd,
|
|
_In_ UINT msg,
|
|
_In_ WPARAM wparam,
|
|
_In_ LPARAM lparam
|
|
)
|
|
{
|
|
switch (msg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
WCHAR internal_profile_version[64];
|
|
ENUM_INSTALL_TYPE install_type;
|
|
LONG dpi_value;
|
|
|
|
// initialize vars
|
|
dpi_value = _r_dc_getwindowdpi (hwnd);
|
|
|
|
_r_app_sethwnd (hwnd); // HACK!!!
|
|
|
|
_app_initialize ();
|
|
|
|
// init buffered paint
|
|
BufferedPaintInit ();
|
|
|
|
// allow drag&drop support
|
|
DragAcceptFiles (hwnd, TRUE);
|
|
|
|
// restore window position (required!)
|
|
_r_window_restoreposition (hwnd, L"window");
|
|
|
|
// initialize imagelist
|
|
_app_imagelist_init (hwnd, dpi_value);
|
|
|
|
// initialize toolbar
|
|
_app_toolbar_init (hwnd, dpi_value);
|
|
_app_toolbar_resize (hwnd, dpi_value);
|
|
|
|
// initialize tabs
|
|
_app_tabs_init (hwnd, dpi_value);
|
|
|
|
// load profile
|
|
_app_profile_load (hwnd, NULL);
|
|
|
|
// install filters
|
|
install_type = _wfp_isfiltersinstalled ();
|
|
|
|
if (install_type != INSTALL_DISABLED)
|
|
{
|
|
if (install_type == INSTALL_ENABLED_TEMPORARY)
|
|
config.is_filterstemporary = TRUE;
|
|
|
|
_app_changefilters (hwnd, TRUE, TRUE);
|
|
}
|
|
else
|
|
{
|
|
_r_status_settext (hwnd, IDC_STATUSBAR, 0, _app_getstatelocale (install_type));
|
|
}
|
|
|
|
// initialize settings
|
|
_r_settings_addpage (IDD_SETTINGS_GENERAL, IDS_SETTINGS_GENERAL);
|
|
_r_settings_addpage (IDD_SETTINGS_INTERFACE, IDS_TITLE_INTERFACE);
|
|
_r_settings_addpage (IDD_SETTINGS_HIGHLIGHTING, IDS_TITLE_HIGHLIGHTING);
|
|
_r_settings_addpage (IDD_SETTINGS_RULES, IDS_TRAY_RULES);
|
|
|
|
if (!_r_config_getboolean (L"IsInternalRulesDisabled", FALSE))
|
|
_r_settings_addpage (IDD_SETTINGS_BLOCKLIST, IDS_TRAY_BLOCKLIST_RULES);
|
|
|
|
// dropped packets logging (win7+)
|
|
_r_settings_addpage (IDD_SETTINGS_NOTIFICATIONS, IDS_TITLE_NOTIFICATIONS);
|
|
_r_settings_addpage (IDD_SETTINGS_LOGGING, IDS_TITLE_LOGGING);
|
|
_r_settings_addpage (IDD_SETTINGS_EXCLUDE, IDS_TITLE_EXCLUDE);
|
|
|
|
// add blocklist to update
|
|
if (!_r_config_getboolean (L"IsInternalRulesDisabled", FALSE))
|
|
{
|
|
_r_str_fromlong64 (internal_profile_version, RTL_NUMBER_OF (internal_profile_version), profile_info.profile_internal_timestamp);
|
|
|
|
_r_update_addcomponent (L"Internal rules", L"rules_internal", internal_profile_version, profile_info.profile_path_internal, FALSE);
|
|
}
|
|
|
|
_app_network_initialize (hwnd);
|
|
|
|
// initialize tab
|
|
_app_settab_id (hwnd, _r_config_getlong (L"CurrentTab", IDC_APPS_PROFILE));
|
|
|
|
_app_fileloggingenable ();
|
|
|
|
break;
|
|
}
|
|
|
|
case RM_INITIALIZE:
|
|
{
|
|
_app_message_initialize (hwnd);
|
|
break;
|
|
}
|
|
|
|
case RM_UNINITIALIZE:
|
|
{
|
|
_app_message_uninitialize (hwnd);
|
|
break;
|
|
}
|
|
|
|
case RM_LOCALIZE:
|
|
{
|
|
_app_message_localize (hwnd);
|
|
break;
|
|
}
|
|
|
|
case RM_TASKBARCREATED:
|
|
{
|
|
ENUM_INSTALL_TYPE install_type;
|
|
|
|
install_type = _wfp_getinstalltype ();
|
|
|
|
// refresh tray icon
|
|
_r_tray_create (hwnd, &GUID_TrayIcon, RM_TRAYICON, NULL, NULL, FALSE);
|
|
|
|
_app_settrayicon (hwnd, install_type);
|
|
|
|
break;
|
|
}
|
|
|
|
case RM_CONFIG_UPDATE:
|
|
{
|
|
_app_profile_load (hwnd, NULL);
|
|
|
|
_app_changefilters (hwnd, TRUE, FALSE);
|
|
|
|
break;
|
|
}
|
|
|
|
case RM_CONFIG_RESET:
|
|
{
|
|
_r_queuedlock_acquireexclusive (&lock_rules_config);
|
|
_r_obj_clearhashtable (rules_config);
|
|
_r_queuedlock_releaseexclusive (&lock_rules_config);
|
|
|
|
_r_path_makebackup (profile_info.profile_path, TRUE);
|
|
|
|
_app_profile_initialize ();
|
|
_app_profile_load (hwnd, NULL);
|
|
|
|
_app_changefilters (hwnd, TRUE, FALSE);
|
|
|
|
break;
|
|
}
|
|
|
|
case RM_TRAYICON:
|
|
{
|
|
switch (LOWORD (lparam))
|
|
{
|
|
case NIN_KEYSELECT:
|
|
{
|
|
if (GetForegroundWindow () != hwnd)
|
|
_r_wnd_toggle (hwnd, TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_MBUTTONUP:
|
|
{
|
|
PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (IDM_TRAY_LOGSHOW, 0), 0);
|
|
break;
|
|
}
|
|
|
|
case WM_LBUTTONUP:
|
|
{
|
|
if (_r_config_getboolean (L"IsTrayIconSingleClick", TRUE))
|
|
{
|
|
_r_wnd_toggle (hwnd, FALSE);
|
|
}
|
|
else
|
|
{
|
|
SetForegroundWindow (hwnd);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_LBUTTONDBLCLK:
|
|
{
|
|
if (!_r_config_getboolean (L"IsTrayIconSingleClick", TRUE))
|
|
_r_wnd_toggle (hwnd, FALSE);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_CONTEXTMENU:
|
|
{
|
|
_app_message_traycontextmenu (hwnd);
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_NOTIFICATION:
|
|
{
|
|
PITEM_LOG ptr_log;
|
|
HWND hnotify;
|
|
|
|
if (_r_queuedlock_tryacquireexclusive (&lock_notify))
|
|
{
|
|
ptr_log = _r_obj_reference ((PITEM_LOG)lparam);
|
|
hnotify = _app_notify_getwindow (ptr_log);
|
|
|
|
_r_queuedlock_releaseexclusive (&lock_notify);
|
|
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, (LONG_PTR)hnotify);
|
|
return (INT_PTR)hnotify;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_CLOSE:
|
|
{
|
|
LPCWSTR cfg_name;
|
|
UINT locale_id;
|
|
|
|
if (_wfp_isfiltersinstalled ())
|
|
{
|
|
if (_app_istimersactive ())
|
|
{
|
|
cfg_name = L"ConfirmExitTimer";
|
|
locale_id = IDS_QUESTION_TIMER;
|
|
}
|
|
else
|
|
{
|
|
cfg_name = L"ConfirmExit2";
|
|
locale_id = IDS_QUESTION_EXIT;
|
|
}
|
|
|
|
if (!_r_show_confirmmessage (hwnd, NULL, _r_locale_getstring (locale_id), cfg_name))
|
|
{
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
DestroyWindow (hwnd);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_DESTROY:
|
|
{
|
|
HANDLE hengine;
|
|
|
|
_app_loginit (FALSE);
|
|
|
|
_r_config_setlong (L"CurrentTab", _app_listview_getcurrent (hwnd));
|
|
|
|
if (_r_queuedlock_islocked (&lock_apply))
|
|
{
|
|
_r_workqueue_waitforfinish (&wfp_queue);
|
|
_r_workqueue_destroy (&wfp_queue);
|
|
}
|
|
|
|
_r_tray_destroy (hwnd, &GUID_TrayIcon);
|
|
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (hengine)
|
|
_wfp_uninitialize (hengine, FALSE);
|
|
|
|
ImageList_Destroy (config.himg_toolbar);
|
|
ImageList_Destroy (config.himg_rules_small);
|
|
ImageList_Destroy (config.himg_rules_large);
|
|
|
|
BufferedPaintUnInit ();
|
|
|
|
PostQuitMessage (0);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_DROPFILES:
|
|
{
|
|
PR_STRING string;
|
|
HDROP hdrop;
|
|
ULONG_PTR app_hash;
|
|
ULONG numfiles;
|
|
ULONG length;
|
|
|
|
hdrop = (HDROP)wparam;
|
|
numfiles = DragQueryFile (hdrop, UINT32_MAX, NULL, 0);
|
|
app_hash = 0;
|
|
|
|
for (ULONG i = 0; i < numfiles; i++)
|
|
{
|
|
length = DragQueryFile (hdrop, i, NULL, 0);
|
|
string = _r_obj_createstring_ex (NULL, length * sizeof (WCHAR));
|
|
|
|
if (DragQueryFile (hdrop, i, string->buffer, length + 1))
|
|
app_hash = _app_addapplication (hwnd, DATA_UNKNOWN, string, NULL, NULL);
|
|
|
|
_r_obj_dereference (string);
|
|
}
|
|
|
|
DragFinish (hdrop);
|
|
|
|
_app_profile_save ();
|
|
|
|
if (!app_hash)
|
|
break;
|
|
|
|
_app_listview_updateby_param (hwnd, app_hash, PR_SETITEM_UPDATE, TRUE);
|
|
_app_listview_showitemby_param (hwnd, app_hash, TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_DPICHANGED:
|
|
{
|
|
_r_wnd_message_dpichanged (hwnd, wparam, lparam);
|
|
|
|
_app_message_dpichanged (hwnd, LOWORD (wparam));
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_THEMECHANGED:
|
|
{
|
|
LONG dpi_value;
|
|
|
|
dpi_value = _r_dc_getwindowdpi (hwnd);
|
|
|
|
_app_windowloadfont (dpi_value);
|
|
_app_listview_loadfont (dpi_value, TRUE);
|
|
|
|
_app_listview_updateby_id (hwnd, DATA_LISTVIEW_CURRENT, PR_UPDATE_TYPE | PR_UPDATE_FORCE);
|
|
|
|
SendMessage (hwnd, WM_SIZE, 0, 0);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_SIZE:
|
|
{
|
|
RECT rect;
|
|
LONG dpi_value;
|
|
|
|
if (GetClientRect (hwnd, &rect))
|
|
{
|
|
dpi_value = _r_dc_getwindowdpi (hwnd);
|
|
|
|
_app_window_resize (hwnd, &rect, dpi_value);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_GETMINMAXINFO:
|
|
{
|
|
LPMINMAXINFO minmax;
|
|
R_SIZE point = {0};
|
|
LONG dpi_value;
|
|
|
|
minmax = (LPMINMAXINFO)lparam;
|
|
|
|
point.cx = 320;
|
|
point.cy = 120;
|
|
|
|
dpi_value = _r_dc_getwindowdpi (hwnd);
|
|
|
|
_r_dc_getsizedpivalue (&point, dpi_value, TRUE);
|
|
|
|
minmax->ptMinTrackSize.x = point.cx;
|
|
minmax->ptMinTrackSize.y = point.cy;
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR nmlp;
|
|
|
|
nmlp = (LPNMHDR)lparam;
|
|
|
|
switch (nmlp->code)
|
|
{
|
|
case TCN_SELCHANGING:
|
|
{
|
|
HWND hlistview;
|
|
INT listview_id;
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
|
|
if (!listview_id)
|
|
break;
|
|
|
|
hlistview = GetDlgItem (hwnd, listview_id);
|
|
|
|
if (!hlistview)
|
|
break;
|
|
|
|
ShowWindow (hlistview, SW_HIDE);
|
|
|
|
break;
|
|
}
|
|
|
|
case TCN_SELCHANGE:
|
|
{
|
|
HWND hlistview;
|
|
INT listview_id;
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
|
|
if (!listview_id)
|
|
break;
|
|
|
|
hlistview = GetDlgItem (hwnd, listview_id);
|
|
|
|
if (!hlistview)
|
|
break;
|
|
|
|
_app_search_applyfilter (hwnd, listview_id, config.search_string);
|
|
|
|
_app_listview_updateby_id (hwnd, listview_id, PR_UPDATE_FORCE | PR_UPDATE_NORESIZE);
|
|
|
|
ShowWindow (hlistview, SW_SHOWNA);
|
|
|
|
if (_r_wnd_isvisible_ex (hwnd)) // HACK!!!
|
|
SetFocus (hlistview);
|
|
|
|
_app_listview_resize (hwnd, listview_id);
|
|
|
|
break;
|
|
}
|
|
|
|
case NM_CUSTOMDRAW:
|
|
{
|
|
LONG_PTR result;
|
|
|
|
result = _app_message_custdraw (hwnd, (LPNMLVCUSTOMDRAW)lparam);
|
|
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, result);
|
|
return result;
|
|
}
|
|
|
|
case LVN_INSERTITEM:
|
|
{
|
|
LPNMLISTVIEW lpnmlv;
|
|
PITEM_LISTVIEW_CONTEXT context;
|
|
INT listview_id;
|
|
|
|
lpnmlv = (LPNMLISTVIEW)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
if (!(listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_LOG))
|
|
break;
|
|
|
|
if (_r_obj_isstringempty (config.search_string))
|
|
break;
|
|
|
|
context = (PITEM_LISTVIEW_CONTEXT)_r_listview_getitemlparam (hwnd, listview_id, lpnmlv->iItem);
|
|
|
|
if (!context)
|
|
break;
|
|
|
|
_app_search_applyfilteritem (hwnd, listview_id, lpnmlv->iItem, context, config.search_string);
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_DELETEITEM:
|
|
{
|
|
LPNMLISTVIEW lpnmlv;
|
|
PITEM_LISTVIEW_CONTEXT context;
|
|
INT listview_id;
|
|
|
|
lpnmlv = (LPNMLISTVIEW)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
if (!(listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_LOG))
|
|
break;
|
|
|
|
context = (PITEM_LISTVIEW_CONTEXT)lpnmlv->lParam;
|
|
|
|
if (!context)
|
|
break;
|
|
|
|
_app_listview_destroycontext (context);
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_COLUMNCLICK:
|
|
{
|
|
LPNMLISTVIEW lpnmlv;
|
|
INT ctrl_id;
|
|
|
|
lpnmlv = (LPNMLISTVIEW)lparam;
|
|
ctrl_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
_app_listview_sort_ex (hwnd, ctrl_id, lpnmlv->iSubItem, TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_GETINFOTIP:
|
|
{
|
|
LPNMLVGETINFOTIP lpnmlv;
|
|
PR_STRING string;
|
|
INT listview_id;
|
|
|
|
lpnmlv = (LPNMLVGETINFOTIP)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
lparam = _app_listview_getitemcontext (hwnd, listview_id, lpnmlv->iItem);
|
|
|
|
string = _app_gettooltipbylparam (hwnd, listview_id, lparam);
|
|
|
|
if (!string)
|
|
break;
|
|
|
|
_r_str_copy (lpnmlv->pszText, lpnmlv->cchTextMax, string->buffer);
|
|
|
|
_r_obj_dereference (string);
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_ITEMCHANGING:
|
|
{
|
|
LPNMLISTVIEW lpnmlv;
|
|
INT listview_id;
|
|
ULONG_PTR app_hash;
|
|
|
|
lpnmlv = (LPNMLISTVIEW)lparam;
|
|
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
if (_app_listview_islocked (hwnd, listview_id))
|
|
break;
|
|
|
|
if (!(lpnmlv->uChanged & LVIF_STATE))
|
|
break;
|
|
|
|
if (!lpnmlv->lParam)
|
|
break;
|
|
|
|
if ((listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP))
|
|
{
|
|
app_hash = _app_listview_getcontextcode (lpnmlv->lParam);
|
|
|
|
if ((lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (1))
|
|
{
|
|
if (app_hash == config.my_hash)
|
|
{
|
|
if (!_r_show_confirmmessage (
|
|
hwnd,
|
|
L"WARNING!",
|
|
SZ_WARNING_ME,
|
|
NULL))
|
|
{
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
else if ((lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (2))
|
|
{
|
|
if (app_hash == config.svchost_hash)
|
|
{
|
|
if (!_r_show_confirmmessage (
|
|
hwnd,
|
|
L"WARNING!",
|
|
SZ_WARNING_SVCHOST,
|
|
NULL))
|
|
{
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
else if (app_hash != config.my_hash)
|
|
{
|
|
if (!_r_show_confirmmessage (
|
|
hwnd,
|
|
NULL,
|
|
_r_locale_getstring (IDS_QUESTION_ALLOW),
|
|
L"ConfirmAllow"))
|
|
{
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_ITEMCHANGED:
|
|
{
|
|
LPNMLISTVIEW lpnmlv;
|
|
HANDLE hengine;
|
|
PR_LIST rules;
|
|
PITEM_APP ptr_app;
|
|
PITEM_RULE ptr_rule;
|
|
ULONG_PTR app_hash;
|
|
ULONG_PTR rule_idx;
|
|
INT listview_id;
|
|
BOOLEAN is_changed;
|
|
BOOLEAN is_enabled;
|
|
|
|
lpnmlv = (LPNMLISTVIEW)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
if ((lpnmlv->uChanged & LVIF_STATE) == 0)
|
|
break;
|
|
|
|
if ((lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (1) ||
|
|
((lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (2)))
|
|
{
|
|
if (_app_listview_islocked (hwnd, (INT)(INT_PTR)lpnmlv->hdr.idFrom))
|
|
break;
|
|
|
|
is_changed = FALSE;
|
|
is_enabled = (lpnmlv->uNewState & LVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK (2);
|
|
|
|
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
|
|
{
|
|
app_hash = _app_listview_getcontextcode (lpnmlv->lParam);
|
|
ptr_app = _app_getappitem (app_hash);
|
|
|
|
if (!ptr_app)
|
|
break;
|
|
|
|
if (ptr_app->is_enabled != is_enabled)
|
|
{
|
|
ptr_app->is_enabled = is_enabled;
|
|
|
|
_app_listview_lock (hwnd, listview_id, TRUE);
|
|
_app_setappiteminfo (hwnd, listview_id, lpnmlv->iItem, ptr_app);
|
|
_app_listview_lock (hwnd, listview_id, FALSE);
|
|
|
|
if (is_enabled)
|
|
_app_notify_freeobject (NULL, ptr_app);
|
|
|
|
if (!is_enabled && _app_istimerset (ptr_app))
|
|
_app_timer_reset (hwnd, ptr_app);
|
|
|
|
if (_wfp_isfiltersinstalled ())
|
|
{
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (hengine)
|
|
{
|
|
rules = _r_obj_createlist (NULL);
|
|
|
|
_r_obj_addlistitem (rules, ptr_app);
|
|
|
|
_wfp_create3filters (hengine, rules, DBG_ARG, FALSE);
|
|
|
|
_r_obj_dereference (rules);
|
|
}
|
|
}
|
|
|
|
is_changed = TRUE;
|
|
}
|
|
|
|
_r_obj_dereference (ptr_app);
|
|
}
|
|
else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
|
|
{
|
|
rule_idx = _app_listview_getcontextcode (lpnmlv->lParam);
|
|
ptr_rule = _app_getrulebyid (rule_idx);
|
|
|
|
if (!ptr_rule)
|
|
break;
|
|
|
|
if (ptr_rule->is_enabled != is_enabled)
|
|
{
|
|
_app_listview_lock (hwnd, listview_id, TRUE);
|
|
|
|
_app_ruleenable (ptr_rule, is_enabled, TRUE);
|
|
_app_setruleiteminfo (hwnd, listview_id, lpnmlv->iItem, ptr_rule, TRUE);
|
|
|
|
_app_listview_lock (hwnd, listview_id, FALSE);
|
|
|
|
if (_wfp_isfiltersinstalled ())
|
|
{
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (hengine)
|
|
{
|
|
rules = _r_obj_createlist (NULL);
|
|
|
|
_r_obj_addlistitem (rules, ptr_rule);
|
|
|
|
_wfp_create4filters (hengine, rules, DBG_ARG, FALSE);
|
|
|
|
_r_obj_dereference (rules);
|
|
}
|
|
}
|
|
|
|
is_changed = TRUE;
|
|
}
|
|
|
|
_r_obj_dereference (ptr_rule);
|
|
}
|
|
|
|
if (is_changed)
|
|
{
|
|
_app_listview_updateby_id (hwnd, listview_id, 0);
|
|
|
|
_app_profile_save ();
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case LVN_GETDISPINFO:
|
|
{
|
|
LPNMLVDISPINFOW lpnmlv;
|
|
INT listview_id;
|
|
|
|
lpnmlv = (LPNMLVDISPINFOW)lparam;
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
|
|
_app_message_displayinfo (hwnd, listview_id, lpnmlv);
|
|
|
|
break;
|
|
}
|
|
|
|
case NM_DBLCLK:
|
|
{
|
|
LPNMITEMACTIVATE lpnmlv;
|
|
LPNMMOUSE lpmouse;
|
|
INT command_id;
|
|
INT listview_id;
|
|
|
|
lpnmlv = (LPNMITEMACTIVATE)lparam;
|
|
|
|
if (lpnmlv->iItem == -1)
|
|
break;
|
|
|
|
listview_id = (INT)(INT_PTR)lpnmlv->hdr.idFrom;
|
|
command_id = 0;
|
|
|
|
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_LOG)
|
|
{
|
|
command_id = IDM_PROPERTIES;
|
|
}
|
|
else if (listview_id == IDC_STATUSBAR)
|
|
{
|
|
lpmouse = (LPNMMOUSE)lparam;
|
|
|
|
if (lpmouse->dwItemSpec == 0)
|
|
{
|
|
command_id = IDM_SELECT_ALL;
|
|
}
|
|
else if (lpmouse->dwItemSpec == 1)
|
|
{
|
|
command_id = IDM_PURGE_UNUSED;
|
|
}
|
|
else if (lpmouse->dwItemSpec == 2)
|
|
{
|
|
command_id = IDM_PURGE_TIMERS;
|
|
}
|
|
}
|
|
|
|
if (command_id)
|
|
PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (command_id, 0), 0);
|
|
|
|
break;
|
|
}
|
|
|
|
case NM_RCLICK:
|
|
{
|
|
LPNMITEMACTIVATE lpnmlv;
|
|
|
|
if (nmlp->idFrom)
|
|
{
|
|
lpnmlv = (LPNMITEMACTIVATE)lparam;
|
|
|
|
_app_message_contextmenu (hwnd, lpnmlv);
|
|
}
|
|
else
|
|
{
|
|
_app_message_contextmenu_columns (hwnd, nmlp);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_POWERBROADCAST:
|
|
{
|
|
if (_wfp_isfiltersapplying ())
|
|
break;
|
|
|
|
switch (wparam)
|
|
{
|
|
case PBT_APMSUSPEND:
|
|
{
|
|
HANDLE hengine;
|
|
|
|
_app_logclear_ui (hwnd);
|
|
|
|
if (config.is_neteventset)
|
|
{
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (hengine)
|
|
_wfp_logunsubscribe (hengine);
|
|
}
|
|
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
case PBT_APMRESUMECRITICAL:
|
|
case PBT_APMRESUMESUSPEND:
|
|
{
|
|
HANDLE hengine;
|
|
|
|
if (config.is_neteventset)
|
|
{
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (!hengine)
|
|
break;
|
|
|
|
_wfp_logsubscribe (hwnd, hengine);
|
|
}
|
|
|
|
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_DEVICECHANGE:
|
|
{
|
|
switch (wparam)
|
|
{
|
|
case DBT_DEVICEARRIVAL:
|
|
{
|
|
PDEV_BROADCAST_HDR lbhdr;
|
|
PDEV_BROADCAST_VOLUME lpdbv;
|
|
BOOLEAN is_appexist;
|
|
|
|
if (_wfp_isfiltersapplying () || !_wfp_isfiltersinstalled ())
|
|
break;
|
|
|
|
lbhdr = (PDEV_BROADCAST_HDR)lparam;
|
|
|
|
if (lbhdr && lbhdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
|
|
{
|
|
lpdbv = (PDEV_BROADCAST_VOLUME)lparam;
|
|
|
|
is_appexist = _app_isapphavedrive (FirstDriveFromMask (lpdbv->dbcv_unitmask));
|
|
|
|
if (is_appexist)
|
|
_app_changefilters (hwnd, TRUE, FALSE);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
INT ctrl_id = LOWORD (wparam);
|
|
INT notify_code = HIWORD (wparam);
|
|
|
|
if (notify_code == EN_CHANGE)
|
|
{
|
|
PR_STRING string;
|
|
INT listview_id;
|
|
|
|
if (ctrl_id != IDC_SEARCH)
|
|
break;
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
string = _r_ctrl_getstring (config.hrebar, IDC_SEARCH);
|
|
|
|
_r_obj_movereference (&config.search_string, string);
|
|
|
|
_app_search_applyfilter (hwnd, listview_id, string);
|
|
|
|
return FALSE;
|
|
}
|
|
else if (notify_code == 0)
|
|
{
|
|
if (ctrl_id >= IDX_LANGUAGE && ctrl_id <= IDX_LANGUAGE + (INT)(INT_PTR)_r_locale_getcount () + 1)
|
|
{
|
|
HMENU hmenu;
|
|
HMENU hsubmenu;
|
|
|
|
hmenu = GetMenu (hwnd);
|
|
|
|
if (hmenu)
|
|
{
|
|
hsubmenu = GetSubMenu (GetSubMenu (hmenu, 2), LANG_MENU);
|
|
|
|
if (hsubmenu)
|
|
_r_locale_apply (hsubmenu, ctrl_id, IDX_LANGUAGE);
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
else if (ctrl_id >= IDX_RULES_SPECIAL && ctrl_id <= (IDX_RULES_SPECIAL + (INT)(INT_PTR)_r_obj_getlistsize (rules_list)))
|
|
{
|
|
_app_command_idtorules (hwnd, ctrl_id);
|
|
return FALSE;
|
|
}
|
|
else if (ctrl_id >= IDX_TIMER && ctrl_id <= (IDX_TIMER + (RTL_NUMBER_OF (timer_array) - 1)))
|
|
{
|
|
_app_command_idtotimers (hwnd, ctrl_id);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
switch (ctrl_id)
|
|
{
|
|
case IDCANCEL: // process Esc key
|
|
{
|
|
if (GetFocus () == config.hsearchbar)
|
|
{
|
|
_r_ctrl_setstring (config.hsearchbar, 0, L"");
|
|
SetFocus (hwnd);
|
|
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
}
|
|
|
|
case IDM_TRAY_SHOW:
|
|
{
|
|
_r_wnd_toggle (hwnd, FALSE);
|
|
break;
|
|
}
|
|
|
|
case IDM_SETTINGS:
|
|
case IDM_TRAY_SETTINGS:
|
|
{
|
|
_r_settings_createwindow (hwnd, &SettingsProc, 0);
|
|
break;
|
|
}
|
|
|
|
case IDM_EXIT:
|
|
case IDM_TRAY_EXIT:
|
|
{
|
|
PostMessage (hwnd, WM_CLOSE, 0, 0);
|
|
break;
|
|
}
|
|
|
|
case IDM_WEBSITE:
|
|
case IDM_TRAY_WEBSITE:
|
|
{
|
|
_r_shell_opendefault (_r_app_getwebsite_url ());
|
|
break;
|
|
}
|
|
|
|
case IDM_CHECKUPDATES:
|
|
{
|
|
_r_update_check (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_DONATE:
|
|
{
|
|
_r_shell_opendefault (_r_app_getdonate_url ());
|
|
break;
|
|
}
|
|
|
|
case IDM_ABOUT:
|
|
case IDM_TRAY_ABOUT:
|
|
{
|
|
_r_show_aboutmessage (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_IMPORT:
|
|
{
|
|
static COMDLG_FILTERSPEC filters[] = {
|
|
L"Profile files (*.xml)", L"*.xml",
|
|
L"All files (*.*)", L"*.*",
|
|
};
|
|
|
|
R_FILE_DIALOG file_dialog;
|
|
PR_STRING path;
|
|
|
|
if (_r_filedialog_initialize (&file_dialog, PR_FILEDIALOG_OPENFILE))
|
|
{
|
|
_r_filedialog_setfilter (&file_dialog, filters, RTL_NUMBER_OF (filters));
|
|
_r_filedialog_setpath (&file_dialog, XML_PROFILE_FILE);
|
|
|
|
if (_r_filedialog_show (hwnd, &file_dialog))
|
|
{
|
|
path = _r_filedialog_getpath (&file_dialog);
|
|
|
|
if (path)
|
|
{
|
|
if (_app_profile_load (hwnd, path) == STATUS_SUCCESS)
|
|
{
|
|
_app_profile_save ();
|
|
|
|
_app_changefilters (hwnd, TRUE, FALSE);
|
|
}
|
|
|
|
_r_obj_dereference (path);
|
|
}
|
|
}
|
|
|
|
_r_filedialog_destroy (&file_dialog);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_EXPORT:
|
|
{
|
|
static COMDLG_FILTERSPEC filters[] = {
|
|
L"Profile files (*.xml)", L"*.xml",
|
|
L"All files (*.*)", L"*.*",
|
|
};
|
|
|
|
R_FILE_DIALOG file_dialog;
|
|
R_ERROR_INFO error_info;
|
|
PR_STRING path;
|
|
NTSTATUS status;
|
|
|
|
if (_r_filedialog_initialize (&file_dialog, PR_FILEDIALOG_SAVEFILE))
|
|
{
|
|
_r_filedialog_setfilter (&file_dialog, filters, RTL_NUMBER_OF (filters));
|
|
_r_filedialog_setpath (&file_dialog, XML_PROFILE_FILE);
|
|
|
|
if (_r_filedialog_show (hwnd, &file_dialog))
|
|
{
|
|
path = _r_filedialog_getpath (&file_dialog);
|
|
|
|
if (path)
|
|
{
|
|
_app_profile_save ();
|
|
|
|
// added information for export profile failure (issue #707)
|
|
status = _r_fs_copyfile (profile_info.profile_path->buffer, path->buffer);
|
|
|
|
if (!NT_SUCCESS (status))
|
|
{
|
|
_r_error_initialize (&error_info, NULL, path->buffer, NULL);
|
|
|
|
_r_show_errormessage (hwnd, NULL, status, &error_info);
|
|
}
|
|
|
|
_r_obj_dereference (path);
|
|
}
|
|
}
|
|
|
|
_r_filedialog_destroy (&file_dialog);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_ALWAYSONTOP_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"AlwaysOnTop", FALSE);
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), ctrl_id, 0, MF_BYCOMMAND, new_val);
|
|
_r_config_setboolean (L"AlwaysOnTop", new_val);
|
|
|
|
_r_wnd_top (hwnd, new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_AUTOSIZECOLUMNS_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"AutoSizeColumns", TRUE);
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), ctrl_id, 0, MF_BYCOMMAND, new_val);
|
|
_r_config_setboolean (L"AutoSizeColumns", new_val);
|
|
|
|
if (new_val)
|
|
_app_listview_resize (hwnd, _app_listview_getcurrent (hwnd));
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_SHOWFILENAMESONLY_CHK:
|
|
{
|
|
INT listview_id;
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"ShowFilenames", TRUE);
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), ctrl_id, 0, MF_BYCOMMAND, new_val);
|
|
_r_config_setboolean (L"ShowFilenames", new_val);
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
|
|
_r_listview_redraw (hwnd, listview_id, -1);
|
|
_app_listview_sort (hwnd, listview_id);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_SHOWSEARCHBAR_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsShowSearchBar", TRUE);
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), ctrl_id, 0, MF_BYCOMMAND, new_val);
|
|
_r_config_setboolean (L"IsShowSearchBar", new_val);
|
|
|
|
if (config.hsearchbar)
|
|
{
|
|
_app_search_setvisible (hwnd, config.hsearchbar);
|
|
|
|
PostMessage (hwnd, WM_SIZE, 0, 0);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_VIEW_DETAILS:
|
|
case IDM_VIEW_ICON:
|
|
case IDM_VIEW_TILE:
|
|
{
|
|
LONG view_type;
|
|
|
|
if (ctrl_id == IDM_VIEW_ICON)
|
|
{
|
|
view_type = LV_VIEW_ICON;
|
|
}
|
|
else if (ctrl_id == IDM_VIEW_TILE)
|
|
{
|
|
view_type = LV_VIEW_TILE;
|
|
}
|
|
else
|
|
{
|
|
view_type = LV_VIEW_DETAILS;
|
|
}
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), IDM_VIEW_DETAILS, IDM_VIEW_TILE, MF_BYCOMMAND, ctrl_id);
|
|
|
|
_r_config_setlong (L"ViewType", view_type);
|
|
|
|
_app_listview_updateby_id (hwnd, DATA_LISTVIEW_CURRENT, PR_UPDATE_TYPE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_SIZE_SMALL:
|
|
case IDM_SIZE_LARGE:
|
|
case IDM_SIZE_EXTRALARGE:
|
|
{
|
|
LONG icon_size;
|
|
|
|
if (ctrl_id == IDM_SIZE_LARGE)
|
|
{
|
|
icon_size = SHIL_LARGE;
|
|
}
|
|
else if (ctrl_id == IDM_SIZE_EXTRALARGE)
|
|
{
|
|
icon_size = SHIL_EXTRALARGE;
|
|
}
|
|
else
|
|
{
|
|
icon_size = SHIL_SMALL;
|
|
}
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), IDM_SIZE_SMALL, IDM_SIZE_EXTRALARGE, MF_BYCOMMAND, ctrl_id);
|
|
|
|
_r_config_setlong (L"IconSize", icon_size);
|
|
|
|
_app_listview_updateby_id (hwnd, DATA_LISTVIEW_CURRENT, PR_UPDATE_TYPE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_ICONSISHIDDEN:
|
|
{
|
|
PITEM_APP ptr_app = NULL;
|
|
ULONG_PTR enum_key;
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsIconsHidden", FALSE);
|
|
|
|
_r_menu_checkitem (GetMenu (hwnd), ctrl_id, 0, MF_BYCOMMAND, new_val);
|
|
_r_config_setboolean (L"IsIconsHidden", new_val);
|
|
|
|
if (!new_val)
|
|
{
|
|
_r_queuedlock_acquireshared (&lock_apps);
|
|
|
|
enum_key = 0;
|
|
|
|
while (_r_obj_enumhashtablepointer (apps_table, &ptr_app, NULL, &enum_key))
|
|
{
|
|
if (ptr_app->real_path)
|
|
_app_queue_fileinformation (ptr_app->real_path, ptr_app->app_hash, ptr_app->type, _app_listview_getbytype (ptr_app->type));
|
|
}
|
|
|
|
_r_queuedlock_releaseshared (&lock_apps);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_FONT:
|
|
{
|
|
_app_command_selectfont (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_FIND:
|
|
{
|
|
if (!config.hsearchbar)
|
|
break;
|
|
|
|
if (!_r_wnd_isvisible (config.hsearchbar))
|
|
break;
|
|
|
|
SetFocus (config.hsearchbar);
|
|
|
|
SendMessage (config.hsearchbar, EM_SETSEL, 0, (LPARAM)-1);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_REFRESH:
|
|
{
|
|
if (_wfp_isfiltersapplying ())
|
|
break;
|
|
|
|
_app_profile_load (hwnd, NULL);
|
|
_app_changefilters (hwnd, TRUE, FALSE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_LOADONSTARTUP_CHK:
|
|
case IDM_STARTMINIMIZED_CHK:
|
|
case IDM_SKIPUACWARNING_CHK:
|
|
case IDM_CHECKUPDATES_CHK:
|
|
case IDM_RULE_BLOCKOUTBOUND:
|
|
case IDM_RULE_BLOCKINBOUND:
|
|
case IDM_RULE_ALLOWLOOPBACK:
|
|
case IDM_RULE_ALLOW6TO4:
|
|
case IDM_RULE_ALLOWWINDOWSUPDATE:
|
|
case IDM_PROFILETYPE_PLAIN:
|
|
case IDM_PROFILETYPE_COMPRESSED:
|
|
case IDM_PROFILETYPE_ENCRYPTED:
|
|
case IDM_USENETWORKRESOLUTION_CHK:
|
|
case IDM_USEAPPMONITOR_CHK:
|
|
{
|
|
_app_config_apply (hwnd, NULL, ctrl_id);
|
|
break;
|
|
}
|
|
|
|
case IDM_BLOCKLIST_SPY_DISABLE:
|
|
case IDM_BLOCKLIST_SPY_ALLOW:
|
|
case IDM_BLOCKLIST_SPY_BLOCK:
|
|
case IDM_BLOCKLIST_UPDATE_DISABLE:
|
|
case IDM_BLOCKLIST_UPDATE_ALLOW:
|
|
case IDM_BLOCKLIST_UPDATE_BLOCK:
|
|
case IDM_BLOCKLIST_EXTRA_DISABLE:
|
|
case IDM_BLOCKLIST_EXTRA_ALLOW:
|
|
case IDM_BLOCKLIST_EXTRA_BLOCK:
|
|
{
|
|
HMENU hmenu;
|
|
LONG new_state;
|
|
|
|
hmenu = GetMenu (hwnd);
|
|
|
|
if (!hmenu)
|
|
break;
|
|
|
|
if (ctrl_id >= IDM_BLOCKLIST_SPY_DISABLE && ctrl_id <= IDM_BLOCKLIST_SPY_BLOCK)
|
|
{
|
|
_r_menu_checkitem (hmenu, IDM_BLOCKLIST_SPY_DISABLE, IDM_BLOCKLIST_SPY_BLOCK, MF_BYCOMMAND, ctrl_id);
|
|
|
|
new_state = _r_calc_clamp (ctrl_id - IDM_BLOCKLIST_SPY_DISABLE, 0, 2);
|
|
|
|
_r_config_setlong (L"BlocklistSpyState", new_state);
|
|
|
|
_app_ruleblocklistset (hwnd, new_state, -1, -1, TRUE);
|
|
}
|
|
else if (ctrl_id >= IDM_BLOCKLIST_UPDATE_DISABLE && ctrl_id <= IDM_BLOCKLIST_UPDATE_BLOCK)
|
|
{
|
|
_r_menu_checkitem (hmenu, IDM_BLOCKLIST_UPDATE_DISABLE, IDM_BLOCKLIST_UPDATE_BLOCK, MF_BYCOMMAND, ctrl_id);
|
|
|
|
new_state = _r_calc_clamp (ctrl_id - IDM_BLOCKLIST_UPDATE_DISABLE, 0, 2);
|
|
|
|
_r_config_setlong (L"BlocklistUpdateState", new_state);
|
|
|
|
_app_ruleblocklistset (hwnd, -1, new_state, -1, TRUE);
|
|
}
|
|
else if (ctrl_id >= IDM_BLOCKLIST_EXTRA_DISABLE && ctrl_id <= IDM_BLOCKLIST_EXTRA_BLOCK)
|
|
{
|
|
_r_menu_checkitem (hmenu, IDM_BLOCKLIST_EXTRA_DISABLE, IDM_BLOCKLIST_EXTRA_BLOCK, MF_BYCOMMAND, ctrl_id);
|
|
|
|
new_state = _r_calc_clamp (ctrl_id - IDM_BLOCKLIST_EXTRA_DISABLE, 0, 2);
|
|
|
|
_r_config_setlong (L"BlocklistExtraState", new_state);
|
|
|
|
_app_ruleblocklistset (hwnd, -1, -1, new_state, TRUE);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_ENABLELOG_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsLogEnabled", FALSE);
|
|
|
|
_r_toolbar_setbutton (
|
|
config.hrebar,
|
|
IDC_TOOLBAR,
|
|
ctrl_id,
|
|
NULL,
|
|
0,
|
|
new_val ? TBSTATE_PRESSED | TBSTATE_ENABLED : TBSTATE_ENABLED,
|
|
I_IMAGENONE
|
|
);
|
|
|
|
_r_config_setboolean (L"IsLogEnabled", new_val);
|
|
|
|
_app_loginit (new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_ENABLEUILOG_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsLogUiEnabled", FALSE);
|
|
|
|
_r_toolbar_setbutton (
|
|
config.hrebar,
|
|
IDC_TOOLBAR,
|
|
ctrl_id,
|
|
NULL,
|
|
0,
|
|
new_val ? TBSTATE_PRESSED | TBSTATE_ENABLED : TBSTATE_ENABLED,
|
|
I_IMAGENONE
|
|
);
|
|
|
|
_r_config_setboolean (L"IsLogUiEnabled", new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_ENABLENOTIFICATIONS_CHK:
|
|
{
|
|
HWND hnotify;
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsNotificationsEnabled", TRUE);
|
|
|
|
_r_toolbar_setbutton (
|
|
config.hrebar,
|
|
IDC_TOOLBAR,
|
|
ctrl_id,
|
|
NULL,
|
|
0,
|
|
new_val ? TBSTATE_PRESSED | TBSTATE_ENABLED : TBSTATE_ENABLED,
|
|
I_IMAGENONE
|
|
);
|
|
|
|
_r_config_setboolean (L"IsNotificationsEnabled", new_val);
|
|
|
|
hnotify = _app_notify_getwindow (NULL);
|
|
|
|
if (hnotify)
|
|
_app_notify_refresh (hnotify);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_ENABLENOTIFICATIONSSOUND_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsNotificationsSound", TRUE);
|
|
|
|
_r_config_setboolean (L"IsNotificationsSound", new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_NOTIFICATIONFULLSCREENSILENTMODE_CHK:
|
|
{
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsNotificationsFullscreenSilentMode", TRUE);
|
|
|
|
_r_config_setboolean (L"IsNotificationsFullscreenSilentMode", new_val);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_NOTIFICATIONONTRAY_CHK:
|
|
{
|
|
HWND hnotify;
|
|
BOOLEAN new_val;
|
|
|
|
new_val = !_r_config_getboolean (L"IsNotificationsOnTray", FALSE);
|
|
|
|
_r_config_setboolean (L"IsNotificationsOnTray", new_val);
|
|
|
|
hnotify = _app_notify_getwindow (NULL);
|
|
|
|
if (hnotify)
|
|
_app_notify_setposition (hnotify, TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_LOGSHOW:
|
|
{
|
|
_app_command_logshow (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_LOGCLEAR:
|
|
case IDM_LOGCLEAR:
|
|
{
|
|
_app_command_logclear (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_LOGSHOW_ERR:
|
|
{
|
|
_app_command_logerrshow (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_LOGCLEAR_ERR:
|
|
{
|
|
_app_command_logerrclear (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_TRAY_START:
|
|
{
|
|
BOOLEAN is_filtersinstalled;
|
|
|
|
if (_wfp_isfiltersapplying ())
|
|
break;
|
|
|
|
is_filtersinstalled = !_wfp_isfiltersinstalled ();
|
|
|
|
if (_app_installmessage (hwnd, is_filtersinstalled))
|
|
_app_changefilters (hwnd, is_filtersinstalled, TRUE);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_ADD_FILE:
|
|
{
|
|
static COMDLG_FILTERSPEC filters[] = {
|
|
L"Executable files (*.exe)", L"*.exe",
|
|
L"All files (*.*)", L"*.*",
|
|
};
|
|
|
|
R_FILE_DIALOG file_dialog;
|
|
PR_STRING path;
|
|
ULONG_PTR app_hash;
|
|
|
|
if (_r_filedialog_initialize (&file_dialog, PR_FILEDIALOG_OPENFILE))
|
|
{
|
|
_r_filedialog_setfilter (&file_dialog, filters, RTL_NUMBER_OF (filters));
|
|
|
|
if (_r_filedialog_show (hwnd, &file_dialog))
|
|
{
|
|
path = _r_filedialog_getpath (&file_dialog);
|
|
|
|
if (path)
|
|
{
|
|
app_hash = _app_addapplication (hwnd, DATA_UNKNOWN, path, NULL, NULL);
|
|
|
|
if (app_hash)
|
|
{
|
|
_app_listview_updateby_param (hwnd, app_hash, PR_SETITEM_UPDATE, TRUE);
|
|
_app_listview_showitemby_param (hwnd, app_hash, TRUE);
|
|
|
|
_app_profile_save ();
|
|
}
|
|
}
|
|
}
|
|
|
|
_r_filedialog_destroy (&file_dialog);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_DISABLENOTIFICATIONS:
|
|
case IDM_DISABLETIMER:
|
|
{
|
|
_app_command_disable (hwnd, ctrl_id);
|
|
break;
|
|
}
|
|
|
|
case IDM_COPY:
|
|
case IDM_COPY2:
|
|
{
|
|
_app_command_copy (hwnd, ctrl_id, (INT)lparam);
|
|
break;
|
|
}
|
|
|
|
case IDM_EXPLORE:
|
|
{
|
|
PITEM_APP ptr_app;
|
|
PITEM_NETWORK ptr_network;
|
|
PITEM_LOG ptr_log;
|
|
ULONG_PTR hash_code;
|
|
INT listview_id;
|
|
INT item_id = -1;
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
|
|
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
|
|
{
|
|
while ((item_id = _r_listview_getnextselected (hwnd, listview_id, item_id)) != -1)
|
|
{
|
|
hash_code = _app_listview_getitemcontext (hwnd, listview_id, item_id);
|
|
ptr_app = _app_getappitem (hash_code);
|
|
|
|
if (ptr_app)
|
|
{
|
|
if (ptr_app->real_path)
|
|
{
|
|
if (_app_isappvalidpath (ptr_app->real_path))
|
|
_r_shell_showfile (ptr_app->real_path->buffer);
|
|
}
|
|
|
|
_r_obj_dereference (ptr_app);
|
|
}
|
|
}
|
|
}
|
|
else if (listview_id == IDC_NETWORK)
|
|
{
|
|
while ((item_id = _r_listview_getnextselected (hwnd, listview_id, item_id)) != -1)
|
|
{
|
|
hash_code = _app_listview_getitemcontext (hwnd, listview_id, item_id);
|
|
ptr_network = _app_network_getitem (hash_code);
|
|
|
|
if (ptr_network)
|
|
{
|
|
if (ptr_network->path)
|
|
{
|
|
if (_app_isappvalidpath (ptr_network->path))
|
|
_r_shell_showfile (ptr_network->path->buffer);
|
|
}
|
|
|
|
_r_obj_dereference (ptr_network);
|
|
}
|
|
}
|
|
}
|
|
else if (listview_id == IDC_LOG)
|
|
{
|
|
while ((item_id = _r_listview_getnextselected (hwnd, listview_id, item_id)) != -1)
|
|
{
|
|
hash_code = _app_listview_getitemcontext (hwnd, listview_id, item_id);
|
|
ptr_log = _app_getlogitem (hash_code);
|
|
|
|
if (ptr_log)
|
|
{
|
|
if (ptr_log->path)
|
|
{
|
|
if (_app_isappvalidpath (ptr_log->path))
|
|
_r_shell_showfile (ptr_log->path->buffer);
|
|
}
|
|
|
|
_r_obj_dereference (ptr_log);
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_OPENRULESEDITOR:
|
|
{
|
|
_app_command_openeditor (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_CHECK:
|
|
case IDM_UNCHECK:
|
|
{
|
|
_app_command_checkbox (hwnd, ctrl_id);
|
|
break;
|
|
}
|
|
|
|
case IDM_DELETE:
|
|
{
|
|
_app_command_delete (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_PROPERTIES:
|
|
{
|
|
_app_command_properties (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_PURGE_UNUSED:
|
|
{
|
|
_app_command_purgeunused (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_PURGE_TIMERS:
|
|
{
|
|
_app_command_purgetimers (hwnd);
|
|
break;
|
|
}
|
|
|
|
case IDM_SELECT_ALL:
|
|
{
|
|
INT listview_id;
|
|
|
|
listview_id = _app_listview_getcurrent (hwnd);
|
|
|
|
if (!listview_id)
|
|
break;
|
|
|
|
if (GetFocus () == GetDlgItem (hwnd, listview_id))
|
|
_r_listview_setitemstate (hwnd, listview_id, -1, LVIS_SELECTED, LVIS_SELECTED);
|
|
|
|
break;
|
|
}
|
|
|
|
case IDM_ZOOM:
|
|
{
|
|
ShowWindow (hwnd, IsZoomed (hwnd) ? SW_RESTORE : SW_MAXIMIZE);
|
|
break;
|
|
}
|
|
|
|
case IDM_TAB_NEXT:
|
|
case IDM_TAB_PREV:
|
|
{
|
|
INT tabs_count;
|
|
INT item_id;
|
|
|
|
tabs_count = _r_tab_getitemcount (hwnd, IDC_TAB);
|
|
|
|
if (!tabs_count)
|
|
break;
|
|
|
|
item_id = _r_tab_getcurrentitem (hwnd, IDC_TAB);
|
|
|
|
if (item_id == -1)
|
|
break;
|
|
|
|
if (ctrl_id == IDM_TAB_NEXT)
|
|
{
|
|
item_id += 1;
|
|
|
|
if (item_id >= tabs_count)
|
|
item_id = 0;
|
|
}
|
|
else
|
|
{
|
|
item_id -= 1;
|
|
|
|
if (item_id == -1)
|
|
item_id = tabs_count - 1;
|
|
}
|
|
|
|
_r_tab_selectitem (hwnd, IDC_TAB, item_id);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOLEAN NTAPI _app_parseargs (
|
|
_In_ R_CMDLINE_INFO_CLASS info_class
|
|
)
|
|
{
|
|
HANDLE hengine;
|
|
|
|
_app_initialize ();
|
|
|
|
hengine = _wfp_getenginehandle ();
|
|
|
|
if (!hengine)
|
|
return FALSE;
|
|
|
|
switch (info_class)
|
|
{
|
|
case CmdlineHelp:
|
|
{
|
|
_r_show_message (
|
|
NULL,
|
|
MB_OK | MB_ICONINFORMATION,
|
|
L"Available options:",
|
|
L"simplewall.exe -install - enable filtering.\r\n"
|
|
L"simplewall.exe -install -temp - enable filtering until reboot.\r\n"
|
|
L"simplewall.exe -install -silent - enable filtering without prompt.\r\n"
|
|
L"simplewall.exe -uninstall - remove all installed filters.\r\n"
|
|
L"simplewall.exe -help - show this message."
|
|
);
|
|
|
|
return TRUE;
|
|
}
|
|
case CmdlineInstall:
|
|
{
|
|
if (_r_sys_getopt (_r_sys_getimagecommandline (), L"silent", NULL) || _app_installmessage (NULL, TRUE))
|
|
{
|
|
if (_r_sys_getopt (_r_sys_getimagecommandline (), L"temp", NULL))
|
|
config.is_filterstemporary = TRUE;
|
|
|
|
_app_profile_initialize ();
|
|
_app_profile_load (NULL, NULL);
|
|
|
|
if (_wfp_initialize (NULL, hengine))
|
|
_wfp_installfilters (hengine);
|
|
|
|
_wfp_uninitialize (hengine, FALSE);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
case CmdlineUninstall:
|
|
{
|
|
if (_wfp_isfiltersinstalled () && _app_installmessage (NULL, FALSE))
|
|
{
|
|
_wfp_destroyfilters (hengine);
|
|
_wfp_uninitialize (hengine, TRUE);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
INT APIENTRY wWinMain (
|
|
_In_ HINSTANCE hinst,
|
|
_In_opt_ HINSTANCE prev_hinst,
|
|
_In_ LPWSTR cmdline,
|
|
_In_ INT show_cmd
|
|
)
|
|
{
|
|
HWND hwnd;
|
|
ULONG result;
|
|
|
|
if (!_r_app_initialize (&_app_parseargs))
|
|
return ERROR_APP_INIT_FAILURE;
|
|
|
|
hwnd = _r_app_createwindow (hinst, MAKEINTRESOURCE (IDD_MAIN), MAKEINTRESOURCE (IDI_MAIN), &DlgProc);
|
|
|
|
if (!hwnd)
|
|
return ERROR_APP_INIT_FAILURE;
|
|
|
|
result = _r_wnd_message_callback (hwnd, MAKEINTRESOURCE (IDA_MAIN));
|
|
|
|
return result;
|
|
}
|