GUICtrlCreateInput als Passwortabfrage??

  • Schönen Abend zusammen.
    Ist es möglich, ein Inputfeld(GUICtrlCreateInput) als Passwortabfrage zu machen, sodass nur Sternchen(****)angezeigt werden?
    Bei einer InputBox ist das ja möglich. Allerdings soll das in eine GUI integriert werden und ohne InputBox laufen.
    Im Moment fällt mir nur ein, jeden Tastendruck abzufangen, in einer VAriable zu speichern und stattdessen ein * auszugeben.
    Das ist aber nicht unbedingt einfach.
    Ich hoffe, ihr habt eine Lösung für mich.

  • Hi, steht in der Hilfe zu der Func Guictrlcreateinput

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<EditConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $file, $btn, $msg

    GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45)
    $file = GUICtrlCreateInput("", 10, 5, 300, 20, $ES_PASSWORD)
    $btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    EndSelect
    WEnd

    [/autoit]
  • Danke, habs auch grad entdeckt.
    Leider sehe ich trotz Brille manchmal nicht die einfachsten Dinge, wie z.B. Links zu Style-Liste. :whistling:

    Edit: Ohne kleinlich zu wirken, aber da erscheinen bei mir fette Punkte anstatt Sternchen. Ist zwar nur ein Schönheitsfehler, aber gibt es keine Sternchen für mich?? ;(

    Einmal editiert, zuletzt von penta.phoenix (2. Juni 2008 um 20:19)

  • Du kannst doch andere Zeichen benutzen

    Wie meinen?? :wacko:
    Natürlich kann ich die Punkte verwenden, dass sagte ich ja bereits, aber Sternchen wären schöner. ^^

    • Offizieller Beitrag

    Das Zeichen legt das Betriebssystem (genauer GUI-Manager) fest, bei Vista sind es fette schwarze Punkte, unter XP auch, vorher waren es Sternchen (wenn ich mich richtig erinnere)...
    Aus Benutzersicht wäre es mir unangenehm, wenn du das Zeichen tauschst, weil ich eine Erwartung daran habe, wie so ein Feld unter meinem Betriebssystem aussieht ;).

    peethebee

  • Ach so, ich hatte die Hoffnung, man könnte es irgendwie im Input selber ändern.
    Wenn ich dich richtig verstanden habe, geht das aber nur über eine Änderung, die das komplette System betrifft.
    Auch wenn ich es jetzt nicht ausprobieren möchte: Das müsste doch auch temporär gehen. Also ändern, Input anzeigen, wieder ändern.
    Oder ist das nicht möglich??

  • Sorry, da hab ich was verwechselt (bei einer InputBox kann man das Zeichen ändern.
    Aber falls das WinXP bzw. das Vista Theme dran schuld ist kann man es mit irgend so einem DLL-Call für das Programm temporär abschalten (hab ihn aber grad nicht im Kopf)

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    • Offizieller Beitrag

    Hallo,

    geht das?


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #Include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $file, $btn, $msg

    GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45)
    $file = GUICtrlCreateInput("", 10, 5, 300, 20, $ES_PASSWORD)
    $btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)

    [/autoit] [autoit][/autoit] [autoit]

    _SendMessage(GUICtrlGetHandle($file), $EM_SETPASSWORDCHAR, Asc('*'), 0)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    EndSelect
    WEnd

    [/autoit]
  • Ja, das geht :) Sogar, wenn man den Style $ES_PASSWORD Nicht gesetzt hat
    _SendMessage(GUICtrlGetHandle($file), $EM_SETPASSWORDCHAR, 0, 0)
    Schaltet die Box auf Nicht-Passwort Anzeige zurück ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #Include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $file, $btn, $msg, $btn1,$btn2,$char

    GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45)
    $file = GUICtrlCreateInput("", 10, 5, 300, 20)
    GUICtrlSetFont(-1,10,0,0,"Arial")
    $btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)
    $btn1 = GUICtrlCreateButton("Set PW-Char:", 20, 35, 80, 20)
    $char = GUICtrlCreateInput(ChrW(0x25CF),100,35,30,20)
    GUICtrlSetFont(-1,10,0,0,"Arial")
    GUICtrlSetLimit($char,1)
    $btn2 = GUICtrlCreateLabel("Leave empty to unhide PW", 140, 35, 200, 20)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    Case $msg = $btn1
    _SendMessageAW(GUICtrlGetHandle($file), $EM_SETPASSWORDCHAR, AscW(GUICtrlRead($char)), 0)
    GUICtrlSetStyle($file,-1)
    EndSelect
    WEnd

    ; Tries to use Unicode-function, if it doens't work, ANSI
    Func _SendMessageAW($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lparam")
    Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "int", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
    If @error Then $aResult = DllCall("user32.dll", $sReturnType, "SendMessage", "hwnd", $hWnd, "int", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
    If @error Then Return SetError(@error, @extended, "")
    If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
    Return $aResult
    EndFunc ;==>_SendMessage

    [/autoit]

    Einmal editiert, zuletzt von progandy (7. Juni 2008 um 12:27)