Что нового

Отправить контролу $ES_PASSWORD

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Версия AutoIt:3.

Добрый день,как отправить в чужом окне контролу $ES_PASSWORD чтобы при вводе отображались точки а не текст?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
_SendMessage($hWnd, $EM_SETPASSWORDCHAR, Asc('*'))
_WinAPI_InvalidateRect($hWnd)


Только учти, что обратно возвратить текст в нормальный вид будет уже нельзя, заменить символ на другой тоже не получиться.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
обратно возвратить текст в нормальный вид будет уже нельзя
Для стороннего да, не получится, а для своего приложеия можно:

Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("_GUICtrlEdit_TogglePassChars - Demo", 300, 80)

$nInput = GUICtrlCreateInput("My Pass", 20, 20, 190, 20)
$nButton = GUICtrlCreateButton("Toggle Pass", 220, 20, 70, 20)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			_GUICtrlEdit_TogglePassChars($hGUI, $nInput, -1, "*")
	EndSwitch
WEnd

Func _GUICtrlEdit_TogglePassChars($hWnd, $hCtrl, $iToggleState=-1, $sPassChar="*")
	If Not IsHWnd($hWnd) Then
		$hWnd = WinGetHandle($hWnd)
	EndIf
	
	If Not IsHWnd($hCtrl) Then
		$hCtrl = ControlGetHandle($hWnd, "", $hCtrl)
	EndIf
	
	Local Const $EM_SETPASSWORDCHAR = 0xCC
	Local Const $EM_GETPASSWORDCHAR = 0xD2
	
	Local $iPass_Char = 0
	Local $aRet = DllCall("user32.dll", "long", "SendMessage", "hwnd", $hCtrl, "int", $EM_GETPASSWORDCHAR, "int", 0, "int", 0)
	
	If IsArray($aRet) And Not $aRet[0] Then
		$iPass_Char = Asc($sPassChar)
	EndIf
	
	If $iToggleState = 0 Then
		$iPass_Char = 0
	EndIf
	
	DllCall("user32.dll", "none", "SendMessage", "hwnd", $hCtrl, "int", $EM_SETPASSWORDCHAR, "int", $iPass_Char, "int", 0)
	DllCall("user32.dll", "none", "InvalidateRect", "hwnd", $hCtrl, "ptr", 0, "int", 1)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
Для стороннего да, не получится, а для своего приложеия можно...

Я знаю, но он ведь спрашивал именно для чужого.
 

xmel-sera

Новичок
Сообщения
16
Репутация
0
Здраствуйте! Подскажите, пожалуйста, почему прога вылетает с ошибкой когда в строку ввода пароля GUICtrlCreateInput дописываю $ES_PASSWORD.
Может параметр как-то не так прописывается?

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Documents and Settings\User\Рабочий стол\1.au3"
C:\Documents and Settings\User\??????? ????\1.au3 (11) : ==> Variable used without being declared.:
$pass = GUICtrlCreateInput ("", 50, -20, 80, 20, $ES_PASSWORD)
$pass = GUICtrlCreateInput ("", 50, -20, 80, 20,^ ERROR
>Exit code: 1 Time: 0.318

Строка:

Код:
$pass = GUICtrlCreateInput ("", 50, -20, 80, 20, $ES_PASSWORD)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
xmel-sera
а ты подключил библиотеку EditConstants.au3?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Kaster [?]
а ты подключил библиотеку EditConstants.au3?
100% нет.:smile:

xmel-sera,
В справке к любой функции GUICtrlCreate* при переходе по ссылке style в правом верхнем углу указан файл с необходимыми константами, и это не просто так. :smile:
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Yashied
Только учти, что обратно возвратить текст в нормальный вид будет уже нельзя, заменить символ на другой тоже не получиться.

Я сделал чтоб у чужого окна звёздочки перевелись в нормальный вид, только не выложу его сюда, не хочу бан или предупреждение, кому интересно - в ЛС
 
Верх