Make options saved in registry editable by user

Option ediitng dialogs are in two tabs: General and Advanced.
Proxy related options are left in the proxy tab. Options
config_dir, config_ext, log_dir, script timeouts and
service-only flag are in the Advanced tab. All other more commonly
used flags and options are in the General tab.

- As options are editable, save values in registry only when they differ
  from the default values. This leaves the registry clean and makes changing
  options and their defaults during updates easier.

- Entries for config_dir and log_dir must be absolute paths.
  Environemental variables such as %PROFILEDIR% may be used
  to construct these.

- Empty config_dir, config_ext and log_dir entries are silently
  ignored (i.e., the current values are left unchanged).

- Store all numeric and boolean parameters in registry as DWORD instead of
  strings.

- On startup, the default parameters are loaded, then the registry is read
  and finally command-line parameters parsedi.

- Out of range script timeout values in registry truncated with a
  warning instead of fatal error. This allows the user to access the
  settings dialog and make corrections.

- Save proxy and language settings under the same
  HKCU\Software\OpenVPN-GUI key as other options instead of under Nilings.

- Save the current version of the GUI in regsitry so that updates
  can be detected and any needed registry cleanup done.

- If no version info is present in the registry any values in OpenVPN-GUI
  key in HKCU are deleted for a clean start as this is the first version
  to save registry values in HKCU. Language and proxy data if present
  under Nilings is migrated.

Note: new controls in the General tab and newly added Advanced tab dialog
are copied to all language files from the English version. These need to
be translated.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
pull/62/head
Selva Nair 2016-07-09 15:14:36 -04:00
parent 964d728a42
commit 5a47986ccb
30 changed files with 1226 additions and 221 deletions

View File

@ -105,6 +105,7 @@ openvpn_gui_LDADD = \
-lcrypt32 \ -lcrypt32 \
-lnetapi32 \ -lnetapi32 \
-lole32 \ -lole32 \
-lshlwapi \
-lsecur32 -lsecur32
openvpn-gui-res.o: $(openvpn_gui_RESOURCES) $(srcdir)/openvpn-gui-res.h openvpn-gui-res.o: $(openvpn_gui_RESOURCES) $(srcdir)/openvpn-gui-res.h

View File

@ -427,6 +427,19 @@ GeneralSettingsDlgProc(HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lPar
if (GetLaunchOnStartup()) if (GetLaunchOnStartup())
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_STARTUP), BST_CHECKED); Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_STARTUP), BST_CHECKED);
if (o.log_append)
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_LOG_APPEND), BST_CHECKED);
if (o.silent_connection)
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SILENT), BST_CHECKED);
if (o.show_balloon == 0)
CheckRadioButton (hwndDlg, ID_RB_BALLOON0, ID_RB_BALLOON2, ID_RB_BALLOON0);
else if (o.show_balloon == 1)
CheckRadioButton (hwndDlg, ID_RB_BALLOON0, ID_RB_BALLOON2, ID_RB_BALLOON1);
else if (o.show_balloon == 2)
CheckRadioButton (hwndDlg, ID_RB_BALLOON0, ID_RB_BALLOON2, ID_RB_BALLOON2);
if (o.show_script_window)
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SHOW_SCRIPT_WIN), BST_CHECKED);
break; break;
case WM_NOTIFY: case WM_NOTIFY:
@ -441,6 +454,21 @@ GeneralSettingsDlgProc(HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lPar
SetLaunchOnStartup(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_STARTUP)) == BST_CHECKED); SetLaunchOnStartup(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_STARTUP)) == BST_CHECKED);
o.log_append =
(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_LOG_APPEND)) == BST_CHECKED);
o.silent_connection =
(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_SILENT)) == BST_CHECKED);
if (IsDlgButtonChecked(hwndDlg, ID_RB_BALLOON0))
o.show_balloon = 0;
else if (IsDlgButtonChecked(hwndDlg, ID_RB_BALLOON2))
o.show_balloon = 2;
else
o.show_balloon = 1;
o.show_script_window =
(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_SHOW_SCRIPT_WIN)) == BST_CHECKED);
SaveRegistryKeys();
SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR); SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
return TRUE; return TRUE;
} }

36
main.c
View File

@ -161,9 +161,6 @@ int WINAPI _tWinMain (HINSTANCE hThisInstance,
#endif #endif
/* Parse command-line options */
ProcessCommandLine(&o, GetCommandLine());
/* Check if a previous instance is already running. */ /* Check if a previous instance is already running. */
if ((FindWindow (szClassName, NULL)) != NULL) if ((FindWindow (szClassName, NULL)) != NULL)
{ {
@ -172,9 +169,12 @@ int WINAPI _tWinMain (HINSTANCE hThisInstance,
exit(1); exit(1);
} }
if (!GetRegistryKeys()) { UpdateRegistry(); /* Checks version change and update keys/values */
exit(1);
} GetRegistryKeys();
/* Parse command-line options */
ProcessCommandLine(&o, GetCommandLine());
EnsureDirExists(o.config_dir); EnsureDirExists(o.config_dir);
if (!CheckVersion()) { if (!CheckVersion()) {
@ -327,7 +327,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
CreatePopupMenus(); /* Create popup menus */ CreatePopupMenus(); /* Create popup menus */
ShowTrayIcon(); ShowTrayIcon();
if (o.service_only[0]=='1') if (o.service_only)
CheckServiceStatus(); // Check if service is running or not CheckServiceStatus(); // Check if service is running or not
if (!AutoStartConnections()) { if (!AutoStartConnections()) {
SendMessage(hwnd, WM_CLOSE, 0, 0); SendMessage(hwnd, WM_CLOSE, 0, 0);
@ -444,11 +444,21 @@ AboutDialogFunc(UNUSED HWND hDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lParam)
static void static void
ShowSettingsDialog() ShowSettingsDialog()
{ {
PROPSHEETPAGE psp[3]; PROPSHEETPAGE psp[4];
int page_number = 0; int page_number = 0;
/* General tab */
psp[page_number].dwSize = sizeof(PROPSHEETPAGE);
psp[page_number].dwFlags = PSP_DLGINDIRECT;
psp[page_number].hInstance = o.hInstance;
psp[page_number].pResource = LocalizedDialogResource(ID_DLG_GENERAL);
psp[page_number].pfnDlgProc = GeneralSettingsDlgProc;
psp[page_number].lParam = 0;
psp[page_number].pfnCallback = NULL;
++page_number;
/* Proxy tab */ /* Proxy tab */
if (o.service_only[0] == '0') { if (o.service_only == 0) {
psp[page_number].dwSize = sizeof(PROPSHEETPAGE); psp[page_number].dwSize = sizeof(PROPSHEETPAGE);
psp[page_number].dwFlags = PSP_DLGINDIRECT; psp[page_number].dwFlags = PSP_DLGINDIRECT;
psp[page_number].hInstance = o.hInstance; psp[page_number].hInstance = o.hInstance;
@ -459,12 +469,12 @@ ShowSettingsDialog()
++page_number; ++page_number;
} }
/* General tab */ /* Advanced tab */
psp[page_number].dwSize = sizeof(PROPSHEETPAGE); psp[page_number].dwSize = sizeof(PROPSHEETPAGE);
psp[page_number].dwFlags = PSP_DLGINDIRECT; psp[page_number].dwFlags = PSP_DLGINDIRECT;
psp[page_number].hInstance = o.hInstance; psp[page_number].hInstance = o.hInstance;
psp[page_number].pResource = LocalizedDialogResource(ID_DLG_GENERAL); psp[page_number].pResource = LocalizedDialogResource(ID_DLG_ADVANCED);
psp[page_number].pfnDlgProc = GeneralSettingsDlgProc; psp[page_number].pfnDlgProc = AdvancedSettingsDlgProc;
psp[page_number].lParam = 0; psp[page_number].lParam = 0;
psp[page_number].pfnCallback = NULL; psp[page_number].pfnCallback = NULL;
++page_number; ++page_number;
@ -521,7 +531,7 @@ void
ImportConfigFile() ImportConfigFile()
{ {
TCHAR filter[37]; TCHAR filter[2*_countof(o.ext_string)+5];
_sntprintf_0(filter, _T("*.%s%c*.%s%c"), o.ext_string, _T('\0'), o.ext_string, _T('\0')); _sntprintf_0(filter, _T("*.%s%c*.%s%c"), o.ext_string, _T('\0'), o.ext_string, _T('\0'));

5
main.h
View File

@ -35,10 +35,7 @@
//#define DISABLE_CHANGE_PASSWORD //#define DISABLE_CHANGE_PASSWORD
/* Registry key for User Settings */ /* Registry key for User Settings */
#define GUI_REGKEY_HKCU _T("Software\\Nilings\\OpenVPN-GUI") #define GUI_REGKEY_HKCU _T("Software\\OpenVPN-GUI")
/* Registry key for Global Settings */
#define GUI_REGKEY_HKLM _T("SOFTWARE\\OpenVPN-GUI")
#define MAX_LOG_LENGTH 1024/* Max number of characters per log line */ #define MAX_LOG_LENGTH 1024/* Max number of characters per log line */
#define MAX_LOG_LINES 500 /* Max number of lines in LogWindow */ #define MAX_LOG_LINES 500 /* Max number of lines in LogWindow */

View File

@ -79,12 +79,39 @@
#define ID_CMB_LANGUAGE 231 #define ID_CMB_LANGUAGE 231
#define ID_TXT_LANGUAGE 232 #define ID_TXT_LANGUAGE 232
#define ID_CHK_STARTUP 233 #define ID_CHK_STARTUP 233
#define ID_CHK_SERVICE_ONLY 234
#define ID_TXT_LOG_APPEND 235
#define ID_CHK_LOG_APPEND 236
#define ID_CHK_SILENT 237
#define ID_TXT_BALLOON 238
#define ID_RB_BALLOON0 239
#define ID_RB_BALLOON1 240
#define ID_RB_BALLOON2 241
#define ID_CHK_SHOW_SCRIPT_WIN 242
/* Proxy Auth Dialog */ /* Proxy Auth Dialog */
#define ID_DLG_PROXY_AUTH 250 #define ID_DLG_PROXY_AUTH 250
#define ID_EDT_PROXY_USER 251 #define ID_EDT_PROXY_USER 251
#define ID_EDT_PROXY_PASS 252 #define ID_EDT_PROXY_PASS 252
/* Advanced dialog */
#define ID_DLG_ADVANCED 270
#define ID_TXT_FOLDER 271
#define ID_TXT_EXTENSION 272
#define ID_EDT_CONFIG_DIR 274
#define ID_EDT_CONFIG_EXT 275
#define ID_EDT_LOG_DIR 276
#define ID_BTN_CONFIG_DIR 277
#define ID_BTN_LOG_DIR 278
#define ID_TXT_PRECONNECT_TIMEOUT 279
#define ID_TXT_CONNECT_TIMEOUT 280
#define ID_TXT_DISCONNECT_TIMEOUT 281
#define ID_EDT_PRECONNECT_TIMEOUT 282
#define ID_EDT_CONNECT_TIMEOUT 283
#define ID_EDT_DISCONNECT_TIMEOUT 284
/* Connections dialog */
#define ID_DLG_CONNECTIONS 290
/* /*
* String Table Resources * String Table Resources

View File

@ -170,9 +170,9 @@ OnStateChange(connection_t *c, char *data)
MultiByteToWideChar(CP_ACP, 0, local_ip, -1, c->ip, _countof(c->ip)); MultiByteToWideChar(CP_ACP, 0, local_ip, -1, c->ip, _countof(c->ip));
/* Show connection tray balloon */ /* Show connection tray balloon */
if ((c->state == connecting && o.show_balloon[0] != '0') if ((c->state == connecting && o.show_balloon != 0)
|| (c->state == resuming && o.show_balloon[0] != '0') || (c->state == resuming && o.show_balloon != 0)
|| (c->state == reconnecting && o.show_balloon[0] == '2')) || (c->state == reconnecting && o.show_balloon == 2))
{ {
TCHAR msg[256]; TCHAR msg[256];
LoadLocalizedStringBuf(msg, _countof(msg), IDS_NFO_NOW_CONNECTED, c->config_name); LoadLocalizedStringBuf(msg, _countof(msg), IDS_NFO_NOW_CONNECTED, c->config_name);
@ -466,7 +466,7 @@ OnStop(connection_t *c, UNUSED char *msg)
SetStatusWinIcon(c->hwndStatus, ID_ICO_DISCONNECTED); SetStatusWinIcon(c->hwndStatus, ID_ICO_DISCONNECTED);
EnableWindow(GetDlgItem(c->hwndStatus, ID_DISCONNECT), FALSE); EnableWindow(GetDlgItem(c->hwndStatus, ID_DISCONNECT), FALSE);
EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE); EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE);
if (o.silent_connection[0] == '0') if (o.silent_connection == 0)
{ {
SetForegroundWindow(c->hwndStatus); SetForegroundWindow(c->hwndStatus);
ShowWindow(c->hwndStatus, SW_SHOW); ShowWindow(c->hwndStatus, SW_SHOW);
@ -493,7 +493,7 @@ OnStop(connection_t *c, UNUSED char *msg)
EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE); EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE);
SetStatusWinIcon(c->hwndStatus, ID_ICO_DISCONNECTED); SetStatusWinIcon(c->hwndStatus, ID_ICO_DISCONNECTED);
SetDlgItemText(c->hwndStatus, ID_TXT_STATUS, LoadLocalizedString(txt_id)); SetDlgItemText(c->hwndStatus, ID_TXT_STATUS, LoadLocalizedString(txt_id));
if (o.silent_connection[0] == '0') if (o.silent_connection == 0)
{ {
SetForegroundWindow(c->hwndStatus); SetForegroundWindow(c->hwndStatus);
ShowWindow(c->hwndStatus, SW_SHOW); ShowWindow(c->hwndStatus, SW_SHOW);
@ -982,7 +982,7 @@ ThreadOpenVPNStatus(void *p)
else else
wait_event = c->hProcess; wait_event = c->hProcess;
if (o.silent_connection[0] == '0') if (o.silent_connection == 0)
ShowWindow(c->hwndStatus, SW_SHOW); ShowWindow(c->hwndStatus, SW_SHOW);
/* Run the message loop for the status window */ /* Run the message loop for the status window */
@ -1057,13 +1057,6 @@ StartOpenVPN(connection_t *c)
RunPreconnectScript(c); RunPreconnectScript(c);
/* Check that log append flag has a valid value */
if ((o.append_string[0] != '0') && (o.append_string[0] != '1'))
{
ShowLocalizedMsg(IDS_ERR_LOG_APPEND_BOOL, o.append_string);
return FALSE;
}
/* Create thread to show the connection's status dialog */ /* Create thread to show the connection's status dialog */
hThread = CreateThread(NULL, 0, ThreadOpenVPNStatus, c, CREATE_SUSPENDED, &c->threadId); hThread = CreateThread(NULL, 0, ThreadOpenVPNStatus, c, CREATE_SUSPENDED, &c->threadId);
if (hThread == NULL) if (hThread == NULL)
@ -1089,7 +1082,7 @@ StartOpenVPN(connection_t *c)
"--setenv IV_GUI_VER \"%S\" --service %s 0 --auth-retry interact " "--setenv IV_GUI_VER \"%S\" --service %s 0 --auth-retry interact "
"--management %S %hd stdin --management-query-passwords %s" "--management %S %hd stdin --management-query-passwords %s"
"--management-hold"), "--management-hold"),
(o.append_string[0] == '1' ? _T("-append") : _T("")), c->log_path, (o.log_append ? _T("-append") : _T("")), c->log_path,
c->config_file, PACKAGE_STRING, exit_event_name, c->config_file, PACKAGE_STRING, exit_event_name,
inet_ntoa(c->manage.skaddr.sin_addr), ntohs(c->manage.skaddr.sin_port), inet_ntoa(c->manage.skaddr.sin_addr), ntohs(c->manage.skaddr.sin_port),
(o.proxy_source != config ? _T("--management-query-proxy ") : _T(""))); (o.proxy_source != config ? _T("--management-query-proxy ") : _T("")));

View File

@ -3,6 +3,7 @@
* *
* Copyright (C) 2004 Mathias Sundman <mathias@nilings.se> * Copyright (C) 2004 Mathias Sundman <mathias@nilings.se>
* 2010 Heiko Hund <heikoh@users.sf.net> * 2010 Heiko Hund <heikoh@users.sf.net>
* 2016 Selva Nair <selva.nair@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

242
options.c
View File

@ -3,6 +3,7 @@
* *
* Copyright (C) 2004 Mathias Sundman <mathias@nilings.se> * Copyright (C) 2004 Mathias Sundman <mathias@nilings.se>
* 2010 Heiko Hund <heikoh@users.sf.net> * 2010 Heiko Hund <heikoh@users.sf.net>
* 2016 Selva Nair <selva.nair@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -26,20 +27,56 @@
#endif #endif
#include <windows.h> #include <windows.h>
#include <windowsx.h>
#include <prsht.h>
#include <stdlib.h> #include <stdlib.h>
#include <malloc.h> #include <malloc.h>
#include <memory.h> #include <memory.h>
#include <shlobj.h>
#include <shlwapi.h>
#include "options.h" #include "options.h"
#include "main.h" #include "main.h"
#include "openvpn-gui-res.h" #include "openvpn-gui-res.h"
#include "localization.h" #include "localization.h"
#include "misc.h" #include "misc.h"
#include "registry.h"
#define streq(x, y) (_tcscmp((x), (y)) == 0) #define streq(x, y) (_tcscmp((x), (y)) == 0)
extern options_t o; extern options_t o;
static version_t
MakeVersion (short ma, short mi, short b, short r)
{
version_t v = {ma, mi, b, r};
return v;
}
static void
ExpandString (WCHAR *str, int max_len)
{
WCHAR expanded_string[MAX_PATH];
int len = ExpandEnvironmentStringsW (str, expanded_string, _countof(expanded_string));
if (len > max_len || len > (int) _countof(expanded_string))
{
PrintDebug (L"Failed to expanded env vars in '%s'. String too long", str);
return;
}
wcsncpy (str, expanded_string, max_len);
}
void
ExpandOptions (void)
{
ExpandString (o.exe_path, _countof(o.exe_path));
ExpandString (o.config_dir, _countof(o.config_dir));
ExpandString (o.log_dir, _countof(o.log_dir));
ExpandString (o.editor, _countof(o.editor));
ExpandString (o.log_viewer, _countof(o.log_viewer));
}
static int static int
add_option(options_t *options, int i, TCHAR **p) add_option(options_t *options, int i, TCHAR **p)
{ {
@ -87,10 +124,11 @@ add_option(options_t *options, int i, TCHAR **p)
++i; ++i;
_tcsncpy(options->priority_string, p[1], _countof(options->priority_string) - 1); _tcsncpy(options->priority_string, p[1], _countof(options->priority_string) - 1);
} }
else if (streq(p[0], _T("append_string")) && p[1]) else if ( (streq(p[0], _T("append_string")) ||
streq(p[0], _T("log_append"))) && p[1] )
{ {
++i; ++i;
_tcsncpy(options->append_string, p[1], _countof(options->append_string) - 1); options->log_append = _ttoi(p[1]) ? 1 : 0;
} }
else if (streq(p[0], _T("log_viewer")) && p[1]) else if (streq(p[0], _T("log_viewer")) && p[1])
{ {
@ -125,22 +163,22 @@ add_option(options_t *options, int i, TCHAR **p)
else if (streq(p[0], _T("show_balloon")) && p[1]) else if (streq(p[0], _T("show_balloon")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->show_balloon, p[1], _countof(options->show_balloon) - 1); options->show_balloon = _ttoi(p[1]);
} }
else if (streq(p[0], _T("service_only")) && p[1]) else if (streq(p[0], _T("service_only")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->service_only, p[1], _countof(options->service_only) - 1); options->service_only = _ttoi(p[1]) ? 1 : 0;
} }
else if (streq(p[0], _T("show_script_window")) && p[1]) else if (streq(p[0], _T("show_script_window")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->show_script_window, p[1], _countof(options->show_script_window) - 1); options->show_script_window = _ttoi(p[1]) ? 1 : 0;
} }
else if (streq(p[0], _T("silent_connection")) && p[1]) else if (streq(p[0], _T("silent_connection")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->silent_connection, p[1], _countof(options->silent_connection) - 1); options->silent_connection = _ttoi(p[1]) ? 1 : 0;
} }
else if (streq(p[0], _T("passphrase_attempts")) && p[1]) else if (streq(p[0], _T("passphrase_attempts")) && p[1])
{ {
@ -150,17 +188,17 @@ add_option(options_t *options, int i, TCHAR **p)
else if (streq(p[0], _T("connectscript_timeout")) && p[1]) else if (streq(p[0], _T("connectscript_timeout")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->connectscript_timeout_string, p[1], _countof(options->connectscript_timeout_string) - 1); options->connectscript_timeout = _ttoi(p[1]);
} }
else if (streq(p[0], _T("disconnectscript_timeout")) && p[1]) else if (streq(p[0], _T("disconnectscript_timeout")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->disconnectscript_timeout_string, p[1], _countof(options->disconnectscript_timeout_string) - 1); options->disconnectscript_timeout = _ttoi(p[1]);
} }
else if (streq(p[0], _T("preconnectscript_timeout")) && p[1]) else if (streq(p[0], _T("preconnectscript_timeout")) && p[1])
{ {
++i; ++i;
_tcsncpy(options->preconnectscript_timeout_string, p[1], _countof(options->preconnectscript_timeout_string) - 1); options->preconnectscript_timeout = _ttoi(p[1]);
} }
else else
{ {
@ -212,6 +250,7 @@ InitOptions(options_t *opt)
{ {
CLEAR(*opt); CLEAR(*opt);
opt->netcmd_semaphore = InitSemaphore (); opt->netcmd_semaphore = InitSemaphore ();
opt->version = MakeVersion (PACKAGE_VERSION_RESOURCE);
} }
@ -277,6 +316,8 @@ ProcessCommandLine(options_t *options, TCHAR *command_line)
parse_argv(options, argc, argv); parse_argv(options, argc, argv);
free(argv); free(argv);
ExpandOptions ();
} }
@ -307,3 +348,186 @@ GetConnByManagement(SOCKET sk)
} }
return NULL; return NULL;
} }
/* callback to set the initial value of folder browse selection */
static int CALLBACK
BrowseCallback (HWND h, UINT msg, UNUSED LPARAM l, LPARAM data)
{
if (msg == BFFM_INITIALIZED)
SendMessage (h, BFFM_SETSELECTION, TRUE, data);
return 0;
}
static BOOL
BrowseFolder (const WCHAR *initial_path, WCHAR *selected_path)
{
BOOL ret = false;
BROWSEINFO bi;
CLEAR(bi);
bi.lpszTitle = L"Select folder...";
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = BrowseCallback;
bi.lParam = (LPARAM) initial_path;
PIDLIST_ABSOLUTE idlist = SHBrowseForFolder (&bi);
if (idlist)
{
ret = SHGetPathFromIDList (idlist, selected_path);
CoTaskMemFree (idlist);
}
return ret;
}
static BOOL
CheckAdvancedDlgParams (HWND hdlg)
{
WCHAR tmp_path[MAX_PATH];
/* replace empty entries by current values */
if (GetWindowTextLength (GetDlgItem(hdlg, ID_EDT_CONFIG_DIR)) == 0)
SetDlgItemText (hdlg, ID_EDT_CONFIG_DIR, o.config_dir);
if (GetWindowTextLength (GetDlgItem(hdlg, ID_EDT_LOG_DIR)) == 0)
SetDlgItemText (hdlg, ID_EDT_LOG_DIR, o.log_dir);
if (GetWindowTextLength (GetDlgItem(hdlg, ID_EDT_CONFIG_EXT)) == 0)
SetDlgItemText (hdlg, ID_EDT_CONFIG_EXT, o.ext_string);
/* ensure paths are absolute */
GetDlgItemText (hdlg, ID_EDT_CONFIG_DIR, tmp_path, _countof(tmp_path));
ExpandString (tmp_path, _countof(tmp_path));
if (PathIsRelativeW (tmp_path))
{
MessageBox (NULL, L"Specified config directory is not an absolute path",
L"Option error", MB_OK);
return false;
}
GetDlgItemText (hdlg, ID_EDT_LOG_DIR, tmp_path, _countof(tmp_path));
ExpandString (tmp_path, _countof(tmp_path));
if (PathIsRelativeW (tmp_path))
{
MessageBox (NULL, L"Specified log directory is not an absolute path",
L"Option error", MB_OK);
return false;
}
return true;
}
static BOOL
SaveAdvancedDlgParams (HWND hdlg)
{
WCHAR tmp_path[MAX_PATH], tmp_path1[MAX_PATH];
UINT tmp;
BOOL status;
GetDlgItemText (hdlg, ID_EDT_CONFIG_DIR, o.config_dir, _countof(o.config_dir));
GetDlgItemText (hdlg, ID_EDT_LOG_DIR, tmp_path, _countof(tmp_path));
wcsncpy (tmp_path1, tmp_path, _countof(tmp_path1));
ExpandString (tmp_path1, _countof(tmp_path1));
if (EnsureDirExists (tmp_path1)) /* this will try to create the path if needed */
wcsncpy (o.log_dir, tmp_path, _countof(o.log_dir)); /* save unexpanded path */
else
{
ShowLocalizedMsg(IDS_ERR_CREATE_PATH, L"Log", tmp_path1);
return false;
}
GetDlgItemText (hdlg, ID_EDT_CONFIG_EXT, o.ext_string, _countof(o.ext_string));
tmp = GetDlgItemInt (hdlg, ID_EDT_PRECONNECT_TIMEOUT, &status, FALSE);
if (status && tmp > 0) o.preconnectscript_timeout = tmp;
tmp = GetDlgItemInt (hdlg, ID_EDT_CONNECT_TIMEOUT, &status, FALSE);
if (status) o.connectscript_timeout = tmp;
tmp = GetDlgItemInt (hdlg, ID_EDT_DISCONNECT_TIMEOUT, &status, FALSE);
if (status && tmp > 0) o.disconnectscript_timeout = tmp;
SaveRegistryKeys ();
ExpandOptions ();
return true;
}
static void
LoadAdvancedDlgParams (HWND hdlg)
{
SetDlgItemText (hdlg, ID_EDT_CONFIG_DIR, o.config_dir);
SetDlgItemText (hdlg, ID_EDT_CONFIG_EXT, o.ext_string);
SetDlgItemText (hdlg, ID_EDT_LOG_DIR, o.log_dir);
SetDlgItemInt (hdlg, ID_EDT_PRECONNECT_TIMEOUT, o.preconnectscript_timeout, FALSE);
SetDlgItemInt (hdlg, ID_EDT_CONNECT_TIMEOUT, o.connectscript_timeout, FALSE);
SetDlgItemInt (hdlg, ID_EDT_DISCONNECT_TIMEOUT, o.disconnectscript_timeout, FALSE);
}
INT_PTR CALLBACK
AdvancedSettingsDlgProc (HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lParam)
{
LPPSHNOTIFY psn;
switch(msg) {
case WM_INITDIALOG:
/* Limit extension editbox to 4 chars. */
SendMessage (GetDlgItem(hwndDlg, ID_EDT_CONFIG_EXT), EM_SETLIMITTEXT, 4, 0);
/* Populate UI */
LoadAdvancedDlgParams (hwndDlg);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
WCHAR path[MAX_PATH];
case ID_BTN_CONFIG_DIR:
GetDlgItemText (hwndDlg, ID_EDT_CONFIG_DIR, path, _countof(path));
if (BrowseFolder (path, path))
SetDlgItemText (hwndDlg, ID_EDT_CONFIG_DIR, path);
break;
case ID_BTN_LOG_DIR:
GetDlgItemText (hwndDlg, ID_EDT_LOG_DIR, path, _countof(path));
if (BrowseFolder (path, path))
SetDlgItemText (hwndDlg, ID_EDT_LOG_DIR, path);
break;
}
break;
case WM_NOTIFY:
psn = (LPPSHNOTIFY) lParam;
if (psn->hdr.code == (UINT) PSN_KILLACTIVE)
{
SetWindowLongPtr (hwndDlg, DWLP_MSGRESULT, (CheckAdvancedDlgParams(hwndDlg) ? FALSE : TRUE));
return TRUE;
}
if (psn->hdr.code == (UINT) PSN_APPLY)
{
BOOL status = SaveAdvancedDlgParams (hwndDlg);
SetWindowLongPtr (hwndDlg, DWLP_MSGRESULT, status? PSNRET_NOERROR:PSNRET_INVALID);
return TRUE;
}
break;
}
return FALSE;
}
int
CompareStringExpanded (const WCHAR *str1, const WCHAR *str2)
{
WCHAR str1_cpy[MAX_PATH], str2_cpy[MAX_PATH];
wcsncpy (str1_cpy, str1, _countof(str1_cpy));
wcsncpy (str2_cpy, str2, _countof(str2_cpy));
str1_cpy[MAX_PATH-1] = L'\0';
str2_cpy[MAX_PATH-1] = L'\0';
ExpandString (str1_cpy, _countof(str1_cpy));
ExpandString (str2_cpy, _countof(str2_cpy));
return wcsicmp (str1_cpy, str2_cpy);
}

View File

@ -3,6 +3,7 @@
* *
* Copyright (C) 2004 Mathias Sundman <mathias@nilings.se> * Copyright (C) 2004 Mathias Sundman <mathias@nilings.se>
* 2010 Heiko Hund <heikoh@users.sf.net> * 2010 Heiko Hund <heikoh@users.sf.net>
* 2016 Selva Nair <selva.nair@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -86,6 +87,10 @@ typedef struct {
#define FLAG_SAVE_AUTH_PASS 1<<5 #define FLAG_SAVE_AUTH_PASS 1<<5
#define ALLOW_CHANGE_PASSPHRASE (1<<1) #define ALLOW_CHANGE_PASSPHRASE (1<<1)
typedef struct {
unsigned short major, minor, build, revision;
} version_t;
/* Connections parameters */ /* Connections parameters */
struct connection { struct connection {
TCHAR config_file[MAX_PATH]; /* Name of the config file */ TCHAR config_file[MAX_PATH]; /* Name of the config file */
@ -129,9 +134,6 @@ typedef struct {
int num_configs; /* Number of configs */ int num_configs; /* Number of configs */
service_state_t service_state; /* State of the OpenVPN Service */ service_state_t service_state; /* State of the OpenVPN Service */
int connectscript_timeout; /* Connect Script execution timeout (sec) */
int disconnectscript_timeout; /* Disconnect Script execution timeout (sec) */
int preconnectscript_timeout; /* Preconnect Script execution timeout (sec) */
/* Proxy Settings */ /* Proxy Settings */
proxy_source_t proxy_source; /* Where to get proxy information from */ proxy_source_t proxy_source; /* Where to get proxy information from */
@ -150,16 +152,16 @@ typedef struct {
TCHAR config_dir[MAX_PATH]; TCHAR config_dir[MAX_PATH];
TCHAR ext_string[16]; TCHAR ext_string[16];
TCHAR log_dir[MAX_PATH]; TCHAR log_dir[MAX_PATH];
TCHAR append_string[2]; DWORD log_append;
TCHAR log_viewer[MAX_PATH]; TCHAR log_viewer[MAX_PATH];
TCHAR editor[MAX_PATH]; TCHAR editor[MAX_PATH];
TCHAR silent_connection[2]; DWORD silent_connection;
TCHAR service_only[2]; DWORD service_only;
TCHAR show_balloon[2]; DWORD show_balloon;
TCHAR show_script_window[2]; DWORD show_script_window;
TCHAR connectscript_timeout_string[4]; DWORD connectscript_timeout; /* Connect Script execution timeout (sec) */
TCHAR disconnectscript_timeout_string[4]; DWORD disconnectscript_timeout; /* Disconnect Script execution timeout (sec) */
TCHAR preconnectscript_timeout_string[4]; DWORD preconnectscript_timeout; /* Preconnect Script execution timeout (sec) */
#ifdef DEBUG #ifdef DEBUG
FILE *debug_fp; FILE *debug_fp;
@ -169,10 +171,17 @@ typedef struct {
HINSTANCE hInstance; HINSTANCE hInstance;
BOOL session_locked; BOOL session_locked;
HANDLE netcmd_semaphore; HANDLE netcmd_semaphore;
version_t version;
} options_t; } options_t;
void InitOptions(options_t *); void InitOptions(options_t *);
void ProcessCommandLine(options_t *, TCHAR *); void ProcessCommandLine(options_t *, TCHAR *);
int CountConnState(conn_state_t); int CountConnState(conn_state_t);
connection_t* GetConnByManagement(SOCKET); connection_t* GetConnByManagement(SOCKET);
INT_PTR CALLBACK ScriptSettingsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK ConnectionSettingsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK AdvancedSettingsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
void ExpandOptions(void);
int CompareStringExpanded(const WCHAR *str1, const WCHAR *str2);
#endif #endif

10
proxy.c
View File

@ -224,6 +224,7 @@ SaveProxySettings(HWND hwndDlg)
DWORD dwDispos; DWORD dwDispos;
TCHAR proxy_source_string[2] = _T("0"); TCHAR proxy_source_string[2] = _T("0");
TCHAR proxy_type_string[2] = _T("0"); TCHAR proxy_type_string[2] = _T("0");
TCHAR proxy_subkey[MAX_PATH];
/* Save Proxy Settings Source */ /* Save Proxy Settings Source */
if (IsDlgButtonChecked(hwndDlg, ID_RB_PROXY_OPENVPN) == BST_CHECKED) if (IsDlgButtonChecked(hwndDlg, ID_RB_PROXY_OPENVPN) == BST_CHECKED)
@ -265,11 +266,12 @@ SaveProxySettings(HWND hwndDlg)
} }
/* Open Registry for writing */ /* Open Registry for writing */
if (RegCreateKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, _T(""), REG_OPTION_NON_VOLATILE, _sntprintf_0(proxy_subkey, _T("%s\\proxy"), GUI_REGKEY_HKCU);
if (RegCreateKeyEx(HKEY_CURRENT_USER, proxy_subkey, 0, _T(""), REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, &regkey, &dwDispos) != ERROR_SUCCESS) KEY_WRITE, NULL, &regkey, &dwDispos) != ERROR_SUCCESS)
{ {
/* error creating Registry-Key */ /* error creating Registry-Key */
ShowLocalizedMsg(IDS_ERR_CREATE_REG_HKCU_KEY, GUI_REGKEY_HKCU); ShowLocalizedMsg(IDS_ERR_CREATE_REG_HKCU_KEY, proxy_subkey);
return; return;
} }
@ -292,9 +294,11 @@ GetProxyRegistrySettings()
HKEY regkey; HKEY regkey;
TCHAR proxy_source_string[2] = _T("0"); TCHAR proxy_source_string[2] = _T("0");
TCHAR proxy_type_string[2] = _T("0"); TCHAR proxy_type_string[2] = _T("0");
TCHAR proxy_subkey[MAX_PATH];
/* Open Registry for reading */ /* Open Registry for reading */
status = RegOpenKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, KEY_READ, &regkey); _sntprintf_0(proxy_subkey, _T("%s\\proxy"), GUI_REGKEY_HKCU);
status = RegOpenKeyEx(HKEY_CURRENT_USER, proxy_subkey, 0, KEY_READ, &regkey);
if (status != ERROR_SUCCESS) if (status != ERROR_SUCCESS)
return; return;

View File

@ -2,6 +2,7 @@
* OpenVPN-GUI -- A Windows GUI for OpenVPN. * OpenVPN-GUI -- A Windows GUI for OpenVPN.
* *
* Copyright (C) 2004 Mathias Sundman <mathias@nilings.se> * Copyright (C) 2004 Mathias Sundman <mathias@nilings.se>
* 2016 Selva Nair <selva.nair@gmail.com>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -36,25 +37,42 @@
extern options_t o; extern options_t o;
static void struct regkey_str {
ExpandString (WCHAR *str, int max_len) const WCHAR *name;
{ WCHAR *var;
WCHAR expanded_string[MAX_PATH]; int len;
int len = ExpandEnvironmentStringsW(str, expanded_string, _countof(expanded_string)); const WCHAR *value;
} regkey_str[] = {
{L"config_dir", o.config_dir, _countof(o.config_dir), L"%USERPROFILE%\\OpenVPN\\config"},
{L"config_ext", o.ext_string, _countof(o.ext_string), L"ovpn"},
{L"log_dir", o.log_dir, _countof(o.log_dir), L"%USERPROFILE%\\OpenVPN\\log"}
};
if (len > max_len || len > (int) _countof(expanded_string)) struct regkey_int {
{ const WCHAR *name;
PrintDebug (L"Failed to expanded env vars in '%s'. String too long", str); DWORD *var;
return; DWORD value;
} } regkey_int[] = {
wcsncpy(str, expanded_string, max_len); {L"log_append", &o.log_append, 0},
{L"show_balloon", &o.show_balloon, 1},
{L"silent_connection", &o.silent_connection, 0},
{L"preconnectscript_timeout", &o.preconnectscript_timeout, 10},
{L"connectscript_timeout", &o.connectscript_timeout, 30},
{L"disconnectscript_timeout", &o.disconnectscript_timeout, 10},
{L"show_script_window", &o.show_script_window, 0},
{L"service_only", &o.service_only, 0}
};
static int
RegValueExists (HKEY regkey, const WCHAR *name)
{
return (RegQueryValueEx (regkey, name, NULL, NULL, NULL, NULL) == ERROR_SUCCESS);
} }
int static int
GetRegistryKeys() GetGlobalRegistryKeys()
{ {
TCHAR windows_dir[MAX_PATH]; TCHAR windows_dir[MAX_PATH];
TCHAR temp_path[MAX_PATH];
TCHAR openvpn_path[MAX_PATH]; TCHAR openvpn_path[MAX_PATH];
TCHAR profile_dir[MAX_PATH]; TCHAR profile_dir[MAX_PATH];
HKEY regkey; HKEY regkey;
@ -72,7 +90,7 @@ GetRegistryKeys()
/* Get path to OpenVPN installation. */ /* Get path to OpenVPN installation. */
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OpenVPN"), 0, KEY_READ, &regkey) if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OpenVPN"), 0, KEY_READ, &regkey)
!= ERROR_SUCCESS) != ERROR_SUCCESS)
{ {
/* registry key not found */ /* registry key not found */
ShowLocalizedMsg(IDS_ERR_OPEN_REGISTRY); ShowLocalizedMsg(IDS_ERR_OPEN_REGISTRY);
@ -100,165 +118,231 @@ GetRegistryKeys()
_tcsncpy(o.ovpn_admin_group, OVPN_ADMIN_GROUP, _countof(o.ovpn_admin_group)-1); _tcsncpy(o.ovpn_admin_group, OVPN_ADMIN_GROUP, _countof(o.ovpn_admin_group)-1);
} }
if (o.exe_path[0] != L'\0') /* set by cmd-line */ if (!GetRegistryValue(regkey, _T("exe_path"), o.exe_path, _countof(o.exe_path)))
ExpandString (o.exe_path, _countof(o.exe_path));
else if (!GetRegistryValue(regkey, _T("exe_path"), o.exe_path, _countof(o.exe_path)))
{ {
_sntprintf_0(o.exe_path, _T("%sbin\\openvpn.exe"), openvpn_path); _sntprintf_0(o.exe_path, _T("%sbin\\openvpn.exe"), openvpn_path);
} }
if (o.priority_string[0] != L'\0') /* set by cmd-line */
ExpandString (o.priority_string, _countof(o.priority_string));
if (!GetRegistryValue(regkey, _T("priority"), o.priority_string, _countof(o.priority_string))) if (!GetRegistryValue(regkey, _T("priority"), o.priority_string, _countof(o.priority_string)))
{ {
_tcsncpy(o.priority_string, _T("NORMAL_PRIORITY_CLASS"), _countof(o.priority_string)-1); _tcsncpy(o.priority_string, _T("NORMAL_PRIORITY_CLASS"), _countof(o.priority_string)-1);
} }
RegCloseKey(regkey); RegCloseKey(regkey);
return true;
/* user-sepcific config_dir in user's profile by default */
_sntprintf_0(temp_path, _T("%s\\OpenVPN\\config"), profile_dir);
if (!GetRegKey(_T("config_dir"), o.config_dir,
temp_path, _countof(o.config_dir))) return(false);
if (!GetRegKey(_T("config_ext"), o.ext_string, _T("ovpn"), _countof(o.ext_string))) return(false);
_sntprintf_0(temp_path, _T("%s\\OpenVPN\\log"), profile_dir);
if (!GetRegKey(_T("log_dir"), o.log_dir,
temp_path, _countof(o.log_dir))) return(false);
if (!GetRegKey(_T("log_append"), o.append_string, _T("0"), _countof(o.append_string))) return(false);
if (o.editor[0] != L'\0') /* set by cmd-line */
ExpandString (o.editor, _countof(o.editor));
else
_sntprintf_0(o.editor, _T("%s\\system32\\notepad.exe"), windows_dir);
if (o.log_viewer[0] != L'\0') /* set by cmd-line */
ExpandString (o.log_viewer, _countof(o.log_viewer));
else
_sntprintf_0(o.log_viewer, _T("%s\\system32\\notepad.exe"), windows_dir);
if (!GetRegKey(_T("service_only"), o.service_only, _T("0"), _countof(o.service_only))) return(false);
if (!GetRegKey(_T("show_balloon"), o.show_balloon, _T("1"), _countof(o.show_balloon))) return(false);
if (!GetRegKey(_T("silent_connection"), o.silent_connection, _T("0"), _countof(o.silent_connection))) return(false);
if (!GetRegKey(_T("show_script_window"), o.show_script_window, _T("1"), _countof(o.show_script_window))) return(false);
if (!GetRegKey(_T("connectscript_timeout"), o.connectscript_timeout_string, _T("15"),
_countof(o.connectscript_timeout_string))) return(false);
o.connectscript_timeout = _ttoi(o.connectscript_timeout_string);
if ((o.connectscript_timeout < 0) || (o.connectscript_timeout > 99))
{
/* 0 <= connectscript_timeout <= 99 */
ShowLocalizedMsg(IDS_ERR_CONN_SCRIPT_TIMEOUT);
return(false);
}
if (!GetRegKey(_T("disconnectscript_timeout"), o.disconnectscript_timeout_string, _T("10"),
_countof(o.disconnectscript_timeout_string))) return(false);
o.disconnectscript_timeout = _ttoi(o.disconnectscript_timeout_string);
if ((o.disconnectscript_timeout <= 0) || (o.disconnectscript_timeout > 99))
{
/* 0 < disconnectscript_timeout <= 99 */
ShowLocalizedMsg(IDS_ERR_DISCONN_SCRIPT_TIMEOUT);
return(false);
}
if (!GetRegKey(_T("preconnectscript_timeout"), o.preconnectscript_timeout_string, _T("10"),
_countof(o.preconnectscript_timeout_string))) return(false);
o.preconnectscript_timeout = _ttoi(o.preconnectscript_timeout_string);
if ((o.preconnectscript_timeout <= 0) || (o.preconnectscript_timeout > 99))
{
/* 0 < disconnectscript_timeout <= 99 */
ShowLocalizedMsg(IDS_ERR_PRECONN_SCRIPT_TIMEOUT);
return(false);
}
return(true);
} }
int
int GetRegKey(const TCHAR name[], TCHAR *data, const TCHAR default_data[], DWORD len) GetRegistryKeys ()
{ {
LONG status; HKEY regkey;
DWORD type; DWORD status;
HKEY openvpn_key; int i;
HKEY openvpn_key_write;
DWORD dwDispos;
DWORD size = len * sizeof(*data);
DWORD max_len = len - 1;
/* If option is already set via cmd-line, return */ if (!GetGlobalRegistryKeys())
if (data[0] != 0) return false;
status = RegOpenKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, KEY_READ, &regkey);
for (i = 0 ; i < (int) _countof (regkey_str); ++i)
{ {
ExpandString (data, len); if ( status != ERROR_SUCCESS ||
return(true); !GetRegistryValue (regkey, regkey_str[i].name, regkey_str[i].var, regkey_str[i].len))
}
status = RegOpenKeyEx(HKEY_CURRENT_USER,
_T("SOFTWARE\\OpenVPN-GUI"),
0,
KEY_READ,
&openvpn_key);
if (status != ERROR_SUCCESS)
{
if (RegCreateKeyEx(HKEY_CURRENT_USER,
_T("Software\\OpenVPN-GUI"),
0,
_T(""),
REG_OPTION_NON_VOLATILE,
KEY_READ | KEY_WRITE,
NULL,
&openvpn_key,
&dwDispos) != ERROR_SUCCESS)
{ {
/* error creating registry key */ /* no value found in registry, use the default */
ShowLocalizedMsg(IDS_ERR_CREATE_REG_HKCU_KEY, _T("OpenVPN-GUI")); wcsncpy (regkey_str[i].var, regkey_str[i].value, regkey_str[i].len);
return(false); regkey_str[i].var[regkey_str[i].len-1] = L'\0';
} PrintDebug(L"default: %s = %s", regkey_str[i].name, regkey_str[i].var);
}
/* get a registry string */
status = RegQueryValueEx(openvpn_key, name, NULL, &type, (byte *) data, &size);
if (status != ERROR_SUCCESS || type != REG_SZ)
{
/* key did not exist - set default value */
status = RegOpenKeyEx(HKEY_CURRENT_USER,
_T("SOFTWARE\\OpenVPN-GUI"),
0,
KEY_READ | KEY_WRITE,
&openvpn_key_write);
if (status != ERROR_SUCCESS) {
/* can't open registry for writing */
ShowLocalizedMsg(IDS_ERR_WRITE_REGVALUE, _T("OpenVPN-GUI"), name);
return(false);
}
if(!SetRegistryValue(openvpn_key_write, name, default_data))
{
/* cant read / set reg-key */
return(false);
} }
_tcsncpy(data, default_data, max_len); else
RegCloseKey(openvpn_key_write); PrintDebug(L"from registry: %s = %s", regkey_str[i].name, regkey_str[i].var);
} }
else
for (i = 0 ; i < (int) _countof (regkey_int); ++i)
{ {
size /= sizeof(*data); if ( status != ERROR_SUCCESS ||
data[size - 1] = L'\0'; /* REG_SZ strings are not guaranteed to be null-terminated */ !GetRegistryValueNumeric (regkey, regkey_int[i].name, regkey_int[i].var))
{
/* no value found in registry, use the default */
*regkey_int[i].var = regkey_int[i].value;
PrintDebug(L"default: %s = %lu", regkey_int[i].name, *regkey_int[i].var);
}
else
PrintDebug(L"from registry: %s = %lu", regkey_int[i].name, *regkey_int[i].var);
} }
RegCloseKey(openvpn_key); if ( status != ERROR_SUCCESS)
RegCloseKey (regkey);
// Expand environment variables inside the string. if ((o.disconnectscript_timeout == 0))
ExpandString (data, len); {
ShowLocalizedMsg(IDS_ERR_DISCONN_SCRIPT_TIMEOUT);
o.disconnectscript_timeout = 10;
}
if ((o.preconnectscript_timeout == 0))
{
ShowLocalizedMsg(IDS_ERR_PRECONN_SCRIPT_TIMEOUT);
o.preconnectscript_timeout = 10;
}
return(true); ExpandOptions ();
return true;
}
int
SaveRegistryKeys ()
{
HKEY regkey;
DWORD status;
int i;
status = RegCreateKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE|KEY_READ, NULL, &regkey, NULL);
if (status != ERROR_SUCCESS)
{
ShowLocalizedMsg (IDS_ERR_CREATE_REG_HKCU_KEY, GUI_REGKEY_HKCU);
return false;
}
for (i = 0 ; i < (int) _countof (regkey_str); ++i)
{
/* save only if the value differs from default or already present in registry */
if ( CompareStringExpanded (regkey_str[i].var, regkey_str[i].value) != 0 ||
RegValueExists(regkey, regkey_str[i].name) )
{
if (!SetRegistryValue (regkey, regkey_str[i].name, regkey_str[i].var))
return false;
}
}
for (i = 0 ; i < (int) _countof (regkey_int); ++i)
{
if ( *regkey_int[i].var != regkey_int[i].value ||
RegValueExists(regkey, regkey_int[i].name) )
{
if (!SetRegistryValueNumeric (regkey, regkey_int[i].name, *regkey_int[i].var))
return false;
}
}
RegCloseKey (regkey);
return true;
}
static BOOL
GetRegistryVersion (version_t *v)
{
HKEY regkey;
CLEAR (*v);
DWORD len = sizeof(*v);
if (RegOpenKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, KEY_READ, &regkey) == ERROR_SUCCESS)
{
if (RegGetValueW (regkey, NULL, L"version", RRF_RT_REG_BINARY, NULL, v, &len)
!= ERROR_SUCCESS)
CLEAR (*v);
RegCloseKey(regkey);
}
return true;
}
static BOOL
SetRegistryVersion (const version_t *v)
{
HKEY regkey;
DWORD status;
BOOL ret = false;
status = RegCreateKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, &regkey, NULL);
if (status == ERROR_SUCCESS)
{
ret = (RegSetValueEx(regkey, L"version", 0, REG_BINARY, (const BYTE*) v, sizeof(*v))
!= ERROR_SUCCESS);
RegCloseKey(regkey);
}
else
PrintDebug (L"Eror opening/creating 'HKCU\\%s' registry key", GUI_REGKEY_HKCU);
return ret;
}
static int
MigrateNilingsKeys()
{
DWORD status;
BOOL ret = false;
HKEY regkey, regkey_proxy, regkey_nilings;
status = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Nilings\\OpenVPN-GUI", 0,
KEY_READ, &regkey_nilings);
if (status != ERROR_SUCCESS)
return true; /* No old keys to migrate */
status = RegCreateKeyEx(HKEY_CURRENT_USER, GUI_REGKEY_HKCU, 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &regkey, NULL);
if (status != ERROR_SUCCESS)
{
ShowLocalizedMsg (IDS_ERR_CREATE_REG_HKCU_KEY, GUI_REGKEY_HKCU);
RegCloseKey (regkey_nilings);
return false;
}
/* For some reason this needs ALL_ACCESS for the CopyTree below to work */
status = RegCreateKeyEx(regkey, L"proxy", 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &regkey_proxy, NULL);
if (status == ERROR_SUCCESS)
{
DWORD ui_lang;
/* Move language setting from Nilings to GUI_REGKEY_HKCU */
if (GetRegistryValueNumeric(regkey_nilings, L"ui_language", &ui_lang))
SetRegistryValueNumeric (regkey, L"ui_language", ui_lang);
status = RegCopyTree (regkey_nilings, NULL, regkey_proxy);
if (status == ERROR_SUCCESS)
{
RegDeleteValue (regkey_proxy, L"ui_language"); /* in case copied here */
ret = true;
}
RegCloseKey (regkey_proxy);
}
else
PrintDebug (L"Error creating key 'proxy' in HKCU\\%s", GUI_REGKEY_HKCU);
RegCloseKey (regkey);
RegCloseKey (regkey_nilings);
return ret;
}
int
UpdateRegistry (void)
{
version_t v;
GetRegistryVersion (&v);
if (memcmp(&v, &o.version, sizeof(v)) == 0)
return true;
switch (v.major)
{
case 0: /* Cleanup GUI_REGKEY_HKCU and migrate any values under Nilings */
RegDeleteTree (HKEY_CURRENT_USER, GUI_REGKEY_HKCU); /* delete all values and subkeys */
if (!MigrateNilingsKeys())
return false;
/* fall through to handle further updates */
case 11:
/* current version -- nothing to do */
break;
default:
break;
}
SetRegistryVersion (&o.version);
PrintDebug (L"Registry updated to version %hu.%hu", o.version.major, o.version.minor);
return true;
} }
LONG GetRegistryValue(HKEY regkey, const TCHAR *name, TCHAR *data, DWORD len) LONG GetRegistryValue(HKEY regkey, const TCHAR *name, TCHAR *data, DWORD len)
@ -287,7 +371,7 @@ GetRegistryValueNumeric(HKEY regkey, const TCHAR *name, DWORD *data)
DWORD type; DWORD type;
DWORD size = sizeof(*data); DWORD size = sizeof(*data);
LONG status = RegQueryValueEx(regkey, name, NULL, &type, (PBYTE) data, &size); LONG status = RegQueryValueEx(regkey, name, NULL, &type, (PBYTE) data, &size);
return (type == REG_DWORD ? status : ERROR_FILE_NOT_FOUND); return (type == REG_DWORD && status == ERROR_SUCCESS) ? 1 : 0;
} }
int SetRegistryValue(HKEY regkey, const TCHAR *name, const TCHAR *data) int SetRegistryValue(HKEY regkey, const TCHAR *name, const TCHAR *data)

View File

@ -22,7 +22,9 @@
#ifndef REGISTRY_H #ifndef REGISTRY_H
#define REGISTRY_H #define REGISTRY_H
int GetRegistryKeys(); int GetRegistryKeys(void);
int SaveRegistryKeys(void);
int UpdateRegistry(void);
int GetRegKey(const TCHAR name[], TCHAR data[], const TCHAR default_data[], DWORD len); int GetRegKey(const TCHAR name[], TCHAR data[], const TCHAR default_data[], DWORD len);
LONG GetRegistryValue(HKEY regkey, const TCHAR *name, TCHAR *data, DWORD len); LONG GetRegistryValue(HKEY regkey, const TCHAR *name, TCHAR *data, DWORD len);
LONG GetRegistryValueNumeric(HKEY regkey, const TCHAR *name, DWORD *data); LONG GetRegistryValueNumeric(HKEY regkey, const TCHAR *name, DWORD *data);

View File

@ -135,6 +135,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 51, 23, 177, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 51, 23, 177, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -136,6 +136,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 57, 23, 171, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 57, 23, 171, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -133,8 +133,48 @@ BEGIN
GROUPBOX "User Interface", 201, 6, 12, 235, 30 GROUPBOX "User Interface", 201, 6, 12, 235, 30
LTEXT "Language:", ID_TXT_LANGUAGE, 17, 25, 52, 12 LTEXT "Language:", ID_TXT_LANGUAGE, 17, 25, 52, 12
COMBOBOX ID_CMB_LANGUAGE, 57, 23, 171, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 57, 23, 171, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 100, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 45, 23, 183, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 45, 23, 183, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -136,6 +136,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 37, 23, 191, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 37, 23, 191, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 47, 23, 181, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 47, 23, 181, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 43, 23, 185, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 43, 23, 185, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -137,6 +137,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 39, 23, 189, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 39, 23, 189, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "ログファイルに追記", ID_CHK_LOG_APPEND, 17, 95, 200, 10
AUTOCHECKBOX "スクリプト実行ウィンドウを表示する", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "接続時にステータスダイアログを表示しない", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "初期接続時", ID_RB_BALLOON1, 22, 155, 60, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "毎回の接続時", ID_RB_BALLOON2, 96, 155, 90, 10
AUTORADIOBUTTON "表示しない", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
BEGIN
GROUPBOX "設定ファイル", 201, 6, 12, 235, 45
LTEXT "ディレクトリ:", ID_TXT_FOLDER, 17, 25, 52, 10
LTEXT "拡張子:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 58, 23, 145, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 58, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "ログファイル", 202, 6, 62, 235, 30
LTEXT "ディレクトリ:", ID_TXT_FOLDER, 17, 74, 52, 10
EDITTEXT ID_EDT_LOG_DIR, 58, 72, 145, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "スクリプトの終了を待つ時間", 201, 6, 97, 235, 60
LTEXT "接続前スクリプト:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 120, 10
LTEXT "接続スクリプト:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 120, 10
LTEXT "切断スクリプト:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 120, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 143, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 143, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 143, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "サービスのみのモードを有効にする", ID_CHK_SERVICE_ONLY, 6, 162, 200, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 37, 23, 191, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 37, 23, 191, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Opstarten", 202, 6, 47, 235, 30 GROUPBOX "Opstarten", 202, 6, 47, 235, 30
AUTOCHECKBOX "Opstarten met Windows", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Opstarten met Windows", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -135,6 +135,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_NORWEGIAN, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -136,6 +136,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 57, 23, 171, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 57, 23, 171, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Inicialização", 202, 6, 47, 235, 30 GROUPBOX "Inicialização", 202, 6, 47, 235, 30
AUTOCHECKBOX "Executar ao iniciar o Windows", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Executar ao iniciar o Windows", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_PORTUGUESE, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -136,6 +136,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -136,6 +136,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 31, 23, 197, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 31, 23, 197, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -134,6 +134,45 @@ BEGIN
COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP COMBOBOX ID_CMB_LANGUAGE, 42, 23, 186, 400, CBS_DROPDOWNLIST | WS_TABSTOP
GROUPBOX "Startup", 202, 6, 47, 235, 30 GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12 AUTOCHECKBOX "Launch on Windows startup", ID_CHK_STARTUP, 17, 59, 200, 12
GROUPBOX "Preferences", 202, 6, 82, 235, 90
AUTOCHECKBOX "Append to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "Silent connection", ID_CHK_SILENT, 17, 125, 200, 10
LTEXT "Show Balloon", ID_TXT_BALLOON, 17, 140, 100, 10
AUTORADIOBUTTON "On connect", ID_RB_BALLOON1, 28, 155, 50, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "On connect/reconnect", ID_RB_BALLOON2, 86, 155, 90, 10
AUTORADIOBUTTON "Never", ID_RB_BALLOON0, 181, 155, 40, 10
END
/* Advanced Dialog */
ID_DLG_ADVANCED DIALOGEX 6, 18, 252, 218
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER
CAPTION "Advanced"
FONT 8, "Microsoft Sans Serif"
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
BEGIN
GROUPBOX "Configuration Files", 201, 6, 12, 235, 45
LTEXT "Folder:", ID_TXT_FOLDER, 17, 25, 32, 10
LTEXT "Extension:", ID_TXT_EXTENSION, 17, 40, 52, 10
EDITTEXT ID_EDT_CONFIG_DIR, 53, 23, 150, 12, ES_AUTOHSCROLL
EDITTEXT ID_EDT_CONFIG_EXT, 53, 38, 25, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_CONFIG_DIR, 208, 23, 25, 12
GROUPBOX "Log Files", 202, 6, 62, 235, 30
LTEXT "Folder:", ID_TXT_FOLDER, 17, 74, 32, 10
EDITTEXT ID_EDT_LOG_DIR, 53, 72, 150, 12, ES_AUTOHSCROLL
PUSHBUTTON "…", ID_BTN_LOG_DIR, 208, 72, 25, 12
GROUPBOX "Script Timeout", 201, 6, 97, 235, 60
LTEXT "Preconnect script timeout:", ID_TXT_PRECONNECT_TIMEOUT, 17, 110, 100, 10
LTEXT "Connect script timeout:", ID_TXT_CONNECT_TIMEOUT, 17, 125, 90, 10
LTEXT "Disconnect script timeout:", ID_TXT_DISCONNECT_TIMEOUT, 17, 140, 90, 10
EDITTEXT ID_EDT_PRECONNECT_TIMEOUT, 103, 108, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_CONNECT_TIMEOUT, 103, 123, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
EDITTEXT ID_EDT_DISCONNECT_TIMEOUT, 103, 138, 20, 12, ES_AUTOHSCROLL|ES_NUMBER
AUTOCHECKBOX "Service only", ID_CHK_SERVICE_ONLY, 6, 162, 100, 12
END END
/* About Dialog */ /* About Dialog */

View File

@ -69,11 +69,11 @@ RunPreconnectScript(connection_t *c)
si.hStdOutput = NULL; si.hStdOutput = NULL;
if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE,
(o.show_script_window[0] == '1' ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW), (o.show_script_window ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW),
NULL, c->config_dir, &si, &pi)) NULL, c->config_dir, &si, &pi))
return; return;
for (i = 0; i <= o.preconnectscript_timeout; i++) for (i = 0; i <= (int) o.preconnectscript_timeout; i++)
{ {
if (!GetExitCodeProcess(pi.hProcess, &exit_code)) if (!GetExitCodeProcess(pi.hProcess, &exit_code))
goto out; goto out;
@ -122,7 +122,7 @@ RunConnectScript(connection_t *c, int run_as_service)
si.hStdOutput = NULL; si.hStdOutput = NULL;
if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE,
(o.show_script_window[0] == '1' ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW), (o.show_script_window ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW),
NULL, c->config_dir, &si, &pi)) NULL, c->config_dir, &si, &pi))
{ {
ShowLocalizedMsg(IDS_ERR_RUN_CONN_SCRIPT, cmdline); ShowLocalizedMsg(IDS_ERR_RUN_CONN_SCRIPT, cmdline);
@ -132,7 +132,7 @@ RunConnectScript(connection_t *c, int run_as_service)
if (o.connectscript_timeout == 0) if (o.connectscript_timeout == 0)
goto out; goto out;
for (i = 0; i <= o.connectscript_timeout; i++) for (i = 0; i <= (int) o.connectscript_timeout; i++)
{ {
if (!GetExitCodeProcess(pi.hProcess, &exit_code)) if (!GetExitCodeProcess(pi.hProcess, &exit_code))
{ {
@ -191,11 +191,11 @@ RunDisconnectScript(connection_t *c, int run_as_service)
si.hStdOutput = NULL; si.hStdOutput = NULL;
if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE,
(o.show_script_window[0] == '1' ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW), (o.show_script_window ? CREATE_NEW_CONSOLE : CREATE_NO_WINDOW),
NULL, c->config_dir, &si, &pi)) NULL, c->config_dir, &si, &pi))
return; return;
for (i = 0; i <= o.disconnectscript_timeout; i++) for (i = 0; i <= (int) o.disconnectscript_timeout; i++)
{ {
if (!GetExitCodeProcess(pi.hProcess, &exit_code)) if (!GetExitCodeProcess(pi.hProcess, &exit_code))
goto out; goto out;

12
tray.c
View File

@ -60,7 +60,7 @@ CreatePopupMenus()
if (o.num_configs == 1) { if (o.num_configs == 1) {
/* Create Main menu with actions */ /* Create Main menu with actions */
if (o.service_only[0] == '0') { if (o.service_only == 0) {
AppendMenu(hMenu, MF_STRING, IDM_CONNECTMENU, LoadLocalizedString(IDS_MENU_CONNECT)); AppendMenu(hMenu, MF_STRING, IDM_CONNECTMENU, LoadLocalizedString(IDS_MENU_CONNECT));
AppendMenu(hMenu, MF_STRING, IDM_DISCONNECTMENU, LoadLocalizedString(IDS_MENU_DISCONNECT)); AppendMenu(hMenu, MF_STRING, IDM_DISCONNECTMENU, LoadLocalizedString(IDS_MENU_DISCONNECT));
AppendMenu(hMenu, MF_STRING, IDM_STATUSMENU, LoadLocalizedString(IDS_MENU_STATUS)); AppendMenu(hMenu, MF_STRING, IDM_STATUSMENU, LoadLocalizedString(IDS_MENU_STATUS));
@ -100,7 +100,7 @@ CreatePopupMenus()
if (o.num_configs > 0) if (o.num_configs > 0)
AppendMenu(hMenu, MF_SEPARATOR, 0, 0); AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
if (o.service_only[0] == '1') { if (o.service_only) {
AppendMenu(hMenu, MF_STRING, IDM_SERVICE_START, LoadLocalizedString(IDS_MENU_SERVICEONLY_START)); AppendMenu(hMenu, MF_STRING, IDM_SERVICE_START, LoadLocalizedString(IDS_MENU_SERVICEONLY_START));
AppendMenu(hMenu, MF_STRING, IDM_SERVICE_STOP, LoadLocalizedString(IDS_MENU_SERVICEONLY_STOP)); AppendMenu(hMenu, MF_STRING, IDM_SERVICE_STOP, LoadLocalizedString(IDS_MENU_SERVICEONLY_STOP));
AppendMenu(hMenu, MF_STRING, IDM_SERVICE_RESTART, LoadLocalizedString(IDS_MENU_SERVICEONLY_RESTART)); AppendMenu(hMenu, MF_STRING, IDM_SERVICE_RESTART, LoadLocalizedString(IDS_MENU_SERVICEONLY_RESTART));
@ -114,7 +114,7 @@ CreatePopupMenus()
/* Create popup menus for every connection */ /* Create popup menus for every connection */
for (i=0; i < o.num_configs; i++) { for (i=0; i < o.num_configs; i++) {
if (o.service_only[0] == '0') { if (o.service_only == 0) {
AppendMenu(hMenuConn[i], MF_STRING, IDM_CONNECTMENU + i, LoadLocalizedString(IDS_MENU_CONNECT)); AppendMenu(hMenuConn[i], MF_STRING, IDM_CONNECTMENU + i, LoadLocalizedString(IDS_MENU_CONNECT));
AppendMenu(hMenuConn[i], MF_STRING, IDM_DISCONNECTMENU + i, LoadLocalizedString(IDS_MENU_DISCONNECT)); AppendMenu(hMenuConn[i], MF_STRING, IDM_DISCONNECTMENU + i, LoadLocalizedString(IDS_MENU_DISCONNECT));
AppendMenu(hMenuConn[i], MF_STRING, IDM_STATUSMENU + i, LoadLocalizedString(IDS_MENU_STATUS)); AppendMenu(hMenuConn[i], MF_STRING, IDM_STATUSMENU + i, LoadLocalizedString(IDS_MENU_STATUS));
@ -174,7 +174,7 @@ OnNotifyTray(LPARAM lParam)
break; break;
case WM_LBUTTONDBLCLK: case WM_LBUTTONDBLCLK:
if (o.service_only[0] == '1') { if (o.service_only) {
/* Start or stop OpenVPN service */ /* Start or stop OpenVPN service */
if (o.service_state == service_disconnected) { if (o.service_state == service_disconnected) {
MyStartService(); MyStartService();
@ -411,10 +411,10 @@ SetServiceMenuStatus()
{ {
HMENU hMenuHandle; HMENU hMenuHandle;
if (o.service_only[0] == '0') if (o.service_only == 0)
return; return;
if (o.service_only[0] == '1') if (o.service_only)
hMenuHandle = hMenu; hMenuHandle = hMenu;
else else
hMenuHandle = hMenuService; hMenuHandle = hMenuService;