Wenn Du auf die EMails bei GMX zugreifen willst, machst Du das am besten mit der POP3-UDF (_Pop3-Udf (V1.03)) von Stilgar.
Ein fernsteuern des Browsers ist dann gar nicht nötig.
Beiträge von Oscar
-
-
Bei MouseClick muss das entsprechende Fenster aktiviert sein. Das ist sehr fehleranfällig. Benutze lieber ControlClick.
Um welches Programm handelt es sich denn? -
Was soll das denn werden?
Die Benutzung von MouseClick ist meist sehr ungenau. -
Schön gemacht, aber die Funktion " _GetKeyCombination" kann man etwas kürzen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit]
Func _GetKeyCombination()
Local $sReturnstring
For $i = 0 To 255
If _IsPressed(Hex($i, 2)) Then $sReturnstring &= Hex($i, 2) & ' '
Next
Return StringTrimRight($sReturnstring, 1)
EndFunc ;==>_GetKeyCombination
Wenn Du sowieso einen String zurückgibst, kannst Du doch auch gleich den String generieren. Musst Du nicht den Umweg über ein Array machen.
Mir ist noch ein Schreibfehler aufgefallen:
Zitat"...es scheint dann eine Message Box."
das sollte wohl eher:Zitat"...es erscheint dann eine Message Box."
[autoit]
heißen.
Außerdem etwas eher kosmetischer Natur. Wenn Du statt der doppelten Anführungszeichen die einfachen Anführungszeichen verwendest, kannst Du die doppelten für die Anzeige benutzen. Schwieriger Satz hier mal als Beispiel:
Statt:GUICtrlCreateLabel("Nach erfolgreicher Belegung steht die gewählte Kombination oben im 'Hotkey ist' Feld", 80, 120, 406, 17)
[/autoit]
[autoit]
lieber:GUICtrlCreateLabel('Nach erfolgreicher Belegung steht die gewählte Kombination oben im "Hotkey ist" Feld', 80, 120, 406, 17)
[/autoit] -
Ja genau! Die Funktion dient lediglich der Eingabe des Pin-Codes.
Das Beispiel war jetzt sehr einfach gehalten. Man sollte natürlich nicht das Password selbst im Skript speichern, sondern lieber den Hashwert.
Absolute Sicherheit gibt es bei einem AutoIt-Skript allerdings nicht. Darüber sind wir uns wohl einig.Hier ist mal ein Beispiel mit Hashwerten:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>#include <Crypt.au3>
[/autoit] [autoit][/autoit] [autoit]; Das hier dient nur zum erzeugen des Password-Hashwertes
[/autoit] [autoit][/autoit] [autoit]
$sHash = _Crypt_HashData('241211', $CALG_SHA1)
ConsoleWrite($sHash & @CR)
; das kommt nicht ins richtige Skript$sPasswordHash = $sHash ; hier würde man den Hashwert aus der Console eintragen
[/autoit] [autoit][/autoit] [autoit]; Beispiel (Anfang)
[/autoit] [autoit][/autoit] [autoit]
$hMainGui = GUICreate('Testfenster (ist während PinInput gesperrt)', 600, 360)
$hButton = GUICtrlCreateButton('Test', 10, 10, 100, 25)
$hInput = GUICtrlCreateInput('', 120, 10, 200, 25)
GUISetState()
$Pin = _PinInput(6, False, $hMainGui)
$PinHash = _Crypt_HashData($Pin, $CALG_SHA1)
If $PinHash <> $sPasswordHash Then Exit MsgBox(16, 'Test', 'Falscher Pin-Code! Programm wird beendet.', 3, $hMainGui)
GUICtrlSetData($hInput, $Pin)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Beispiel (Ende);===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _PinInput([$iCount = 4][, $bBeep = True][, $hParent = ''])
; Description:: Eingabe eines Pin-Codes (1-10stellig)
; Parameter(s): $iCount = Wie viele Stellen muss der Benutzer eingeben (1-10)
; $bBeep = Sound ein-/ausschalten (True/False)
; $hParent = Handle des Parent-Windows (dieses wird während
; der Eingabe deaktiviert).
; Requirement(s):
; #include <GUIConstantsEx.au3>
; #include <StaticConstants.au3>
; #include <WindowsConstants.au3>
; #include <ButtonConstants.au3>; Return Value(s): Wenn Eingabe mit [ENTER] abgeschlossen wurde, wird der Pin-Code
[/autoit]
; zurückgegeben, ansonsten ein Leerstring und @error = 1
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _PinInput($iCount = 4, $bBeep = True, $hParent = '')
If $iCount > 10 Then $iCount = 10
If $iCount < 1 Then $iCount = 4
Local $iOldEventMode = Opt('GUIOnEventMode', 0), $msg, $sReturn, $sOut
Local $aButtons[12] = ['7', '8', '9', '4', '5', '6', '1', '2', '3', 'C', '0', '<-']
Local $aKeys1[12] = [ _
'{NUMPAD7}', '{NUMPAD8}', '{NUMPAD9}', _
'{NUMPAD4}', '{NUMPAD5}', '{NUMPAD6}', _
'{NUMPAD1}', '{NUMPAD2}', '{NUMPAD3}', _
'{DELETE}', '{NUMPAD0}', '{ENTER}']
Local $aKeys2[12] = [ _
'7', '8', '9', _
'4', '5', '6', _
'1', '2', '3', _
'{DELETE}', '0', '{ENTER}']
Local $aAccelKeys[24][2], $ahButtons[12]
If IsHWnd($hParent) Then GUISetState(@SW_DISABLE, $hParent)
Local $hGui = GUICreate('Pin eingeben (' & $iCount & ' stellig)', 224, 200, Default, Default, BitOR($WS_CAPTION, $WS_POPUPWINDOW), Default, $hParent)
GUISetFont(14, 600, 0, 'Verdana')
GUISetIcon('shell32.dll', -48)
Local $hOutput = GUICtrlCreateLabel('', 16, 10, 192, 34, $SS_RIGHT, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 22, 400)
GUICtrlSetBkColor(-1, 0xFFDDAA)
For $i = 0 To 11
$ahButtons[$i] = GUICtrlCreateButton($aButtons[$i], 16 + Mod($i, 3) * 64, 54 + Int($i / 3) * 34, 64, 34, $BS_ICON)
$aAccelKeys[$i][0] = $aKeys1[$i]
$aAccelKeys[$i][1] = $ahButtons[$i]
$aAccelKeys[$i+12][0] = $aKeys2[$i]
$aAccelKeys[$i+12][1] = $ahButtons[$i]
Next
GUICtrlSetImage($ahButtons[9], 'shell32.dll', -132, 0)
GUICtrlSetImage($ahButtons[11], 'shell32.dll', -145, 0)
GUICtrlSetState($ahButtons[11], $GUI_DISABLE)
GUISetAccelerators($aAccelKeys, $hGui)
GUISetState()
While True
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
If IsHWnd($hParent) Then GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldEventMode)
If $bBeep Then Beep(200, 400)
Return SetError(1, 0, '')
Case $ahButtons[11]
If StringLen($sOut) = $iCount Then
If $hParent <> '' Then GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldEventMode)
If $bBeep Then Beep(800, 200)
Return SetError(0, 0, $sOut)
EndIf
Case $ahButtons[9]
GUICtrlSetState($hOutput, $GUI_FOCUS)
GUICtrlSetData($hOutput, '')
GUICtrlSetState($ahButtons[11], $GUI_DISABLE)
$sOut = ''
If $bBeep Then Beep(400, 200)
Case $ahButtons[0] To $ahButtons[10]
If StringLen($sOut) < $iCount Then
$sOut &= $aButtons[$msg - $ahButtons[0]]
GUICtrlSetData($hOutput, StringLeft('**********', StringLen($sOut)))
If $bBeep Then Beep(600, 100)
Else
If $bBeep Then Beep(200, 200)
EndIf
If StringLen($sOut) = $iCount And BitAND(GUICtrlGetState($ahButtons[11]), $GUI_DISABLE) Then GUICtrlSetState($ahButtons[11], $GUI_ENABLE)
EndSwitch
WEnd
EndFunc -
Hier: UDF für login (pincode) gab es eine Anfrage bezüglich einer Pin-Eingabe-Funktion.
Ich habe meine Variante mal noch etwas verbessert und stelle sie hier zur allgemeinen Verfügung:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>; Beispiel (Anfang)
[/autoit] [autoit][/autoit] [autoit]
$hMainGui = GUICreate('Testfenster (ist während PinInput gesperrt)', 600, 360)
$hButton = GUICtrlCreateButton('Test', 10, 10, 100, 25)
$hInput = GUICtrlCreateInput('', 120, 10, 200, 25)
GUISetState()
$Pin = _PinInput(6, False, $hMainGui)
If $Pin <> '241211' Then Exit MsgBox(16, 'Test', 'Falscher Pin-Code! Programm wird beendet.', 3, $hMainGui)
GUICtrlSetData($hInput, $Pin)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Beispiel (Ende);===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _PinInput([$iCount = 4][, $bBeep = True][, $hParent = ''])
; Description:: Eingabe eines Pin-Codes (1-10stellig)
; Parameter(s): $iCount = Wie viele Stellen muss der Benutzer eingeben (1-10)
; $bBeep = Sound ein-/ausschalten (True/False)
; $hParent = Handle des Parent-Windows (dieses wird während
; der Eingabe deaktiviert).
; Requirement(s):
; #include <GUIConstantsEx.au3>
; #include <StaticConstants.au3>
; #include <WindowsConstants.au3>
; #include <ButtonConstants.au3>; Return Value(s): Wenn Eingabe mit [ENTER] abgeschlossen wurde, wird der Pin-Code
[/autoit]
; zurückgegeben, ansonsten ein Leerstring und @error = 1
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _PinInput($iCount = 4, $bBeep = True, $hParent = '')
If $iCount > 10 Then $iCount = 10
If $iCount < 1 Then $iCount = 4
Local $iOldEventMode = Opt('GUIOnEventMode', 0), $msg, $sReturn, $sOut
Local $aButtons[12] = ['7', '8', '9', '4', '5', '6', '1', '2', '3', 'C', '0', '<-']
Local $aKeys1[12] = [ _
'{NUMPAD7}', '{NUMPAD8}', '{NUMPAD9}', _
'{NUMPAD4}', '{NUMPAD5}', '{NUMPAD6}', _
'{NUMPAD1}', '{NUMPAD2}', '{NUMPAD3}', _
'{DELETE}', '{NUMPAD0}', '{ENTER}']
Local $aKeys2[12] = [ _
'7', '8', '9', _
'4', '5', '6', _
'1', '2', '3', _
'{DELETE}', '0', '{ENTER}']
Local $aAccelKeys[24][2], $ahButtons[12]
If IsHWnd($hParent) Then GUISetState(@SW_DISABLE, $hParent)
Local $hGui = GUICreate('Pin eingeben (' & $iCount & ' stellig)', 224, 200, Default, Default, BitOR($WS_CAPTION, $WS_POPUPWINDOW), Default, $hParent)
GUISetFont(14, 600, 0, 'Verdana')
GUISetIcon('shell32.dll', -48)
Local $hOutput = GUICtrlCreateLabel('', 16, 10, 192, 34, $SS_RIGHT, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 22, 400)
GUICtrlSetBkColor(-1, 0xFFDDAA)
For $i = 0 To 11
$ahButtons[$i] = GUICtrlCreateButton($aButtons[$i], 16 + Mod($i, 3) * 64, 54 + Int($i / 3) * 34, 64, 34, $BS_ICON)
$aAccelKeys[$i][0] = $aKeys1[$i]
$aAccelKeys[$i][1] = $ahButtons[$i]
$aAccelKeys[$i+12][0] = $aKeys2[$i]
$aAccelKeys[$i+12][1] = $ahButtons[$i]
Next
GUICtrlSetImage($ahButtons[9], 'shell32.dll', -132, 0)
GUICtrlSetImage($ahButtons[11], 'shell32.dll', -145, 0)
GUICtrlSetState($ahButtons[11], $GUI_DISABLE)
GUISetAccelerators($aAccelKeys, $hGui)
GUISetState()
While True
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
If IsHWnd($hParent) Then GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldEventMode)
If $bBeep Then Beep(200, 400)
Return SetError(1, 0, '')
Case $ahButtons[11]
If StringLen($sOut) = $iCount Then
If $hParent <> '' Then GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldEventMode)
If $bBeep Then Beep(800, 200)
Return SetError(0, 0, $sOut)
EndIf
Case $ahButtons[9]
GUICtrlSetState($hOutput, $GUI_FOCUS)
GUICtrlSetData($hOutput, '')
GUICtrlSetState($ahButtons[11], $GUI_DISABLE)
$sOut = ''
If $bBeep Then Beep(400, 200)
Case $ahButtons[0] To $ahButtons[10]
If StringLen($sOut) < $iCount Then
$sOut &= $aButtons[$msg - $ahButtons[0]]
GUICtrlSetData($hOutput, StringLeft('**********', StringLen($sOut)))
If $bBeep Then Beep(600, 100)
Else
If $bBeep Then Beep(200, 200)
EndIf
If StringLen($sOut) = $iCount And BitAND(GUICtrlGetState($ahButtons[11]), $GUI_DISABLE) Then GUICtrlSetState($ahButtons[11], $GUI_ENABLE)
EndSwitch
WEnd
EndFuncScreenshots:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Sieht gut aus! Die wechselnden Farben gefallen mir persönlich aber nicht so sehr. Habe bei mir jetzt 0xEEBB88 als Hintergrund eingestellt.
[autoit]
Um das Icon auch beim ausführen des Skripts anzuzeigen, kannst Du noch:GUISetIcon(@ScriptDir & '\Halloween.ico')
[/autoit]
nach GUICreate einfügen.
Dein Skript funktioniert auch im 64Bit-Modus, wenn man die aktuelle Beta-Version (3.3.7.21) benutzt. Dort ist der Fehler behoben.Ansonsten: 1A

-
Mal so auf die Schnelle:Überarbeitete Version:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$hMainGui = GUICreate('Main')
GUISetState()
$Pin = _PinInput(6, $hMainGui)
MsgBox(0, 'Eingabe = ', $Pin)Func _PinInput($iCount = 4, $hParent = '')
[/autoit]
If $iCount > 10 Then $iCount = 10
If $iCount < 0 Then $iCount = 4
Local $iOldEventMode = Opt('GUIOnEventMode', 0), $msg, $sReturn, $sOut
Local $aButtons[12] = ['7', '8', '9', '4', '5', '6', '1', '2', '3', 'C', '0', '<-']
Local $aKeys[12] = [ _
'{NUMPAD7}', '{NUMPAD8}', '{NUMPAD9}', _
'{NUMPAD4}', '{NUMPAD5}', '{NUMPAD6}', _
'{NUMPAD1}', '{NUMPAD2}', '{NUMPAD3}', _
'{DELETE}', '{NUMPAD0}', '{ENTER}']
Local $aAccelKeys[12][2], $ahButtons[12]
If $hParent <> '' Then GUISetState(@SW_DISABLE, $hParent)
Local $hGui = GUICreate('Pin eingeben (' & $iCount & ' stellig)', 224, 230, Default, Default, BitOR($WS_CAPTION, $WS_POPUPWINDOW), Default, $hParent)
GUISetFont(14, 600, 0, 'Verdana')
GUISetIcon('shell32.dll', 45)
Local $hOutput = GUICtrlCreateLabel('', 16, 10, 192, 40, $SS_RIGHT, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 22, 400)
GUICtrlSetBkColor(-1, 0xFFDDAA)
For $i = 0 To 11
$ahButtons[$i] = GUICtrlCreateButton($aButtons[$i], 16 + Mod($i, 3) * 64, 58 + Int($i / 3) * 40, 64, 40)
$aAccelKeys[$i][0] = $aKeys[$i]
$aAccelKeys[$i][1] = $ahButtons[$i]
Next
GUISetAccelerators($aAccelKeys, $hGui)
GUISetState()
While True
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
If $hParent <> '' Then GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldEventMode)
Return SetError(1, 0, '')
Case $ahButtons[11]
If $hParent <> '' Then GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldEventMode)
Return SetError(0, 0, $sOut)
Case $ahButtons[9]
GUICtrlSetState($hOutput, $GUI_FOCUS)
GUICtrlSetData($hOutput, '')
$sOut = ''
Case $ahButtons[0] To $ahButtons[10]
If StringLen($sOut) < $iCount Then
$sOut &= $aButtons[$msg - $ahButtons[0]]
GUICtrlSetData($hOutput, StringLeft('**********', StringLen($sOut)))
Beep(600, 100)
Else
Beep(200, 200)
EndIf
EndSwitch
WEnd
EndFunc -
Von mir auch die besten Wünsche zum Geburtstag.
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Benutze keine MsgBox, sondern ein eigenes Fenster (GUI). Dann tritt das Problem erst gar nicht auf.
-
Herzlichen Glückwunsch, Xeno!
Feiere schön und bleib uns hier erhalten.
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Das kann nicht funktionieren, weil während die MsgBox offen ist keine Events abgefragt werden können.
Es wird immer darauf gewartet, dass sich die MsgBox schliesst, bevor die nächste "Eingabe" des Benutzers bearbeitet wird. -
Es gibt noch ein Problem: Wenn die Dateinamen am Anfang Zahlen enthalten. Funktionsnamen mit Zahlen am Anfang sind in AutoIt nicht erlaubt.
Vielleicht könntest Du einfach alle Funktionen mit einem Unterstrich anfangen lassen!? So wäre das Problem schnell gelöst.Ansonsten: sehr gut!

-
Windows 7 64 Bit habe ich auch. Daran liegt es wohl nicht.
Hast Du die aktuelle AutoIt-Version? -
Noch eine Anregung für eine Weiterentwicklung:
- Bei der Dateiauswahl auch mehrere Dateien zulassen, sodass man mehrere Dateien in einem "Rutsch" konvertieren kann. Bezüglich der Funktionsnamen könntest Du ja dann die Dateinamen (ohne Endung) verwenden.Ich habe jetzt auch noch einen Text in mein Programm eingebunden. Dank der Kompression spart das doch diverse Bytes.

Das Tool werde ich bestimmt noch öfter verwenden.
-
Schön gemacht, aber das funktioniert natürlich nur mit Integerzahlen. Was ist mit Kommawerten?
Und bei der Berechnung Deines "Einzeilers" hast Du vergessen _StringReverse ("#include <String.au3>") mitzuzählen.
-
General Kaboom: Hör' auf Dir irgendwas aus den Fingern zu saugen. Ein virtuelles Aufnahmegerät ist keineswegs illegal und nach etwas anderem hat er gar nicht gefragt. Also dichte ihm hier nichts an.
-
Vielen Dank! Das klappt super! Habe jetzt die WAV-Variante benutzt.
Alles in einer Datei und direkt vom Speicher abspielbar. Besser geht's nicht!
Dafür kommst Du auch in die Credits.
Danke nochmal! -
Klasse Skript! Funktioniert super!

Was mich aber noch interessieren würde, ist, wie man Sounds (MP3s) damit abspielen kann.
SoundPlay und auch _SoundOpen aus der UDF erwarten doch die Angabe einer Datei!?
Kannst Du ein Beispiel posten? -
Dieses flackern hat mich auch schon einige Male beschäftigt. Ich kenne auch keine echte Abhilfe.
Bei mir habe ich es dadurch "gelöst", dass ich den klassischen Style für die Progressbar benutzt habe.
Dort tritt das flackern nicht auf:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("Test Label über Progressbar", 405, 99, 598, 391)
DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
$Progress1 = GUICtrlCreateProgress(8, 8, 385, 49)
DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle
$Label1 = GUICtrlCreateLabel("Label1", 8, 24, 385, 17, $SS_CENTER)
GUICtrlSetFont(-1, 12, 800, 0, "Courier New")
$Button1 = GUICtrlCreateButton("Start", 8, 64, 385, 33)
GUISetState(@SW_SHOW)GUICtrlSetBkColor($Label1, $GUI_BKCOLOR_TRANSPARENT)
[/autoit]
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
For $i = 0 To 100 Step 1
GUICtrlSetData($Progress1, $i)
GUICtrlSetData($Label1, $i & "%")
Sleep(100)
Next
EndSwitch
WEnd
Alternativ müsstest Du das Label über/neben die Progressbar setzen.
Wenn aber noch irgend jemand eine "echte" Lösung für das Problem hat, dann wäre ich auch interessiert.