Fragen eines Anfängers

  • So hab wieder eine Menge fragen :D

    Ich hab hier eine kleine Funktion geschrieben mit der man sein Passwort eingeben kann, später soll es auch noch gespeichert werden.

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    #include <GuiListView.au3>

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

    Func verschluesseln()
    $form = GUICreate("Passwort",300,80,400,200)
    $input = GUICtrlCreateInput("Hier bitte ihr Passwort eingeben . . .",20,20,260,20)
    $button1 = GUICtrlCreateButton("Speichern",20,50,80,20)
    $button2 = GUICtrlCreateButton("Abbruch",200,50,80,20)
    GUISetState(@SW_SHOW)

    While 1
    $msg = GUIGetMsg()
    Select
    Case ($msg == $GUI_EVENT_CLOSE) Or ($msg == $button2)
    ExitLoop
    Case $msg == $button1
    $Inhalt=

    EndSelect

    Sleep(10)
    WEnd
    EndFunc

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

    verschluesseln()

    Exit

    [/autoit]

    Wie bekomme ich das was in der Inputbox steht jetzt in die variable $Inhalt

  • $inhalt = GUICtrlRead( $input )
    ;)

    Edit:

    wenn du $inhalt = $input machst, dann ist $inhalt = die CtrlID, aber
    nicht gleich dem, was in dem Feld steht.

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    Einmal editiert, zuletzt von noels (25. April 2007 um 21:12)

  • Na ja, für GUICtrlRead() bin ich wohl ein wenig zu spät ;)
    Aber eine Paßworteingabe bei der das Paßwort auf dem Schirm zu lesen ist, wirkt doch etwas unprofessionell:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Region ### START Koda GUI section ### Form=D:\Sprachen\AutoIt3\au3\kxf\Passwort.kxf
    $Form1 = GUICreate("AForm1", 413, 308, 303, 219)
    $Input = GUICtrlCreateInput("", 44, 64, 241, 21, $ES_PASSWORD+$ES_AUTOHSCROLL)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    MsgBox(0,"Kein Geheimnis", "Das Paßwort ist:" &@Lf &GUICtrlRead($Input))
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Jedenfalls, wenn ein so leistungsfähiges Mittel wie AutoIt zur Verfügung steht :D
    (Das Beispiel läßt sich noch schöner machen, aber darauf kam es ja jetzt nicht an)
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • :klatschen: Danke an Alle. :klatschen:

    So jetzt kommen die seltsamen Fragen :D

    Wie kann ich auf Werte die bei jedem Computer anders sind ABER bei jedem Computer sich nicht verändern zugreifen.
    Z.b.
    - Der Prozessortakt
    - Systemmodell
    - irgendwelche Werte in der Regestry

    Ich hoffe ihr versteht mich.
    Also Werte die sich nicht verändern, aber bei jedem PC anders sind.
    Wie kann ich auf sowas zugreifen und in eine Variable speichern.

    [Size=4]Ohh Gott ich seh schon die Fragen: Wie meinst du das? Ich brauch mehr Infos! Wofür brauchst du das?[/size]

  • Zitat

    Original von th.meger
    Wenn du Fragen hast Wesloth, dann her damit.


    Hab leider keine Fragen da ich es mir einfacher gemacht habe ;)

    So nächstes Problem.
    Ich bekomme es irgendwie nicht hin das ein neues Fenster geöffnet wird.

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>

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

    $form_game = GUICreate("Snake",508,378);
    ;- $rahmen = GUICtrlCreatePic(@ScriptDir & "\Images\Backgrounds\rahmen.bmp",0,0,508,308)
    $button1 = GUICtrlCreateButton("Spielen",26,323,100,40)
    $button2 = GUICtrlCreateButton("Optionen",201,323,100,40)
    $button3 = GUICtrlCreateButton("Ende",376,323,100,40)
    GUISetState(@SW_SHOW)
    $form_optionen = GUICreate("Optionen",200,300)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case ( $msg = $GUI_EVENT_CLOSE ) Or ( $msg = $button3 )
    ExitLoop

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

    Case ( $msg = $button2 )
    GUICtrlSetState($form_optionen,$GUI_SHOW)
    EndSelect
    Sleep(10)
    WEnd

    [/autoit]

    In Zeile 18 soll eigentlich das neue Fenster gezeigt werden, doch es passier einfach nix. Woran liegt das und was kann ich dagegen machen?

  • [autoit]


    #include <guiconstants.au3>

    $form_game = GUICreate("Snake",508,378);
    ;- $rahmen = GUICtrlCreatePic(@ScriptDir & "\Images\Backgrounds\rahmen.bmp",0,0,508,308)
    $button1 = GUICtrlCreateButton("Spielen",26,323,100,40)
    $button2 = GUICtrlCreateButton("Optionen",201,323,100,40)
    $button3 = GUICtrlCreateButton("Ende",376,323,100,40)
    GUISetState(@SW_SHOW)
    $form_optionen = GUICreate("Optionen",200,300)

    While 1
    $msg = GUIGetMsg()
    Select
    Case ( $msg = $GUI_EVENT_CLOSE ) Or ( $msg = $button3 )
    ExitLoop

    Case ( $msg = $button2 )
    GUISetState(@SW_SHOW,$form_optionen)
    EndSelect
    Sleep(10)
    WEnd

    [/autoit]
  • :klatschen: Danke an alle :klatschen:

    Find das ein bisschen verwirrend, wann denn nun @SE_HIDE oder $GUI_HIDE kommen muss.

    Nunja nächstes Problem. :hammer:
    Ich nutze hier die _ifPressed-Funktion aus dem FAQ
    Das Programm gibt erst den Hexadezimalcode von klein a aus und prüft dann solange ob klein a gedrückt wurde bis es gedrückt wird und dann ist Schluss.
    Problem: Egal wie oft ich a drücke oder gedrückt halte es kommt nie ans Ende.
    :irre:

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    #include <string.au3>

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

    Func _IsPressed($s_hexKey, $v_dll = 'user32.dll')
    ; $hexKey must be the value of one of the keys.
    ; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
    Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_hexKey)
    If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then Return 1
    Return 0
    EndFunc

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

    MsgBox(0,"Hexadezimalcode von ''a''",_StringToHex("a"))

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

    While 1

    If _IsPressed(61) = 1 Then
    MsgBox(0,"a wurde gedrückt","a wurde gedrückt")
    ExitLoop
    EndIf

    Sleep(10)
    WEnd

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

    Exit

    [/autoit]

    Wo ist der Fehler, ich wette ich nutze die Funktion falsch.

    • Offizieller Beitrag

    Hi!

    Aus der Hilfe:

    Spoiler anzeigen

    01 Left mouse button
    02 Right mouse button
    04 Middle mouse button (three-button mouse)
    05 Windows 2000/XP: X1 mouse button
    06 Windows 2000/XP: X2 mouse button
    08 BACKSPACE key
    09 TAB key
    0C CLEAR key
    0D ENTER key
    10 SHIFT key
    11 CTRL key
    12 ALT key
    13 PAUSE key
    14 CAPS LOCK key
    1B ESC key
    20 SPACEBAR
    21 PAGE UP key
    22 PAGE DOWN key
    23 END key
    24 HOME key
    25 LEFT ARROW key
    26 UP ARROW key
    27 RIGHT ARROW key
    28 DOWN ARROW key
    29 SELECT key
    2A PRINT key
    2B EXECUTE key
    2C PRINT SCREEN key
    2D INS key
    2E DEL key
    30 0 key
    31 1 key
    32 2 key
    33 3 key
    34 4 key
    35 5 key
    36 6 key
    37 7 key
    38 8 key
    39 9 key
    41 A key
    42 B key
    43 C key
    44 D key
    45 E key
    46 F key
    47 G key
    48 H key
    49 I key
    4A J key
    4B K key
    4C L key
    4D M key
    4E N key
    4F O key
    50 P key
    51 Q key
    52 R key
    53 S key
    54 T key
    55 U key
    56 V key
    57 W key
    58 X key
    59 Y key
    5A Z key
    5B Left Windows key
    5C Right Windows key
    60 Numeric keypad 0 key
    61 Numeric keypad 1 key
    62 Numeric keypad 2 key
    63 Numeric keypad 3 key
    64 Numeric keypad 4 key
    65 Numeric keypad 5 key
    66 Numeric keypad 6 key
    67 Numeric keypad 7 key
    68 Numeric keypad 8 key
    69 Numeric keypad 9 key
    6A Multiply key
    6B Add key
    6C Separator key
    6D Subtract key
    6E Decimal key
    6F Divide key
    70 F1 key
    71 F2 key
    72 F3 key
    73 F4 key
    74 F5 key
    75 F6 key
    76 F7 key
    77 F8 key
    78 F9 key
    79 F10 key
    7A F11 key
    7B F12 key
    7C-7F F13 key - F16 key
    80H-87H F17 key - F24 key
    90 NUM LOCK key
    91 SCROLL LOCK key
    A0 Left SHIFT key
    A1 Right SHIFT key
    A2 Left CONTROL key
    A3 Right CONTROL key
    A4 Left MENU key
    A5 Right MENU key

    Beispiel:

    [autoit]

    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")

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

    While 1
    Sleep ( 250 )
    If _IsPressed("23", $dll) Then
    MsgBox(0,"_IsPressed", "End Key Pressed")
    ExitLoop
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]

    peethebee

  • Ich hab mir jetzt eine kleine Funktion zum suchen gebastelt.
    Frage:
    Wie kann ich beim Return ein eindimensionales Array zurückgeben lassen - mit dem Inhalt der zwei Laufvariablen $i und $j ?

    Spoiler anzeigen
    [autoit]


    Func _ArraySearch2d($feld,$gesucht)
    For $i = 0 To 23
    For $j = 0 to 13
    If $feld[$i][$j] = $gesucht Then Return
    Next
    Next
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hallo!

    So ;) : (hab 23 und 13 mal durch ubounds ersetzt)

    Spoiler anzeigen
    [autoit]

    dim $feld[2][2]
    $feld[0][1] = "bla"
    $gesucht = "bla"

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

    $ar = _ArraySearch2d($feld,$gesucht)
    MsgBox(0,"",$feld[$ar[0]][$ar[1]])

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

    Func _ArraySearch2d($feld,$gesucht)
    For $i = 0 To UBound($feld,1)
    For $j = 0 to UBound($feld,2);2te dimension ubound
    If $feld[$i][$j] = $gesucht Then
    Local $aRet[2] = [$i,$j]
    Return $aRet
    EndIf

    Next
    Next
    EndFunc

    [/autoit]

    MfG Spider

  • Ich hab jetzt ein 2-dimensionales Array das als Inhalt die Control IDs von Buttons hat.

    [autoit]


    For $i=0 To 19
    For $j=0 to 14
    $p[$i][$j] = GUICtrlCreateButton("",$i*18+5,$j*18+5,18,18)
    Next
    Next

    [/autoit]

    Wie bekomme ich jetzt raus ob einer dieser Knöpfe gedrückt wurde und wenn es passiert ist brauch ich seine "Koordinaten".

    Mit einem select...case...endselect wird mir das etwas zu mühselig.

    Spoiler anzeigen
    [autoit]


    $msg = GUIGetMsg()
    Select
    Case $msg = $p[0][0]
    ...
    Case $msg = $p[1][0]
    ...
    Case $msg = $p[2][0]
    ...
    Case $msg = $p[3][0]
    ...
    ;~ 296 "..." später
    EndSelect

    [/autoit]


    also so nicht ^^"

  • Wieder ein Problem :(
    Ich bastel derzeit an einem Minesweeper-Klon.
    Es soll ähnlich komfortabel sein wie das von Microsoft, also wenn man auf einen Button klickt und das Umfeld keine Minen enthält sollen diese automatisch aufgedeckt werden und wenn davon auch welche ein freies Umfeld haben sollen auch diese angeklickt werden usw. .

    Jedenfalls hab ich mir dafür eine Funktion ausgedacht.

    Spoiler anzeigen
    [autoit]

    Global $f[22][17]

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

    ; Werte von $f
    ; 0 = keine Mine
    ; 1 = Mine
    ; 2 = Feld wurde bereits geprüft

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

    Func leftclick($f,$x,$y)
    GUICtrlSetState($p[$x][$y],$GUI_HIDE)
    $anz = 0
    $f[$x][$y] = 2 ; Aktuelle Position ist jetzt überprüft
    ;Nachbarfelder überprüfen
    If ( $x > 0 ) And ( $y > 0 ) And ($f[$x-1][$y-1] = 1) Then $anz +=1
    If ( $y > 0 ) And ($f[$x ][$y-1] = 1) Then $anz +=1
    If ( $x < 21) And ( $y > 0 ) And ($f[$x+1][$y-1] = 1) Then $anz +=1
    If ( $x > 0 ) And ($f[$x-1][$y ] = 1) Then $anz +=1
    If ( $x < 21) And ($f[$x+1][$y ] = 1) Then $anz +=1
    If ( $x > 0 ) And ( $y < 16) And ($f[$x-1][$y+1] = 1) Then $anz +=1
    If ( $y < 16) And ($f[$x ][$y+1] = 1) Then $anz +=1
    If ( $x < 21) And ( $y < 16) And ($f[$x+1][$y+1] = 1) Then $anz +=1
    GUICtrlCreatePic(@ScriptDir & "\Images\" & $anz & ".bmp",$x*18-13,$y*18-13,18,18)
    If $anz = 0 Then
    ; Wenn das Feld nicht schon überprüft wurde soll es angeklickt werden
    If ($f[$x-1][$y-1] <> 2) Then leftclick($f,$x-1,$y-1)
    If ($f[$x ][$y-1] <> 2) Then leftclick($f,$x ,$y-1)
    If ($f[$x+1][$y-1] <> 2) Then leftclick($f,$x+1,$y-1)
    If ($f[$x-1][$y ] <> 2) Then leftclick($f,$x-1,$y )
    If ($f[$x+1][$y ] <> 2) Then leftclick($f,$x+1,$y )
    If ($f[$x-1][$y+1] <> 2) Then leftclick($f,$x-1,$y+1)
    If ($f[$x ][$y+1] <> 2) Then leftclick($f,$x ,$y+1)
    If ($f[$x+1][$y+1] <> 2) Then leftclick($f,$x+1,$y+1)
    EndIf
    EndFunc

    [/autoit]


    [Size=3]Sehr effektiv ist es auch nicht jaja...[/size]

    Falls wer meint die Funktion sei in Ordnung der Fehler könnte auch im Rest liegen, daher leg ich die mal mit in den Anhang.

    • Offizieller Beitrag

    Hallo!

    Da Du innerhalb der Funktion die Tabelle bearbeitest musst Du vor die Variable $f ein ByRef setzten. Ansonsten kommst Du aus der Funktion leftclick nicht mehr heraus.

    [autoit]


    Func leftclick(ByRef $f,$x,$y)
    .....
    EndFunc

    [/autoit]