返回列表 发帖

[AU3基础] input 密码如何先显示明文再变成星号【已解决】

本帖最后由 fenhanxue 于 2017-10-15 01:43 编辑
  1. #include <EditConstants.au3>
  2. #include <GUIConstantsEx.au3>
  3. #include <StaticConstants.au3>
  4. #include <WindowsConstants.au3>
  5. #Region ### START Koda GUI section ### Form=
  6. $Form1 = GUICreate("Form1", 214, 109, 562, 216)
  7. $Input1 = GUICtrlCreateInput("", 64, 32, 113, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
  8. $Label1 = GUICtrlCreateLabel("密码:", 24, 32, 40, 17,$ES_PASSWORD)
  9. GUISetState(@SW_SHOW)
  10. #EndRegion ### END Koda GUI section ###

  11. While 1
  12.         $nMsg = GUIGetMsg()
  13.         Switch $nMsg
  14.                 Case $GUI_EVENT_CLOSE
  15.                         Exit

  16.         EndSwitch
  17. WEnd
复制代码
$Input1 = GUICtrlCreateInput("", 64, 32, 113, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))

这样的样式,键盘打字进去,会直接显示星号

有没办法实现这样的效果:
键盘输入一个字符,这个字符先明文显示在input里,过200毫秒左右时间,再变成星号?
i miss

回复 1# fenhanxue


    我記得 INPUT框  有個範例是  限制輸入的字元

因為它採用了  時時檢測的方法  可以 做到  變化一下

檢測完了  就 直接改為* 號  然後 把真正的資料 記在另外的變數裡

TOP

回复 2# kk_lee69
  1. #include <EditConstants.au3>
  2. #include <GUIConstantsEx.au3>
  3. #include <WindowsConstants.au3>
  4. #Region ### START Koda GUI section ### Form=
  5. $Form1 = GUICreate("Form1", 623, 449, 192, 114)
  6. $Input1 = GUICtrlCreateInput("", 32, 40, 529, 21)
  7. $bt = GUICtrlCreateButton('读',10,100,50,40)
  8. GUISetState(@SW_SHOW)
  9. #EndRegion ### END Koda GUI section ###
  10. Global $data = ''

  11. While 1
  12.         $nMsg = GUIGetMsg()
  13.         Switch $nMsg
  14.                 Case $GUI_EVENT_CLOSE
  15.                         Exit
  16.                 Case $bt
  17.                         MsgBox(0,'',$data)
  18.                        

  19.         EndSwitch
  20.        
  21.         check();
  22. WEnd


  23. Func check();
  24.         Local $temp = GUICtrlRead($Input1)
  25.         Local $len_new = StringLen($temp)
  26.         Local $len_old = StringLen($data)
  27.        
  28.        
  29.         If $len_new > $len_old Then
  30.                 Local $temp_right = StringTrimLeft($temp,StringLen($data))
  31.                 $data &= $temp_right
  32.                 Local $out = ''
  33.                 For $i = 1 To StringLen($data)
  34.                         $out &= '*'
  35.                 Next
  36.                 Sleep(200)
  37.                 GUICtrlSetData($Input1,$out)
  38.         ElseIf $len_new < $len_old Then
  39.                 $data = StringTrimRight($data,$len_old-$len_new)
  40.         EndIf
  41. EndFunc
复制代码
这样?
感觉输快了会卡顿

TOP

回复 3# fenhanxue

理論上 輸入密碼 不會有人打快的吧   打快了 不就等同 不顯示 一樣的意思

我覺得你的做法效果不錯了
我本來的意思是  如下的範例

從 MY_WM_COMMAND 去改 就好

  1. #include <ButtonConstants.au3>

  2. #include <EditConstants.au3>

  3. #include <GUIConstantsEx.au3>

  4. #include <WindowsConstants.au3>

  5.  

  6. $Form1 = GUICreate("Form1", 629, 106, 192, 132)

  7. $Input1 = GUICtrlCreateInput("Input1", 40, 32, 433, 24)

  8. $Button1 = GUICtrlCreateButton("Button1", 496, 32, 105, 33)


  9. GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

  10.  


  11.         $nMsg = GUIGetMsg()

  12.         Switch $nMsg

  13.                 Case $GUI_EVENT_CLOSE

  14.                         Exit

  15.                 Case $Button1                  

  16.                         GUICtrlSetData($Input1, '')

  17.         EndSwitch


  18.  

  19. Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)

  20.         Local Const $EN_CHANGE = 0x300

  21.         Local $nNotifyCode = BitShift($wParam, 16)

  22.         Local $nID = BitAND($wParam, 0xFFFF)

  23.         Local $hCtrl = $lParam

  24.         If $nID = $Input1 Then

  25.                 If $nNotifyCode = $EN_CHANGE Then

  26.                         $read=GUICtrlRead($Input1)

  27.                         If String(StringLeft($read,1))=="0" Or String(StringLeft($read,1))=="." Then

  28.                                         GUICtrlSetData($Input1,StringRegExpReplace($read,'^0+|^\.+',''))

  29.                         Else

  30.                                 $write=StringRegExpReplace($read,'[^\.0-9]+','')

  31.                                 $temp=StringSplit($write,".",1+2)

  32.                                 if UBound($temp)>2 Then $write=$temp[0]&"."&$temp[1]

  33.                                 GUICtrlSetData($Input1,$write)

  34.                         EndIf

  35.                 EndIf

  36.         EndIf


复制代码 高亮切换

TOP

回复 4# kk_lee69


    恩,还是这样用注册消息靠谱,注册消息这块一直一知半解,感谢指点啦

TOP

返回列表