Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 80 additions & 1 deletion openvpn.c
Original file line number Diff line number Diff line change
Expand Up @@ -880,18 +880,79 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
SetWindowPos(hwndDlg, NULL, 0, 0, rect.right, rect.bottom, SWP_NOMOVE);
PrintDebug(L"Window resized to = %d %d", rect.right, rect.bottom);
}
ShowWindow(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE);
}
else if (param->flags & FLAG_PASS_TOKEN)
{
SetWindowText(hwndDlg, LoadLocalizedString(IDS_NFO_TOKEN_PASSWORD_CAPTION));
SetDlgItemText(hwndDlg,
ID_TXT_DESCRIPTION,
LoadLocalizedString(IDS_NFO_TOKEN_PASSWORD_REQUEST, param->id));

if (param->c->flags & FLAG_DISABLE_SAVE_PASS)
{
ShowWindow(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it better to make this hiding of the save password checkbox the default outside of all if-else clauses? That will simplify the logic and have less deeply nested code.
Like, the following line could become else if (!(param->c->flags & FLAG_DISABLE_SAVE_PASS) && RecallSmart...())

}
else
{
if (RecallSmartCardPin(param->c->config_name, password))
{
if (password[0] != L'\0' && param->c->failed_auth_attempts == 0)
{
SetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password);
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED);

const char * template = "password \"%s\" \"%%s\"";
char* fmt = malloc(strlen(template) + strlen(param->id));
if (fmt)
{
sprintf(fmt, template, param->id);
PrintDebug(L"Send passwd to mgmt with format: '%hs'", fmt);
ManagementCommandFromInput(param->c, fmt, hwndDlg, ID_EDT_RESPONSE);
free(fmt);

EndDialog(hwndDlg, IDOK);
return TRUE;
}
else /* no memory? send stop signal */
{
WriteStatusLog(param->c,
L"GUI> ",
L"Out of memory in password dialog: sending stop signal",
false);
StopOpenVPN(param->c);
}
}
else if (param->c->failed_auth_attempts > 0)
{
SendMessage(
GetDlgItem(hwndDlg, ID_EDT_RESPONSE), EM_SETSEL, 0, MAKELONG(0, -1));

SetDlgItemTextW(
hwndDlg, ID_TXT_WARNING, LoadLocalizedString(IDS_NFO_KEY_PASS_RETRY));

// Extend window size for Warning
RECT rect = { 0 };
GetWindowRect(hwndDlg, &rect);
rect.right -= rect.left;
rect.bottom -= rect.top;

HWND warningText = GetDlgItem(hwndDlg, ID_TXT_WARNING);
RECT warningRect = { 0 };
GetWindowRect(warningText, &warningRect);

SetWindowPos(hwndDlg, NULL, 0, 0, rect.right, rect.bottom + warningRect.bottom - warningRect.top + DPI_SCALE(4), SWP_NOMOVE);
}

SecureZeroMemory(password, sizeof(password));
}
}
}
else
{
WriteStatusLog(param->c, L"GUI> ", L"Unknown password request", false);
SetDlgItemText(hwndDlg, ID_TXT_DESCRIPTION, wstr);
ShowWindow(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE);
}
free(wstr);

Expand Down Expand Up @@ -931,7 +992,7 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
switch (LOWORD(wParam))
{
case ID_EDT_RESPONSE:
if (!(param->flags & FLAG_CR_ECHO))
if (!(param->flags & FLAG_CR_ECHO) && HIWORD(wParam) != EN_KILLFOCUS)
{
ResetPasswordReveal(GetDlgItem(hwndDlg, ID_EDT_RESPONSE),
GetDlgItem(hwndDlg, ID_PASSWORD_REVEAL),
Expand All @@ -945,6 +1006,19 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
}
break;

case ID_CHK_SAVE_PASS:
param->c->flags ^= FLAG_SAVE_KEY_PASS;
if (param->c->flags & FLAG_SAVE_KEY_PASS)
{
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_CHECKED);
}
else
{
DeleteSavedSmartCardPin(param->c->config_name);
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_SAVE_PASS), BST_UNCHECKED);
}
break;

case IDOK:
if (GetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password, _countof(password))
&& !validate_input(password, L"\n"))
Expand Down Expand Up @@ -1001,6 +1075,11 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
PrintDebug(L"Send passwd to mgmt with format: '%hs'", fmt);
ManagementCommandFromInput(param->c, fmt, hwndDlg, ID_EDT_RESPONSE);
free(fmt);

if (param->flags & FLAG_PASS_TOKEN && param->c->flags & FLAG_SAVE_KEY_PASS)
{
SaveSmartCardPin(param->c->config_name, password);
}
}
else /* no memory? send stop signal */
{
Expand Down
19 changes: 19 additions & 0 deletions plap/stub.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,13 @@ SaveAuthPass(UNUSED const WCHAR *config_name, UNUSED const WCHAR *password)
{
return 1;
}

int
SaveSmartCardPin(UNUSED const WCHAR *config_name, UNUSED const WCHAR *username)
{
return 1;
}

int
SaveUsername(UNUSED const WCHAR *config_name, UNUSED const WCHAR *username)
{
Expand All @@ -151,12 +158,24 @@ RecallUsername(UNUSED const WCHAR *config_name, UNUSED WCHAR *username)
return 0;
}

int
RecallSmartCardPin(UNUSED const WCHAR *config_name, UNUSED WCHAR *pin)
{
return 0;
}

void
DeleteSavedAuthPass(UNUSED const WCHAR *config_name)
{
return;
}

void
DeleteSavedSmartCardPin(const WCHAR *config_name)
{
return;
}

void
DeleteSavedKeyPass(UNUSED const WCHAR *config_name)
{
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-cs.rc
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - Odpověď na výzvu"
Expand All @@ -89,8 +89,10 @@ BEGIN
LTEXT "Odpověď:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Zrušit", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Uložit heslo", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Zrušit", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-de.rc
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN – Challenge Response"
Expand All @@ -89,8 +89,10 @@ BEGIN
LTEXT "&Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "&OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "&Abbrechen", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Passwort &speichern", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "&Abbrechen", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-dk.rc
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - Challenge Response"
Expand All @@ -90,8 +90,10 @@ BEGIN
LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Annuller", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Husk kodeord", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Annuller", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-en.rc
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN – Challenge Response"
Expand All @@ -89,8 +89,10 @@ BEGIN
LTEXT "&Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "&OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "&Cancel", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "&Cancel", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-es.rc
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - Challenge Response"
Expand All @@ -88,8 +88,10 @@ BEGIN
LTEXT "Response:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Cancelar", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Save", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Cancelar", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-fa.rc
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST | WS_EX_RTLREADING | WS_EX_LAYOUTRTL
CAPTION "OpenVPN – پاسخ چالش"
Expand All @@ -91,8 +91,10 @@ BEGIN
LTEXT "پاسخ :", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "بسیار خوب", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "لغو", IDCANCEL, 90, 51, 52, 14
CHECKBOX "نگه داشتن رمز عبور", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "بسیار خوب", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "لغو", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-fi.rc
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - Haastemenetelmä"
Expand All @@ -89,8 +89,10 @@ BEGIN
LTEXT "Vastaus:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Peruuta", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Tallenna salasana", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Peruuta", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-fr.rc
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - Réponse de défi"
Expand All @@ -88,8 +88,10 @@ BEGIN
LTEXT "Réponse:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Annuler", IDCANCEL, 90, 51, 52, 14
CHECKBOX "Enregistrer mot de passe", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "Annuler", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-it.rc
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ BEGIN
END

/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - Challenge Response"
Expand All @@ -88,8 +88,10 @@ BEGIN
LTEXT "&Risposta:", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "&OK", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "&Annulla", IDCANCEL, 90, 51, 52, 14
CHECKBOX "&Ricorda password", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "&OK", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "&Annulla", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
8 changes: 5 additions & 3 deletions res/openvpn-gui-res-jp.rc
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ BEGIN
LTEXT "", ID_TXT_WARNING, 6, 108, 150, 10
END
/* Challenge Response Dialog */
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 72
ID_DLG_CHALLENGE_RESPONSE DIALOGEX 6, 18, 212, 90
STYLE WS_SIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_CENTER | DS_SETFOREGROUND
EXSTYLE WS_EX_TOPMOST
CAPTION "OpenVPN - チャレンジ/レスポンス"
Expand All @@ -90,8 +90,10 @@ BEGIN
LTEXT "レスポンス(&R):", ID_LTEXT_RESPONSE, 6, 30, 50, 10
EDITTEXT ID_EDT_RESPONSE, 60, 27, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL
ICON ID_ICO_EYE, ID_PASSWORD_REVEAL, 156, 28, 14, 14, SS_ICON|SS_NOTIFY|SS_REALSIZEIMAGE
PUSHBUTTON "OK(&O)", IDOK, 20, 51, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "キャンセル(&C)", IDCANCEL, 90, 51, 52, 14
CHECKBOX "パスワードを保存(&S)", ID_CHK_SAVE_PASS, 60, 45, 100, 10
PUSHBUTTON "OK(&O)", IDOK, 20, 65, 50, 14, BS_PUSHBUTTON | WS_TABSTOP
PUSHBUTTON "キャンセル(&C)", IDCANCEL, 90, 65, 52, 14
LTEXT "", ID_TXT_WARNING, 6, 86, 400, 10
END

/* Status Dialog */
Expand Down
Loading
Loading