Ergebnis ist korrekt. Komma muß als Punkt eingegeben werden.
[autoit]ConsoleWrite(30 - 25.4/2 & @CRLF)
[/autoit]Ergebnis ist korrekt. Komma muß als Punkt eingegeben werden.
[autoit]ConsoleWrite(30 - 25.4/2 & @CRLF)
[/autoit]Es wäre interessant zu wissen, wohin der Text geschrieben werden soll (Was für eine Anwendung). Eventuell kann man dieses Programm direkt ansprechen.
Ansonsten schau dir an: GUICtrlRead, ControlSend
Send("{BS 12}Klaus " & @MDAY & '.' & @MON & '.' & @YEAR)
[/autoit]Welches ist jetzt deine Frage? :wacko:
- Da hat ja einer die gleiche Idee gehabt, wie ich.
#include<array.au3>
$filename = @ScriptDir & "\multipage.tif"
$ret = _FileInfoExtended($filename)
;~ _ArrayDisplay($ret)
MsgBox(0, 'Anzahl Seiten', $ret[1][13])
;===============================================================================
; Function Name: _FileInfoExtended($FolderOrFile)
; Description:: Gibt erweiterte Dateiinformationen einer Datei oder aller Dateien
; eines Ordners zurück. Automatische Erkennung Datei oder Ordner.
; Parameter(s): $FolderOrFile Pfad der Datei/des Ordners
; Return Value(s): Array mit 34 Spalten, 1 Zeile je Datei
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _FileInfoExtended($FolderOrFile)
If Not FileExists($FolderOrFile) Then Return SetError(1)
Local $objShell = ObjCreate("Shell.Application")
Local $arrHeaders[34], $Type = 'F'
If StringInStr(FileGetAttrib($FolderOrFile), 'D') Then
Local $objFolder = $objShell.Namespace($FolderOrFile)
$Type = 'D'
Else
Local $objFSO = ObjCreate("Scripting.FileSystemObject")
Local $objFile = $objFSO.GetFile($FolderOrFile)
Local $FileName = $objFSO.GetFileName($objFile)
Local $objFolder = $objShell.Namespace($objFSO.GetParentFolderName($objFile))
EndIf
Local $arRet[1][34]
For $i = 0 To 33
$arrHeaders[$i] = $objFolder.GetDetailsOf($objFolder.Items, $i)
$arRet[0][$i] = $arrHeaders[$i]
Next
For $strFileName In $objFolder.Items
If $Type = 'F' And $objFolder.GetDetailsOf($strFileName, 0) <> $FileName Then ContinueLoop
ReDim $arRet[UBound($arRet)+1][34]
For $i = 0 to 33
$arRet[UBound($arRet)-1][$i] = $objFolder.GetDetailsOf($strFileName, $i)
Next
Next
Return $arRet
EndFunc ;_FileInfoExtended
Edit: Übrigens, die DLL ist kostenfrei limitiert auf die Erkennung von max. 10 Seiten.
Leider funktioniert auch das nicht aus der Firma
Sicherlich wird bei dir das Objekt "Adodb.Stream" geblockt. Da dieses zur Ausnutzung der "ach so seltenen"
Windows-Sicherheitslücken verwendet werden kann, wird Schutzsoftware auf Servern dieses Objekt gar nicht zulassen vermute ich mal.
Hiermit liest du die Tabelle in ein Array aus, das dann identisch, wie die Tabelle ist.
Kannst dann die gewünschten Werte aus den Arrayelementen abfragen und vergleichen.
#include <IE.au3>
#include <array.au3>
Local $url = 'http://statistik.xxxxx.de/monatsstat.php'
Local $oIE = _IECreate($url, 0, 0)
Local $oTable = _IETableGetCollection($oIE, 0)
Local $array = _IETableWriteToArray($oTable, True)
_ArrayDisplay($array)
_IEQuit($oIE)
Das Besondere? - Nun nicht unbedingt besonders, nur anders. ![]()
Wollte nur aufzeigen, dass es auch andere Funktionen außerhalb der Standardfunktionen gibt.
Werde mal bei Gelegenheit einen Geschwindigkeitsvergleich machen. Könnte mir vorstellen, dass es da Unterschiede (in welche Richtung auch immer) gibt. Aber meist schneiden Objektlösungen sehr gut ab. ![]()
Hi,
mal 2 Funktionen zum DL (Source u. Datei) per Objekt.
_GetSource() habe ich im EN-Forum entdeckt und _DownLoad() habe ich aus einem VB-Skript.
Local $Path = @ScriptDir & '\weihnachtsgedicht2.txt'
_DownLoad('http://fun.drno.de/txt/german/weihnachtsgedicht2.txt', $Path)
ConsoleWrite(_GetSource('http://www.autoit.de/') & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Func _DownLoad($URL, $PATH2SAVE)
$oHttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHttp.Open("GET", $URL)
$oHttp.Send
$HttpErrorCode = $oHttp.Status
If $HttpErrorCode = 200 Then
$oStream = ObjCreate("Adodb.Stream")
With $oStream
.Type = 1
.Open
.Write($oHttp.ResponseBody)
.SaveToFile($PATH2SAVE, 2)
.Close
EndWith
Endif
EndFunc
Func _GetSource($URL)
$oHttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHttp.Open("GET", $URL)
$oHttp.Send
Return $oHttp.ResponseText
EndFunc
kann man auch aus der 0 1 2 3 4 nummerierung rausgehen, und strings oder unzusammenhängende zahlen verwenden?
Nein, du greifst per Index auf das Array zu, d.h. du gibst die "Hausnummer" an, unter der im Array das Element lagert.
Alternativ kannst du mit Dictionary-Objekt arbeiten. Dann ist assoziativer Zugriff möglich.
Das Problem ist, dass du nicht die Forenregeln beachtest.
NO GAME-BOTS!!
Na, dann Herzlich Willkommen!
Ich denke, du wirst dich in unserer Community wohl fühlen.
In diesem Fall ist festgelegt, dass alle Ergebnisse, auf die das RegEx-Pattern zutrifft, in einem Array zurückgegeben werden. Da ich abfrage, ob die Rückgabe überhaupt ein Array ist, und das Array nur ein Element enthält, greife ich auf dieses eine Element mit $ret[0] zu.
Weiß jemand wie man danach die Radio Boxes oder den OK Button wieder aktiviert?
Das kann man ohne Code nicht beurteilen.
; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
$arCoord[2][3] = [ _
['A',1122,623], _
['B',1153,718]] ; usw.
; $varBuchstabe enthält den Buchstaben mit dem du vergleichen willst
For $i = 0 To UBound($arCoord) -1
If $varBuchstabe = $arCoord[$i][0] Then MouseClick('left', $arCoord[$i][1], $arCoord[$i][2])
Next
Wäre mal ganz nett, wenn du sagst, was das werden soll.
Hi,
habe das nochmals aufgegriffen und etwas erweitert.
- Das jeweils aktive Fenster wird im Fenstermenü angehakt
- Beim Schließen eines Fensters, wird das zuletzt aktive erneut aktiviert
#include<WindowsConstants.au3>
#include <GUIConstants.au3>
Opt('GUIOnEventmode', 1)
Opt("GUIEventOptions",1)
; Deklaration der Sub-GUI
Global $arWindow[3][3] = [ _ ; ID,State,PosShow
[Execute('GUICreate("Kunden" , 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)'),1,0], _
[Execute('GUICreate("Artikel" , 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)'),1,0], _
[Execute('GUICreate("SerienNr", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)'),1,0]]
For $i = 0 To UBound($arWindow) -1
GUISetOnEvent($GUI_EVENT_CLOSE, '_closeSub', $arWindow[$i][0])
Next
; Hotkeys zum Einblenden der Sub-GUI
HotKeySet("^k", "_StrgK")
HotKeySet("^a", "_StrgA")
HotKeySet("^s", "_StrgS")
; Erstellen Array für ID im Menü 'Fenster' -- Reihenfolge identisch mit erstellten Fenstern, identische Titel!!
Global $arWndItem[3][3] = [ _ ; ID,Title,Exists
[0,'Kunden' ,0], _
[0,'Artikel' ,0], _
[0,'SerienNr',0]]
; Deklaration der Main-GUI
$MainGUI = GUICreate("Main", -1, -1, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZE))
GUISetOnEvent($GUI_EVENT_CLOSE, '_closeMain')
$menu0 = GUICtrlCreateMenu("Menü")
$m0_item1 = GUICtrlCreateMenuItem("Ende", $menu0)
GUICtrlSetOnEvent(-1, '_closeMain')
$menu1 = GUICtrlCreateMenu("Stammdaten")
$m1_item1 = GUICtrlCreateMenuItem("Kunden Strg+K", $menu1)
GUICtrlSetOnEvent(-1, '_StrgK')
$m1_item2 = GUICtrlCreateMenuItem("Artikel Strg+A", $menu1)
GUICtrlSetOnEvent(-1, '_StrgA')
$m1_item3 = GUICtrlCreateMenuItem("SerienNr Strg+S", $menu1)
GUICtrlSetOnEvent(-1, '_StrgS')
$menu2 = GUICtrlCreateMenu("Fenster")
$menu3 = GUICtrlCreateMenu("?")
$m2_item1 = GUICtrlCreateMenuItem("Hilfe", $menu3)
$m2_item2 = GUICtrlCreateMenuItem("Über", $menu3)
GUISetState(@SW_SHOW, $MainGUI)
GUIRegisterMsg($WM_SETFOCUS, 'WM_SETFOCUS')
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
#region - Shortcut Funktionen
Func _StrgK()
_RunShortcuts(0)
EndFunc
Func _StrgA()
_RunShortcuts(1)
EndFunc
Func _StrgS()
_RunShortcuts(2)
EndFunc
; per Shortcut gewähltes Fenster einblenden und aktivieren
Func _RunShortcuts($i)
GUISetState(@SW_SHOW,$arWindow[$i][0])
WinActivate($arWindow[$i][0])
_byWinActivate($arWindow[$i][0])
_checkState()
_SetEntryWindowMenu()
EndFunc
#endregion - Shortcut Funktionen
; Hauptfenster schließen
Func _closeMain()
Exit
EndFunc
; Unterfenster schließen
Func _closeSub()
For $i = 0 To UBound($arWindow) -1
If WinGetHandle($arWindow[$i][0]) = @GUI_WinHandle Then
GUISetState(@SW_HIDE, $arWindow[$i][0])
_byWinHide($arWindow[$i][0])
ExitLoop
EndIf
Next
_checkState()
_SetEntryWindowMenu()
EndFunc
; ein Fenster wird aktiviert - Reihenfolge speichern
Func _byWinActivate($ID)
Local $pos, $max = 0
For $i = 0 To UBound($arWindow) -1
If $arWindow[$i][0] = $ID Then $pos = $i
If $arWindow[$i][2] > $max Then $max = $arWindow[$i][2]
Next
If $arWindow[$pos][2] = 0 Then
$arWindow[$pos][2] = $max +1
ElseIf $arWindow[$pos][2] = $max Then
Return
Else
For $i = 0 To UBound($arWindow) -1
If $arWindow[$i][0] = $ID Then
$arWindow[$i][2] = $max
ElseIf $arWindow[$i][2] > 0 Then
$arWindow[$i][2] = $arWindow[$i][2] -1
EndIf
Next
EndIf
EndFunc
; Fenster wird Hide gesetzt - das zuvor aktive Fenster aktivieren
Func _byWinHide($ID)
Local $pos, $max = 0
For $i = 0 To UBound($arWindow) -1
If $arWindow[$i][0] = $ID Then $arWindow[$i][2] = 0
If $arWindow[$i][2] > $max Then
$max = $arWindow[$i][2]
$pos = $i
EndIf
Next
If $max > 0 Then
WinActivate($arWindow[$pos][0])
_checkState()
_setChecked()
EndIf
EndFunc
; Fenstereintrag geklickt
Func _WindowItem()
For $i = 0 To UBound($arWndItem) -1
If $arWndItem[$i][0] = @GUI_CtrlId Then
WinActivate($arWindow[$i][0])
_byWinActivate($arWindow[$i][0])
ExitLoop
EndIf
Next
_checkState()
_setChecked()
EndFunc
; Fensterstatus prüfen
Func _checkState()
For $i = 0 To UBound($arWindow) -1
$arWindow[$i][1] = WinGetState($arWindow[$i][0])
Next
EndFunc
; Fenster-Menü-Eintrag setzen
Func _SetEntryWindowMenu()
For $i = 0 To UBound($arWindow) -1
If $arWindow[$i][1] = 7 Or $arWindow[$i][1] = 15 Then
If $arWndItem[$i][2] = 0 Then
$arWndItem[$i][0] = GUICtrlCreateMenuItem($arWndItem[$i][1], $menu2)
GUICtrlSetOnEvent($arWndItem[$i][0], '_WindowItem')
$arWndItem[$i][2] = 1
EndIf
Else
If $arWndItem[$i][2] = 1 Then
GUICtrlDelete($arWndItem[$i][0])
$arWndItem[$i][2] = 0
EndIf
EndIf
Next
_setChecked()
EndFunc
; Menüeintrag für aktives Fenster markieren
Func _setChecked()
For $i = 0 To UBound($arWindow) -1
If $arWindow[$i][1] = 15 Then
GUICtrlSetState($arWndItem[$i][0], $GUI_CHECKED)
Else
GUICtrlSetState($arWndItem[$i][0], $GUI_UNCHECKED)
EndIf
Next
EndFunc
; wenn ein Fenster den Fokus bekommt
Func WM_SETFOCUS($hWnd)
Local $match = False
For $i = 0 To UBound($arWindow) -1
If WinGetHandle($arWindow[$i][0]) = $hWnd Then
_byWinActivate($arWindow[$i][0])
$match = True
ExitLoop
EndIf
Next
If $match Then
_checkState()
_setChecked()
EndIf
EndFunc
Wie vorab beschrieben, die Datei mit _FileReadToArray einlesen.
Dann in einer Schleife die einzelnen Zeilen aufsplitten in Einzelzeichen (StringSplit angucken). Solltest du Leerzeichen im String haben entferne die vorher (StringStripWS).
Oder viel besser:
Speichere die Koordinaten in einer INI-Datei. Die Sektion kannst du mit einem Rutsch in ein Array (INIReadSection) einlesen und hast dann bereits die Koordinaten einzeln zur Verfügung.
Das wird jetzt dem Replace nicht mehr gerecht, so gehts einfacher:
[autoit]$1 = "ab-22"
$ret = StringRegExp($1 , '\d', 3)
If IsArray($ret) And UBound($ret) = 1 Then
MsgBox (0,"",$ret[0]);mache weiter
Else
MsgBox (0,"","geht nicht")
EndIf