Beiträge von BugFix
-
-
Na das brauch ich für ein script

Das du damit keinen Kuchen backen willst, war klar
Welches Ziel verfolgst du mit dem Skript? Ohne das zu wissen, ist es schwer Hilfestellung zu geben. -
oder geht das anders besser?
Ja,

Hol dir die Inhalte z.B. mit _IEBodyReadText aus der IE.au3, nutze die Excel-UDF um die Daten mit Autoit direkt in das Tabellenblatt zu schreiben. -
Hmm, dann habe ich Google versehentlich für etwaws seriöses gehalten, kommt nicht wieder vor

-
Zitat
<meta name="keywords" content= "hacken, hacker, ...
Glaubst du ernsthaft, dass du mit solchen Meta-Tags die Google Robots locken kannst? Das Gegenteil wird eher der Fall sein ==> Black-List -
Das kann aber nicht am Skript liegen. Prozessorlast max. 8% hierbei.
-
Hier mal ein Bsp. für Progressbar.
Die Variable $vor dient hier nur als Krücke um in die Case-Auswahl zu gelangen.
Beim Richtungswechsel wird mit ContinueCase ja ohne Wertprüfung in den folgende Case zur Abarbeitung gewechselt.Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $vor = TrueGUICreate("My GUI Progressbar",220,100, 100,200)
[/autoit] [autoit][/autoit] [autoit]
$progressbar = GUICtrlCreateProgress (10,40,200,20,$PBS_SMOOTH)
$button = GUICtrlCreateButton ("Vorwärts",75,70,70,20)
GUISetState ()$wait = 20; wait 20ms for next progressstep
[/autoit]
$s = 0 ; progressbar-saveposition
Do
$msg = GUIGetMsg()
If $msg = $button Then
Select
Case $vor
GUICtrlSetData($button, 'Rückwärts')
For $i = $s To 100
$m = GUIGetMsg()
If $m = $button Then ContinueCase
GUICtrlSetData($progressbar, $i)
$s = $i
Sleep($wait)
Next
Case Not $vor
GUICtrlSetData($button, 'Stop')
For $i = $s To 0 Step -1
$m = GUIGetMsg()
If $m = $button Then ExitLoop
GUICtrlSetData($progressbar, $i)
$s = $i
Sleep($wait)
Next
EndSelect
GUICtrlSetData($button, 'Vorwärts')
EndIf
Until $msg = $GUI_EVENT_CLOSE -
2. muss man dafür etwas markieren
Was hast du für eine seltsame Installation? Markieren mußt du nichts, nur innerhalb der zu kommentierenden Zeile einfach STR+Q. Und obwohl es zwei Tasten sind, ist dieses ein Handgriff, da genialerweise der Abstand Daumen Zeigefinger linke Hand in etwa dem Abstand zwischen STRG und Q entspricht.

-
@maycontainnuts: Oder STRG+Q

-

- dem ist nichts hinzuzufügen 
-
Danke progandy

Für die Übernahme per Mausklick fehlt nur noch ein kleines bischen
[autoit]
ElseIf $hCtrl = $box And $nNotifyCode = 1 Then
[/autoit]
$index = _GUICtrlListBox_GetCurSel($box)
GUICtrlSetData($Input, _GUICtrlListBox_GetText($box, $index))
GUISetState(@SW_HIDE, $guiBox)
$show = False -
Du kannst statt Switch auch Select verwenden.
[autoit]
Da du aber nur eine Variable auswertest ist Switch zu empfehlen, da schneller.
Bei Select wäre es in etwa so:Select
[/autoit]
Case $msg[1] = $gui1
Select
Case $msg[0] = $GUI_EVENT_CLOSE
Exit
; usw. -
Da du also das Edit-Ctrl selbst erstellst, nutze die Edit-UDF.
Du kannst eine Auswahl setzen mit _GUICtrlEdit_SetSel($hWnd, $iStart, $iEnd).
Wenn $iStart und $iEnd denselben Wert haben, wird nicht markiert, sondern nur der Cursor gesetzt - das, was du willst.
Dazu brauchst du also die Anzahl der geschriebenen Zeichen - aber das solltest du hinbekommen. -
Mit GUIGetMsg mußt du Advanced-Mode verwenden:
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$gui1 = GUICreate('GUI 1')
[/autoit] [autoit][/autoit] [autoit]
$btn = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)$gui2 = GUICreate('GUI 2')
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit]
$msg = GUIGetMsg(1)
Switch $msg[1] ; Window Handle
Case $gui1
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
Exit
Case $btn
GUISetState(@SW_SHOW, $gui2)
EndSwitch
Case $gui2
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE, $gui2)
EndSwitch
EndSwitch
WEnd -
hilft nicht evtl. _ArrayToString?
Ja, aber dann braucht man ein Include

-
Du kannst das natürlich auch mit GUIGetMsg verwenden und dann die Msg abfragen.
Das umzustellen sollte aber kein Problem darstellen. Probier mal, wenns nicht klappt, melde dich wieder. -
Eine Schleife tuts:
[autoit]$str = ''
[/autoit]
For $i = 0 To Ubound($Array)-1
$str &= $Array[$i]
Next
GUICtrlSetData($input, $str) -
Zitat
Beide GUIs am besten am Anfang anlegen und dann mit GUISetState anzeigen
Wie Pee schon richtig sagte, du erzeugst die GUI aber erst im Programm.Besser so:
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)$gui1 = GUICreate('GUI 1')
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI1_close')
$btn = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
GUICtrlSetOnEvent(-1, 'ClickButton')$gui2 = GUICreate('GUI 2')
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI2_close')GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc GUI1_close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc GUI2_close()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_HIDE, $gui2)
EndFuncFunc ClickButton()
[/autoit]
GUISetState(@SW_SHOW, $gui2)
EndFunc -
Es fehlt noch ein #include <File.au3> im DownloadScript. Zumindest funktioniert es bei mir sonst nicht.
Da hast du recht, hatte ich irgendwie versiebt. -
Als StandardControl haben wir ja mit der ComboBox die Möglichkeit eine eingabesensitive Auswahl zu ermöglichen.
Ich habe hier mal ein Beispiel erstellt, wie man diese Funktionalität auch für z.B. Input-Ctrl erreichen kann.
Gründe dafür:
- ich finde es optisch nicht sehr ansprechend, wenn die Schaltfläche der ComboBox die GUI 'verschandelt'
- ich habe hiermit die Möglichkeit eigene Auswahllisten auch für Fremdanwendungen (so sie denn Standard Windows Controls verwenden) zu nutzenFunktionsweise:
Wird in das Inputfeld ein Buchstabe eingegeben, der auch als Anfangsbuchstabe in der Liste hinterlegt ist, popt das Auswahlfenster auf.
Der Focus bleibt aber beim Inputfeld.
Ist in der Liste kein Eintrag mit diesem Buchstaben, wird sie auch nicht eingeblendet.
Es wird mit jedem weiteren Buchstaben auf Übereinstimmung geprüft und entsprechend der erste Eintrag markiert, auf den die bisherige Eingabe zutrifft.
Mit PFEIL AUF / PFEIL AB kann in der Liste die Auswahl verschoben werden.
Mit ENTER wird der momentan markierte Eintrag aus der Liste in das Input übernommen.
Mit ESC kann die Liste ohne Übernahme gechlossen werden.Edit 08.03.09:
Habe das Skript nochmal etwas bearbeitet. Alle bisher im Thread besprochenen Änderungen/Ergänzungen sind enthalten.
Es ist jetzt allgemein gehalten, sodass es für Input- und ComboBox-Ctrl gleichermaßen verwendet werden kann. Es brauchen auch keine Anpassungen in den Funktionen für die Control-ID's erfolgen.
Es muß zur Anwendung nur noch folgendes getan werden:
- Einmalig bei der Erstellung eine Zuweisung auf den allgemeinen Namen ($SenseGui u. $SenseCtrl)
- Befüllen des DatenArray mit den Auswahldaten
Edit zum Edit: $nNotifyCode für ComboBox fehlte noch
- jetzt komplettSpoiler anzeigen
[autoit]#include<GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<ListBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListBox.au3>
#Include <WinAPI.au3>
#include <Misc.au3>
Opt("GUICloseOnESC", 0)#region - Deklarationen für Sense
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $show = False
Global $indexB = -1
Global $SenseGui, $SenseCtrl, $guiBox, $box
Global $POSSenseGui[2]
#Region Box
; Hier die Auswahldaten (braucht nicht sortiert sein):
Global $aData[10] = ['Birne','Alligator','Auto','Dank','Automat','Bett','Garten','Bettler','Danke','Danksagung']
$guiBox = GUICreate('', 150, 85, 0, 0, BitOR($WS_SIZEBOX,$WS_POPUP), $WS_EX_TOPMOST)
$box = _GUICtrlListBox_Create($guiBox, '', 0, 0, 150, 86, BitOR($LBS_SORT, 0x00B00002))
; ListBox muß 1 Pixel höher als GUI sein - sonst fehlerhafte Darstellung
For $i = 0 To UBound($aData) -1 ; falls Daten mit _FileReadToArray gelesen werden: StartIndex=1
_GUICtrlListBox_AddString($box, $aData[$i])
Next
#EndRegion Box
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
GUIRegisterMsg($WM_MOVE, "_WM_MOVE")
GUIRegisterMsg(0x231, "_WM_ENTERSIZEMOVE")
#EndRegion - Deklarationen Sense#Region Main
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate('Intelli Sense Box', 400, 300, 200, 50)
$SenseGui = $Form1 ; <== Für Allgemeingültigkeit Zuweisung an $SenseGui
$Input = GUICtrlCreateInput('', 10, 10, 380, 21)
$SenseCtrl = $Input ; <== Für Allgemeingültigkeit Zuweisung an $SenseCtrl
$hInput = GUICtrlGetHandle($Input)
GUISetState()
#EndRegion MainWhile True
[/autoit] [autoit][/autoit] [autoit]
_ChooseBox()
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
WEnd#region - SenseFuncs
[/autoit] [autoit][/autoit] [autoit]
Func _ChooseBox()
If Not $show Then Return
If _IsPressed('0D') Then ; ENTER
ControlSetText($SenseGui, '', $SenseCtrl, _GUICtrlListBox_GetText($box, $indexB))
GUISetState(@SW_HIDE, $guiBox)
$show = False
ElseIf _IsPressed('1B') Then ; ESC
GUISetState(@SW_HIDE, $guiBox)
$show = False
ElseIf _IsPressed('26') Then ; UP
If $indexB > 0 Then
$indexB -= 1
_GUICtrlListBox_SetCurSel($box, $indexB)
Sleep(90)
EndIf
ElseIf _IsPressed('28') Then ; DOWN
If $indexB < _GUICtrlListBox_GetCount($box)-1 Then
$indexB += 1
_GUICtrlListBox_SetCurSel($box, $indexB)
Sleep(90)
EndIf
EndIf
EndFuncFunc MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $nNotifyCode = BitShift($wParam, 16)
Local $hCtrl = $lParam
Local $hSenseCtrl = $SenseCtrl
If Not IsHWnd($hSenseCtrl) Then $hSenseCtrl = GUICtrlGetHandle($hSenseCtrl)
If ($nNotifyCode = 1024 Or $nNotifyCode = 6) And $hCtrl = $hSenseCtrl Then
Local $str = ControlGetText($SenseGui, '', $SenseCtrl)
$indexB = _GUICtrlListBox_FindString($box, $str)
_GUICtrlListBox_SetCurSel($box, $indexB)
$caret = _CaretPos()
If Not @error And Not $show Then
If $caret[3] + $caret[4] - 95 < 0 Then ; Platz für Liste über dem Ctrl ausreichend?
WinMove($guiBox, '', $caret[0], $caret[1] +25) ; Versatz 25 (Ctrlhöhe+5) unter y vom Ctrl
Else
WinMove($guiBox, '', $caret[0], $caret[1] -95) ; Versatz 95 (Boxhöhe+10) über y vom Ctrl
EndIf
GUISetState(@SW_SHOWNOACTIVATE, $guiBox)
$show = True
EndIf
ElseIf $hCtrl = $box And $nNotifyCode = 1 Then
$indexB = _GUICtrlListBox_GetCurSel($box)
ControlSetText($SenseGui, '', $SenseCtrl, _GUICtrlListBox_GetText($box, $indexB))
GUISetState(@SW_HIDE, $guiBox)
$show = False
ElseIf $show And $nNotifyCode = 512 And $hCtrl = $lParam And Not $hCtrl = $box Then
GUISetState(@SW_HIDE,$guiBox)
$show = False
EndIf
Return $GUI_RUNDEFMSG
EndFuncFunc _WM_ENTERSIZEMOVE($hWnd)
[/autoit] [autoit][/autoit] [autoit]
If $hWnd = $SenseGui Then $POSSenseGui = WinGetPos($SenseGui)
EndFuncFunc _WM_MOVE($hWnd)
[/autoit] [autoit][/autoit] [autoit]
If $hWnd = $SenseGui Then
Local $pos = WinGetPos($guiBox)
Local $postemp = WinGetPos($SenseGui)
WinMove($guiBox,"",$pos[0]-($POSSenseGui[0]-$postemp[0]),$pos[1]-($POSSenseGui[1]-$postemp[1]))
$POSSenseGui = WinGetPos($SenseGui)
EndIf
EndFuncFunc _CaretPos()
[/autoit]
Local $old = Opt("CaretCoordMode", 0) ;relative mode
Local $c = WinGetCaretPos() ;relative caret coords
Local $w = WinGetPos("") ;window's coords
Local $f = ControlGetFocus("","") ;text region "handle"
Local $e = ControlGetPos("", "", $f) ;text region coords
Local $h = ControlGetHandle("", "", $f) ;Ctrl-Handle
Local $t[5]
If IsArray($c) and IsArray($w) and IsArray($e) Then
If _WinAPI_IsClassName($SenseCtrl, 'Edit') Then ; Input wird als Edit-Class erkannt
$t[0] = $c[0] + $w[0] + $e[0]
ElseIf _WinAPI_IsClassName($SenseCtrl, 'ComboBox') Then
$t[0] = $w[0] + $e[0]
EndIf
$t[1] = $c[1] + $w[1] + $e[1]
$t[2] = $h
$t[3] = $w[1]
$t[4] = $e[1]
Opt("CaretCoordMode", $old)
Return $t ;absolute screen coords of caret cursor
Else
Opt("CaretCoordMode", $old)
SetError(1)
EndIf
EndFunc
#endregion - SenseFuncsDL bisher: 70