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
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.
#include <GUIConstants.au3>
Global $vor = True
GUICreate("My GUI Progressbar",220,100, 100,200)
$progressbar = GUICtrlCreateProgress (10,40,200,20,$PBS_SMOOTH)
$button = GUICtrlCreateButton ("Vorwärts",75,70,70,20)
GUISetState ()
$wait = 20; wait 20ms for next progressstep
$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 ![]()
ElseIf $hCtrl = $box And $nNotifyCode = 1 Then
$index = _GUICtrlListBox_GetCurSel($box)
GUICtrlSetData($Input, _GUICtrlListBox_GetText($box, $index))
GUISetState(@SW_HIDE, $guiBox)
$show = False
Du kannst statt Switch auch Select verwenden.
Da du aber nur eine Variable auswertest ist Switch zu empfehlen, da schneller.
Bei Select wäre es in etwa so:
Select
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:
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$gui1 = GUICreate('GUI 1')
$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
$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 = ''
For $i = 0 To Ubound($Array)-1
$str &= $Array[$i]
Next
GUICtrlSetData($input, $str)
ZitatBeide 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:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$gui1 = GUICreate('GUI 1')
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI1_close')
$btn = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
GUICtrlSetOnEvent(-1, 'ClickButton')
$gui2 = GUICreate('GUI 2')
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI2_close')
GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While True
Sleep(100)
WEnd
Func GUI1_close()
Exit
EndFunc
Func GUI2_close()
GUISetState(@SW_HIDE, $gui2)
EndFunc
Func ClickButton()
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 nutzen
Funktionsweise:
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 komplett
#include<GUIConstantsEx.au3>
#include<ListBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListBox.au3>
#Include <WinAPI.au3>
#include <Misc.au3>
Opt("GUICloseOnESC", 0)
#region - Deklarationen für Sense
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
$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 Main
While True
_ChooseBox()
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
WEnd
#region - SenseFuncs
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
EndFunc
Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
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
EndFunc
Func _WM_ENTERSIZEMOVE($hWnd)
If $hWnd = $SenseGui Then $POSSenseGui = WinGetPos($SenseGui)
EndFunc
Func _WM_MOVE($hWnd)
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
EndFunc
Func _CaretPos()
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 - SenseFuncs
DL bisher: 70
Hi,
um Dateien hin- und herzuschieben ist es oft notwendig 2 Explorerinstanzen zu öffnen.
Da ich ungern die Fenster dann in der Größe anpasse und verschiebe, hab ich ein Skript geschrieben, das das erledigt.
Ich rufe hier den Arbeitsplatz auf, das kann man natürlich anpassen und z.B. Eigene Dateien verwenden. Die CLSID dazu findet ihr in der Hilfe.
Wird das Skript mit Parameter "/h" aufgerufen, werden die Fenster nebeneinander angeordnet auf voller Bildschirmgröße.
Ohne Parameter (bzw. bei jedem anderen) werden die Fenster untereinander angeordnet.
Global $appHorizontal = False ; wenn True, horizontale Anordnung
Global $aSize[3][5] ; [0]=Handle, [1]=Breite, [2]=Höhe, [3]=x, [4]=y
$aSize[0][1] = @DesktopWidth
$aSize[0][2] = @DesktopHeight
If $CmdLine[0] > 0 Then
If $CmdLine[1] = '/h' Then $appHorizontal = True
EndIf
If $appHorizontal Then
$aSize[1][1] = @DesktopWidth/2
$aSize[2][1] = @DesktopWidth/2
$aSize[1][2] = @DesktopHeight
$aSize[2][2] = @DesktopHeight
$aSize[1][3] = 0
$aSize[2][3] = @DesktopWidth/2
$aSize[1][4] = 0
$aSize[2][4] = 0
Else
$aSize[1][1] = @DesktopWidth
$aSize[2][1] = @DesktopWidth
$aSize[1][2] = @DesktopHeight/2
$aSize[2][2] = @DesktopHeight/2
$aSize[1][3] = 0
$aSize[2][3] = 0
$aSize[1][4] = 0
$aSize[2][4] = @DesktopHeight/2
EndIf
Run ('Explorer.exe /n, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}', '', @SW_HIDE)
WinWaitActive('Arbeitsplatz')
$aSize[1][0] = WinGetHandle('Arbeitsplatz')
WinMove($aSize[1][0], '', $aSize[1][3], $aSize[1][4], $aSize[1][1], $aSize[1][2])
WinSetTitle('Arbeitsplatz', '', 'Arbeitsplatz_1')
Run ('Explorer.exe /n, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}', '', @SW_HIDE)
WinWaitActive('Arbeitsplatz')
$aSize[2][0] = WinGetHandle('Arbeitsplatz')
WinMove($aSize[2][0], '', $aSize[2][3], $aSize[2][4], $aSize[2][1], $aSize[2][2])
WinSetTitle('Arbeitsplatz', '', 'Arbeitsplatz_2')
WinSetState($aSize[1][0], '', @SW_SHOW)
WinSetState($aSize[2][0], '', @SW_SHOW)
ZitatAber könntest du den unwissenden mal erklären was man mit sowas machen kann?
Ich bin mal so frei und antworte dadrauf ![]()
Da als Bsp. calc.exe angeführt war, verwende ich das gleich mal.
Möchtest du den Calculator benutzen ohne die Werte mit Send oder ControlCommand an das Programm zu übergeben, kannst du direkt in die verwendeten Speicherregister schreiben bzw. auch von dort lesen.
Du kannst auch auf diese Art Daten aus anderen Programmen auslesen. Wenn z.B. ein Festplattentool in einem bestimmten Register die Festplattentemperatur ablegt, kannst du somit dadrauf zugreifen.
Probier das mal:
[autoit]ControlClick("Xfire Installation", "", "[CLASS:Button; INSTANCE:4]")
[/autoit]Du mußt mit der Maus über dem Kontrollkästchen sein und dann die Infos auslesen.
Kontrollkästchen sind Klasse: Button, hier vermutlich Button1.
Dann funzt es auch mit ControlClick.