• Thứ Sáu, 26/12/2003 11:33 (GMT+7)

    Hiên password với Visual Basic


    Picture

    Vì lý do bảo mật, ô nhập mật khẩu (password) trong các ứng dụng chỉ hiển thị dấu hoa thị "*". Cũng vì lý do bảo mật, thường password được chọn khá dài và gồm tổ hợp nhiều ký tự phức tạp, vì thế có khi bạn quên mất mình đã nhập những gì. Chương trình dưới đây có khả năng chuyển đổi các password dưới dạng dấu hoa thị sang dạng text thông thường. Bạn có thể sử dụng nó để tìm lại mật mã trong các ứng dụng cho phép lưu lại password nhưng chỉ hiển thị dưới dạng dấu hoa thị, chẳng hạn như Instant Messenger, Dial-up...
    Đầu tiên, bạn khởi động Visual Basic, tạo một project mới đặt tên là Showpasswords. Chúng ta sẽ xây dựng một module thực hiện công việc giải mã password. Bạn vào menu Project, chọn Add Module, trong phần soạn code cho module bạn nhập vào nội dung như sau:

    Option Explicit

    ' Sử dụng hàm API trong Windows

    Declare Function EnumChildWindows Lib "user32" ( _

    ByVal hWndParent As Long, _

    ByVal lpEnumFunc As Long, _

    ByVal lParam As Long) As Long

    Declare Function EnumWindows Lib "user32" ( _

    ByVal lpEnumFunc As Long, _

    ByVal lParam As Long) As Long

    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _

    ByVal hWnd As Long, _

    ByVal wMsg As Long, _

    ByVal wParam As Integer, _

    ByVal lParam As Long) As Long

    Public Declare Function ShowWindow Lib "user32" ( _

    ByVal hWnd As Long, _

    ByVal nCmdShow As Long) As Long

    Private Const EM_GETPASSWORDCHAR = &HD2

    Private Const EM_SETPASSWORDCHAR = &HCC

    Private Const EM_SETMODIFY = &HB9

    Private Const SW_HIDE = 0

    Private Const SW_SHOW = 5

    ' Xác định các chương trình đang chạy

    Private Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Long

    EnumChildWindows hWnd, AddressOf EnumWindowsProc2, 1

    EnumWindowsProc = True

    End Function


    'Xử lý các textbox chứa password

    Private Function EnumWindowsProc2(ByVal hWnd As Long, ByVal lParam As Long) As Long

    If SendMessage(hWnd, EM_GETPASSWORDCHAR, 0, 1) Then

    UpdateWindow hWnd

    End If

    EnumWindowsProc2 = True

    End Function


    ' Hiện password và làm refresh các đối tượng textbox

    Private Sub UpdateWindow(hWnd As Long)

    SendMessage hWnd, EM_SETPASSWORDCHAR, 0, 1

    SendMessage hWnd, EM_SETMODIFY, True, 1

    ShowWindow hWnd, SW_HIDE

    ShowWindow hWnd, SW_SHOW

    End Sub

    'Hàm để form chính sử dụng

    Public Function Showpasswords()

    EnumWindows AddressOf EnumWindowsProc, 1

    End Function

    Kết thúc phần soạn code cho module, bạn chọn Form1 (đã có sẵn) trong project, kéo thả đối tượng Command button từ Toolbox vào form và đặt thuộc tính Name, Caption cho Command button này lần lượt là "cmdShowpass" và "Show passwords". Trong phần soạn code cho form bạn nhập vào nội dung sau:

    Option Explicit

    Private Declare Function ShellExecute Lib "shell32.dll" _

    Alias "ShellExecuteA" ( _

    ByVal hWnd As Long, _

    ByVal lpOperation As String, _

    ByVal lpFile As String, _

    ByVal lpParameters As String, _

    ByVal lpDirectory As String, _

    ByVal nShowCmd As Long) As Long

    Private Sub cmdShowpass_Click()

    ShowPasswords

    End Sub

    Vậy là xong, bạn biên dịch chương trình và đặt tên là ShowPass.exe chẳng hạn. Bạn hãy mở một ứng dụng nào đó có ô nhập password như Dial-up và nhập password vào nhưng đừng nhấn OK vội mà hãy để nguyên đó. Chạy chương trình ShowPass và nhấn nút Show passwords. Bạn hãy thử nhìn xem bây giờ ô password trông như thế nào.
    Chương trình này rất nhỏ gọn, dung lượng chỉ có 20KB.ÿ

    Mai Tiến
    maitienbk@yahoo.com

     

    ID: A0311_117