122 lines
4.3 KiB
Python
122 lines
4.3 KiB
Python
|
'''login -- PythonWin user ID and password dialog box
|
||
|
|
||
|
(Adapted from originally distributed with Mark Hammond's PythonWin -
|
||
|
this now replaces it!)
|
||
|
|
||
|
login.GetLogin() displays a modal "OK/Cancel" dialog box with input
|
||
|
fields for a user ID and password. The password field input is masked
|
||
|
with *'s. GetLogin takes two optional parameters, a window title, and a
|
||
|
default user ID. If these parameters are omitted, the title defaults to
|
||
|
"Login", and the user ID is left blank. GetLogin returns a (userid, password)
|
||
|
tuple. GetLogin can be called from scripts running on the console - i.e. you
|
||
|
don't need to write a full-blown GUI app to use it.
|
||
|
|
||
|
login.GetPassword() is similar, except there is no username field.
|
||
|
|
||
|
Example:
|
||
|
import pywin.dialogs.login
|
||
|
title = "FTP Login"
|
||
|
def_user = "fred"
|
||
|
userid, password = pywin.dialogs.login.GetLogin(title, def_user)
|
||
|
|
||
|
Jim Eggleston, 28 August 1996
|
||
|
Merged with dlgpass and moved to pywin.dialogs by Mark Hammond Jan 1998.
|
||
|
'''
|
||
|
|
||
|
import win32ui
|
||
|
import win32api
|
||
|
import win32con
|
||
|
from pywin.mfc import dialog
|
||
|
|
||
|
def MakeLoginDlgTemplate(title):
|
||
|
style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT
|
||
|
cs = win32con.WS_CHILD | win32con.WS_VISIBLE
|
||
|
|
||
|
# Window frame and title
|
||
|
dlg = [ [title, (0, 0, 184, 40), style, None, (8, "MS Sans Serif")], ]
|
||
|
|
||
|
# ID label and text box
|
||
|
dlg.append([130, "User ID:", -1, (7, 9, 69, 9), cs | win32con.SS_LEFT])
|
||
|
s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER
|
||
|
dlg.append(['EDIT', None, win32ui.IDC_EDIT1, (50, 7, 60, 12), s])
|
||
|
|
||
|
# Password label and text box
|
||
|
dlg.append([130, "Password:", -1, (7, 22, 69, 9), cs | win32con.SS_LEFT])
|
||
|
s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER
|
||
|
dlg.append(['EDIT', None, win32ui.IDC_EDIT2, (50, 20, 60, 12), s | win32con.ES_PASSWORD])
|
||
|
|
||
|
# OK/Cancel Buttons
|
||
|
s = cs | win32con.WS_TABSTOP
|
||
|
dlg.append([128, "OK", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON])
|
||
|
s = win32con.BS_PUSHBUTTON | s
|
||
|
dlg.append([128, "Cancel", win32con.IDCANCEL, (124, 20, 50, 14), s])
|
||
|
return dlg
|
||
|
|
||
|
def MakePasswordDlgTemplate(title):
|
||
|
style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT
|
||
|
cs = win32con.WS_CHILD | win32con.WS_VISIBLE
|
||
|
# Window frame and title
|
||
|
dlg = [ [title, (0, 0, 177, 45), style, None, (8, "MS Sans Serif")], ]
|
||
|
|
||
|
# Password label and text box
|
||
|
dlg.append([130, "Password:", -1, (7, 7, 69, 9), cs | win32con.SS_LEFT])
|
||
|
s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER
|
||
|
dlg.append(['EDIT', None, win32ui.IDC_EDIT1, (50, 7, 60, 12), s | win32con.ES_PASSWORD])
|
||
|
|
||
|
# OK/Cancel Buttons
|
||
|
s = cs | win32con.WS_TABSTOP | win32con.BS_PUSHBUTTON
|
||
|
dlg.append([128, "OK", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON])
|
||
|
dlg.append([128, "Cancel", win32con.IDCANCEL, (124, 22, 50, 14), s])
|
||
|
return dlg
|
||
|
|
||
|
class LoginDlg(dialog.Dialog):
|
||
|
Cancel = 0
|
||
|
def __init__(self, title):
|
||
|
dialog.Dialog.__init__(self, MakeLoginDlgTemplate(title) )
|
||
|
self.AddDDX(win32ui.IDC_EDIT1,'userid')
|
||
|
self.AddDDX(win32ui.IDC_EDIT2,'password')
|
||
|
|
||
|
def GetLogin(title='Login', userid='', password=''):
|
||
|
d = LoginDlg(title)
|
||
|
d['userid'] = userid
|
||
|
d['password'] = password
|
||
|
if d.DoModal() != win32con.IDOK:
|
||
|
return (None, None)
|
||
|
else:
|
||
|
return (d['userid'], d['password'])
|
||
|
|
||
|
class PasswordDlg(dialog.Dialog):
|
||
|
def __init__(self, title):
|
||
|
dialog.Dialog.__init__(self, MakePasswordDlgTemplate(title) )
|
||
|
self.AddDDX(win32ui.IDC_EDIT1,'password')
|
||
|
|
||
|
def GetPassword(title='Password', password=''):
|
||
|
d = PasswordDlg(title)
|
||
|
d['password'] = password
|
||
|
if d.DoModal()!=win32con.IDOK:
|
||
|
return None
|
||
|
return d['password']
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
import sys
|
||
|
title = 'Login'
|
||
|
def_user = ''
|
||
|
if len(sys.argv) > 1:
|
||
|
title = sys.argv[1]
|
||
|
if len(sys.argv) > 2:
|
||
|
def_userid = sys.argv[2]
|
||
|
userid, password = GetLogin(title, def_user)
|
||
|
if userid == password == None:
|
||
|
print("User pressed Cancel")
|
||
|
else:
|
||
|
print("User ID: ", userid)
|
||
|
print("Password:", password)
|
||
|
newpassword = GetPassword("Reenter just for fun", password)
|
||
|
if newpassword is None:
|
||
|
print("User cancelled")
|
||
|
else:
|
||
|
what = ""
|
||
|
if newpassword != password:
|
||
|
what = "not "
|
||
|
print("The passwords did %smatch" % (what))
|