Frag doch einfach ab ob eine IE-Instanz offen ist und beende diese falls vorhanden.
Beiträge von BugFix
-
-
Vielleicht könntest du noch einbauen, dass das Fenster sich langsam ändert

Dem Wunsch konnte Rechnung getragen werden.

-
Ich hab dir mal eine Lösung gebastelt, positionieren und Größe kannst du ja noch anpassen.
- Bei Schreibbeginn im Input öffnet sich das große Input
- Bei ENTER wird das große Input geschlossen und der Inhalt in das kleine übernommen.Spoiler anzeigen
[autoit]$hLargeInput = GUICreate('', @DesktopWidth-120, 20, -1, -1, BitOR($WS_POPUP,$WS_THICKFRAME))
[/autoit] [autoit][/autoit] [autoit]
$inLarge = GUICtrlCreateInput("", -1, -1, @DesktopWidth-120, @DesktopHeight/2)
$hLargeIn = GUICtrlGetHandle($inLarge)$hGUI = GUICreate('TEST')
[/autoit] [autoit][/autoit] [autoit]
$input = GUICtrlCreateInput('', 40, 30, 60, 20)
$hIn = GUICtrlGetHandle($input)
GUISetState(@SW_SHOW, $hGUI)GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEndFunc WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Select
Case $hWndFrom = $hIn And $iCode = $EN_CHANGE
GUISetState(@SW_HIDE, $hGUI)
GUISetState(@SW_SHOW, $hLargeInput)
GUICtrlSetData($inLarge, GUICtrlRead($input))
ControlFocus($hLargeInput, '', $inLarge)
Case $iCode = 0x0
If WinActive($hLargeInput) Then
GUISetState(@SW_SHOW, $hGUI)
GUISetState(@SW_HIDE, $hLargeInput)
GUICtrlSetData($input, GUICtrlRead($inLarge))
ControlFocus($hGUI, '', $input)
EndIf
EndSelect
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND -
sollte wohl eher
[autoit]WinSetTrans($_hGui, '', $_iTrans)
[/autoit]heissen
Ja, war ein Schreibfehler.
Sehr aufmerksames Publikum.
-
Vermutlich existiert es schon in irgendeiner Form, ich hatte nur gerade nix gefunden, deshalb diese Variante von mir.
In Abhängigkeit ob die Maus (nicht) über dem Fenster ist, wird die Transparenz zwischen 2 Werten geswitcht. Standardmäßig zwischen 150 und 255 (undurchsichtig).
Falls ihr das Fenster beim Erstellen nicht auf Transparenz setzt, passiert das nach dem ersten Bewegen der Maus vom Fenster herunter automatisch.Edit 21.05.2012:
Auf mehrfachen Wunsch einer einzelnen Dame
habe ich noch einen optionalen Parameter für einen "smoothigen" Übergang der Transparenz eingebaut.
Einfach die Zeit in ms angeben und dann wird die Transparenz innerhalb dieser Zeitspanne schrittweise geändert. 500 ms ist eine recht "angenehme" Zeitspanne.Spoiler anzeigen
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; 2012-05-21 19:02:36
#EndRegion - TimeStamp#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate('TEST')
[/autoit] [autoit][/autoit] [autoit]
WinSetTrans($hGUI, '', 150)
GUISetState()While True
[/autoit] [autoit][/autoit] [autoit]
_TransOffByMouseOver($hGUI, -1, -1, 500) ; == letzter Parameter ist Zeit in ms für den Übergang der Transparenz
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd;===============================================================================
[/autoit]
; Function Name....: _TransOffByMouseOver
; Description......: Verändert Transparenz eines Fensters bei Maus über/nicht über Fenster
; Parameter(s).....: $_hGui Fensterhandle
; .................: $_iTrans Transparenz bei Maus nicht über Fenster (Standard 150)
; .................: $_iTransOff Transparenz bei Maus über Fenster (Standard 255, undurchsichtig)
; ........optional.: $_iTimeSmooth Zeit für den weichen Übergang der Transparenz in ms, Standard=0
; Requirement(s)...: #include <WinAPI.au3>
; Return Value(s)..: nichts
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _TransOffByMouseOver($_hGui, $_iTrans=-1, $_iTransOff=-1, $_iTimeSmooth=0)
If $_iTrans = -1 Then $_iTrans = 150
If $_iTrans < 0 Then $_iTrans = 0
If $_iTransOff = -1 Then $_iTransOff = 255
If $_iTransOff > 255 Then $_iTransOff = 255
If $_iTimeSmooth < 0 Then $_iTimeSmooth = 0
Local $tGui = _WinAPI_GetWindowRect($_hGui)
Local $posMouse = MouseGetPos(), $iStep, $ret, $iCurr = $_iTrans, $timer
Local Static $fTrans = True
$ret = DllCall("user32", "long", "PtInRect", "ptr", DllStructGetPtr($tGui), "long", $posMouse[0], "long", $posMouse[1])
If $ret[0] Then
If $fTrans Then
$fTrans = False
If $_iTimeSmooth > 0 Then
$iStep = Ceiling(($_iTransOff-$_iTrans)/($_iTimeSmooth/10))
While $iCurr < $_iTransOff
$iCurr += $iStep
If $iCurr > $_iTransOff Then
WinSetTrans($_hGui, '', $_iTransOff)
ExitLoop
EndIf
WinSetTrans($_hGui, '', $iCurr)
$timer = TimerInit()
Do
Until TimerDiff($timer) >= 10
WEnd
Else
WinSetTrans($_hGui, '', $_iTransOff)
EndIf
EndIf
Else
If Not $fTrans Then
$fTrans = True
If $_iTimeSmooth > 0 Then
$iCurr = $_iTransOff
$iStep = Ceiling(($_iTransOff-$_iTrans)/($_iTimeSmooth/10))
While $iCurr > $_iTrans
$iCurr -= $iStep
If $iCurr < $_iTrans Then
WinSetTrans($_hGui, '', $_iTrans)
ExitLoop
EndIf
WinSetTrans($_hGui, '', $iCurr)
$timer = TimerInit()
Do
Until TimerDiff($timer) >= 10
WEnd
Else
WinSetTrans($_hGui, '', $_iTrans)
EndIf
EndIf
EndIf
EndFunc ;==>_TransOffByMouseOver -
Man sollte sich einfach mal klarmachen, dass man nichts umsonst bekommt. Denn auch die Freehoster sind nicht gratis, sondern versüßen uns das Leben mit Werbung. :wacko:
Erst recht, wenn man bestimmte Anforderungen hat, sollte man von vornherein nach kostengünstigen statt freien Anbietern suchen. -
Ich habe gerade soviel Baustellen offen, dass ich dieses hier etwas vertagt habe. Ist aber nicht vergessen und wird hoffentlich in Kürze nachgebessert.
Ich grübel gerade noch an einer effizienten Methode um auf Updates automatisch reagieren zu können. Bei Standard-Includes ist das kein Problem, da gibt es ja eine AutoIt-Version, die sich abfragen läßt. Aber von allen Eigenen Includes evtl. Änderungen bei jedem Start zu prüfen bzw. neue Dateien einzulesen erscheint mir wenig sinnvoll. Oder ich verlege das ins SciTE-Startup, sodass es schon vor dem Aufruf der Funktion erledigt wird.
Naja, ich finde schon eine Lösung
- kann halt nur noch etwas dauern. -
Hi,
vielleich hat noch wer Verwendung dafür.
Mit der Funktion lassen sich Ordnernamen (oder kpl. Pfade) in relativer Tiefe zum Startordner ausgeben.
Dazu wird ab Startordner rekursiv bis zur angegebenen Tiefe nach allen Verzeichnissen gesucht und die Ordner der letzten Ebene werden ausgegeben. Wahlweise wird der kpl. Pfad oder nur der Ordnername zurückgegeben._GetFolderInRelativeDepth
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2012-05-20 20:17:50 v 0.1
#EndRegion - TimeStamp;===============================================================================
[/autoit]
; Function Name....: _GetFolderInRelativeDepth
; Description......: Gibt alle Ordner (kpl. Pfade, od. nur Ordnername) in relativer Tiefe zum übergebenen Ordner zurück
; Parameter(s).....: $_sRootFolder Pfad unterhalb dem gesucht werden soll
; .................: $_iDepth Pfadebene unterhalb des Startordners
; .................: $fFullPath 1=Rückgabe der kpl. Ordnerpfade (Standard), 0=nur Ordnernamen
; Return Value(s)..: Erfolg Array mit den Ordner(Pfaden) der Ebene
; .................: Fehler 0, @error=1 (keine Ordner in dieser Ebene)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GetFolderInRelativeDepth($_sRootFolder, $_iDepth, $fFullPath=1)
Local $sFound, $hSearch = FileFindFirstFile($_sRootFolder & '\*.*'), $iRow = $_iDepth-1
If $_iDepth < 2 Then $iRow = 2
Local $aFolder[$iRow][2] = [[1]], $sOut = '', $iCurrDepth = 0, $i
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sFound), 'D') Then
If $_iDepth = 1 Then
If $fFullPath Then
$sOut &= $_sRootFolder & '\' & $sFound & Chr(0)
Else
$sOut &= $sFound & Chr(0)
EndIf
Else
ReDim $aFolder[$iRow][$aFolder[$iCurrDepth][0] +1]
$aFolder[$iCurrDepth][0] += 1 ; == UBound in dieser Zeile
$aFolder[$iCurrDepth][$aFolder[$iCurrDepth][0] -1] = $_sRootFolder & '\' & $sFound
EndIf
EndIf
WEnd
If $_iDepth = 1 Then
If $sOut = '' Then Return SetError(1,0,0)
Return StringSplit(StringTrimRight($sOut, 1), Chr(0))
EndIf
For $i = 0 To UBound($aFolder) -2 ; == Ordnerebene über Zieltiefe
For $j = 0 To UBound($aFolder,2) -1
If $aFolder[$i][$j] = '' Then ExitLoop
$hSearch = FileFindFirstFile($aFolder[$i][$j] & '\*.*')
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($aFolder[$i][$j] & '\' & $sFound), 'D') Then
If $aFolder[$i][0] = UBound($aFolder,2) Then
ReDim $aFolder[$iRow][$aFolder[$i][0] +1]
$aFolder[$i][0] += 1
EndIf
EndIf
WEnd
Next
Next
$i = UBound($aFolder) -1
For $j = 0 To UBound($aFolder,2) -1
If $aFolder[$i][$j] = '' Then ExitLoop
$hSearch = FileFindFirstFile($aFolder[$i][$j] & '\*.*')
While True
$sFound = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($aFolder[$i][$j] & '\' & $sFound), 'D') Then
If $fFullPath Then
$sOut &= $aFolder[$i][$j] & '\' & $sFound & Chr(0)
Else
$sOut &= $sFound & Chr(0)
EndIf
EndIf
WEnd
Next
If $sOut = '' Then Return SetError(1,0,0)
Return StringSplit(StringTrimRight($sOut, 1), Chr(0))
EndFunc ;==>_GetFolderInRelativeDepth -
wie kann ich nur so viele Zeilen lesen wie auch beschrieben sind?
[autoit]
Gibt verschiedene Möglichkeiten. Ich habe z.B. die Funktion _ExcelBookGetWidth() erstellt, mit der sich das abfragen läßt.
Andere Variante:; === letzte Zeile
[/autoit][autoit][/autoit][autoit]
ConsoleWrite('Anzahl Zeilen: ' & $oExcel.Worksheets(1).UsedRange.Rows.Count & @CRLF); === letzte Spalte
[/autoit]
ConsoleWrite('Anzahl Spalten: ' & $oExcel.Worksheets(1).UsedRange.Columns.Count & @CRLF) -
dass es sich in dem "echten" Script eher um 24-150 oder mehr buttons handelt
Wozu gibt es Arrays...
-
Das kannst du so lösen:
[autoit]$bt1= GUICtrlCreateButton(..)
[/autoit][autoit][/autoit][autoit]
GUICtrlSetOnEvent(-1, 'EventHandler')
$bt2= GUICtrlCreateButton(..)
GUICtrlSetOnEvent(-1, 'EventHandler')
$bt3= GUICtrlCreateButton(..)
GUICtrlSetOnEvent(-1, 'EventHandler')
$bt4= GUICtrlCreateButton(..)
GUICtrlSetOnEvent(-1, 'EventHandler');......
[/autoit][autoit][/autoit][autoit]Func EventHandler()
[/autoit]
Switch @GUI_CtrlId
Case $bt1
;..
Case $bt2
;..
Case $bt3
;..
Case $bt4
;..
EndSwitch
EndFunc -
Du kannst OnEvent-Funktionen NICHT mit Parameter aufrufen. Steht auch so in der Hilfe.
-
Wenn StringSplit dir nur Müll zurückgibt, solltest du vielleicht mal einen Blick auf den 3.ten Parameter werfen. Der Fehler sitzt meist 60 cm vor dem Monitor.

-
-
Wenn das Bild genauso groß ist, wie die GUI, zentrierst du das Bild (mit der GUI) durch Angabe von "-1" oder "Default" bei Position X und Y für die GUI.
-
muss ich die abläufe noch mit dem AU3record aufnehme
Davon möchte ich dir dringend abraten. Dieses Tool ist nur dann halbwegs brauchbar, wenn du gar kein Standard-Control auf der Anwendung hast und tatsächlich rumklicken mußt mit Maus-Simulation.
Der erste Weg sollte immer das AutoIt-Windows-Info-Tool sein. Da siehst du, ob die Fenster/Controls per ID oder CLASS ansprechbar sind. Nur, wenn das erfolglos ist, sollte man auf die Krücke der Mausklickerei zurückgreifen. -
- Syntax Funktionsaufrufe an neue Version angepaßt
- ColorPicker hinzugefügt -
Zumindest in einem Teil (Captcha) Verstoß gegen Forenregeln.
[CLOSED]
-
He Dino, ich dachte, es ist selbstverständlich, dass du die Funktion (von hier) auch wieder mit nutzt. Ich habe nur die Änderungen gepostet.

-
Gibt es einen Punkt im Dateinamen hat die Datei auch eine Endung.
OK, wenn dem so ist, lag ich daneben.
Ich war immer der Meinung, dass Dateinamen ohne Endung aber mit Pukt im Namen möglich sind. Das Windows alles, was nach einem Punkt kommt als Endung interpretiert, heißt ja noch lange nicht, dass dem auch so ist. Oder?