パスワード文字を取得(U)          <TOP>


SendMessage ウィンドウにメッセージを送信
EM_GETPASSWORDCHAR(&HD2) エディットコントロールのパスワード文字を取得
WM_GETTEXT(&HD) コントロールのキャプション・テキストをバッファにコピー
WM_GETTEXTLENGTH(&HE) WM_GETTEXTの前に文字数を調べる
 

上段のEditBox(プロパティで「パスワードあり」に設定しています。)パスワードを入力すると「*」が表示され、「実行」ボタンをクリックすると入力した文字が下段のTextBoxに表示されます。

参照

パスワード文字を取得(T)

 

'================================================================
'= パスワード文字を取得(U)
'=    (EM_GETPASSWORDCHAR4.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define WM_GETTEXT &HD                  'コントロールのキャプション・テキストをバッファにコピー
#define WM_GETTEXTLENGTH &HE            'WM_GETTEXTの前に文字数を調べる
#define EM_GETPASSWORDCHAR &HD2         'エディットコントロールのパスワード文字を取得する

Var Shared Edit1 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var length As Long
    Var strtmp As String
    Var Ret As Long

    If Api_SendMessage(Edit1.GethWnd, EM_GETPASSWORDCHAR, ByVal CLng(0), ByVal CLng(0)) <> 0 Then
        length = Api_SendMessage(Edit1.GethWnd, WM_GETTEXTLENGTH, ByVal 0, ByVal 0) + 1
        strtmp = Space$(length - 1)
        Ret = Api_SendMessage(Edit1.GethWnd, WM_GETTEXT, ByVal length, strtmp)
    End If

    Text1.SetWindowText strtmp
 End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End