Verwende doch die Acrobat API für den Direktzugriff.
Wenn du Programme automatisieren möchtest empfiehlt es sich immer zuerst nach einer API zu suchen. Das vereinfacht die Kommunikation mit Programmen ungemein.
PS: Es gibt auch eine Matlab-API
Verwende doch die Acrobat API für den Direktzugriff.
Wenn du Programme automatisieren möchtest empfiehlt es sich immer zuerst nach einer API zu suchen. Das vereinfacht die Kommunikation mit Programmen ungemein.
PS: Es gibt auch eine Matlab-API
_WinAPI_GetClassName($WindowHandle)
[/autoit]MatLab und Adobe besitzen bereits Batch Prozesse aber diese würde ich gerne mit Auto IT aufeinander abtimmen
Im Allgemeinen ist es recht unproblematisch, Batch nach AutoIt zu portieren. Denn du hast damit ja schon eine existierende Ablauflogik, die Basis eines jeden Skriptes. Nun muss also nur die Batch-Syntax auf AutoIt-Syntax umgerubelt werden, beileibe kein Hexenwerk.
Der Aufbau deiner Datei ist eindeutig INI - also nutze die Ini-Funktionen von AutoIt dafür. Musst aber wohl die Datei dann auch umbenennen zur *.ini damit die Funktionen nutzbar sind.
Hier hast du ein prinzipielles Beispiel:
#include <GuiListView.au3>
[/autoit] [autoit][/autoit] [autoit]GUICreate('Test')
$cLV = GuiCtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200)
$hLV = GUICtrlGetHandle($cLV)
$btCheck = GUICtrlCreateButton('Check', 10, 240, 80, 20)
Global $aLVItem[10]
For $i = 1 To 10
$aLVItem[$i-1] = GUICtrlCreateListViewItem($i & '|' & $i+10, $cLV)
Next
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case -3
Exit
Case $btCheck
If Number(_GUICtrlListView_GetItemText($hLV, 7, 1)) - Number(_GUICtrlListView_GetItemText($hLV, 1, 1)) > 5 Then GUICtrlSetBkColor($aLVItem[7], 0xFF0000)
EndSwitch
WEnd
Sowas gibt es doch bei vielen Programmen.
Mag ja sein - aber nochmal: Mit den Standard-AutoIt-Funktionen ist das nicht realisierbar.
P.S.: Ich glaube, ihr missversteht mein Problem ein bisschen
Da hilft besseres Beschreiben? ![]()
Also MenuItem können m.W. mit Standardfunktionen keine Checkbox erhalten, nur RadioItem sind möglich.
Checkbox = 4 (deaktiviert) dann soll sie auf 1 (aktiviert)
NEIN, nein und nochmals nein!! Das haben wir schon so oft thematisiert.
NIEMALS sollte man Checkboxen so abfragen. Eine Checkbox kann auch andere Werte ausgeben, wenn sie de/aktiviert ist.
Einfach der Hilfeempfehlung folgen und den Status mit
If BitAnd(GuiCtrlRead($Checkbox), $GUI_CHECKED) Then
[/autoit]prüfen.
Nur so ist gewährleistet, dass der korrekte Status abgefragt wird.
Die Fehlermeldung besagt, dass du auf ein Arrayelement verweisen willst, das gar nicht existiert. Indexfehler.
Lass dir einfach beim Abarbeiten des Arrays in jedem Durchlauf den Index und zugehörige Werte ausgeben. Du wirst sehen das läuft durch und dann bricht es mit besagter Fehlermeldung ab, weil du plötzlich ausserhalb des Arrays adressierst.
Verwende einfach mal Ubound($Array) -1 als letzten Index ;), dann kannst du nicht ausserhalb landen.
Du möchtest ein Programm remote ausführen. Schau mal, ob das passt: [ gelöst ] User Eingabe auf Remote-Maschine
Bei der Listview-UDF ist es empfehlenswert, das Handle statt der ID zu verwenden.
[autoit]$hListview = GuiCtrlGetHandle($ID_Listview)
[/autoit]Wozu kann man sowas brauchen? - Genau! Und nun wirf einen Blick auf unsere Forenregeln!
Wird nicht freigegeben.
Als wir vor Jahren angefangen haben ins Deutsche zu übersetzen, hatte ich zig Dateien übersetzt und auch häufig Korrektur gelesen. Somit hat sich auch der engl. Teil dermassen gefestigt, dass ich die deutsche Hilfe gar nicht benötige.
Sollte doch mal ein Passus unklar sein, schau ich kurz ins Wörterbuch.
Das Übersetzen hatte aber einen angenehmen Nebeneffekt: Man lernte Funktionen kennen, von denen man vorher nicht wusste, dass sie existieren. ![]()
Bevor ich mir Gedanken mache ob ein GUI in ein TAB integriert werden kann, stellt sich mir die Frage: "Warum soll da ein GUI rein?"
Du kannst doch auf dem TAB Controls platzieren, weshalb also eine GUI?
Edit:
Hier mal eine Lösungsvariante
#include <GuiTab.au3>
#include <WindowsConstants.au3>
Global $xTab = 10, $yTab = 10
[/autoit] [autoit][/autoit] [autoit]$hMain = GUICreate('Test', 420, 400)
$cTab = GUICtrlCreateTab($xTab, $yTab, 400, 300)
$hTab = GUICtrlGetHandle($cTab)
$cTabItem1 = GUICtrlCreateTabItem('Item_1')
$cTabItem2 = GUICtrlCreateTabItem('Item_2')
$aTabDisp = _GUICtrlTab_GetDisplayRect($hTab)
$hChild = GUICreate('Child', $aTabDisp[2]-$aTabDisp[0], $aTabDisp[3]-$aTabDisp[1], $aTabDisp[0]+$xTab, $aTabDisp[1]+$yTab, $WS_POPUP, $WS_EX_MDICHILD, $hMain)
GUICtrlCreateLabel('Das ist ein Child-GUI', 100, 50)
GUICtrlCreateLabel('Aber genausogut lassen sich Controls direkt auf dem TAB platzieren. :P', 25, 100)
GUISetState(@SW_SHOW, $hMain)
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case -3
Exit
Case $cTab
If GUICtrlRead($cTab) = 1 Then
GUISetState(@SW_SHOWNA, $hChild)
Else
GUISetState(@SW_HIDE, $hChild)
EndIf
EndSwitch
WEnd
Nun, bei mir passiert da nichts ungewöhnliches.
Was bleibt:
- Mausproblem?
- anderes Hardwareproblem?
Dann zeig mal Code, wo das auftritt. Habe identisches System und kann dieses Verhalten nicht bestätigen.
Hi Spider,
du kannst auch die ReplaceCallback-Funktion von Taz77 dazu mißbrauchen:
$string = '<xs:complexType name="cmplx1">' & @CRLF & _
'<xs:sequence>' & @CRLF & _
'<xs:element name="name1" type="type1"/>' & @CRLF & _
'<xs:element name="nameN" type="typeN"/>' & @CRLF & _
'</xs:sequence>' & @CRLF & _
'</xs:complexType>' & @CRLF & _
'<xs:complexType name="cmplxN">' & @CRLF & _
'<xs:sequence>' & @CRLF & _
'<xs:element name="name2" type="type2"/>' & @CRLF & _
'<xs:element name="nameX" type="typeX"/>' & @CRLF & _
'</xs:sequence>' & @CRLF & _
'</xs:complexType>'
$patt = '(?:complexType name="(.*?)">)|(?:<xs:element name="(.*?)")|(?: type="(.*?)")'
[/autoit] [autoit][/autoit] [autoit]Global $aMatch[1] = [0]
_StringRegExpReplace_Callback($string, $patt, '_AddMatch("$1","$2","$3")')
For $i = 1 To $aMatch[0]
ConsoleWrite($aMatch[$i] & @LF)
Next
Func _AddMatch($1,$2,$3)
$aMatch[0] += 1
ReDim $aMatch[$aMatch[0]+1]
If $1 <> '' Then
$aMatch[$aMatch[0]] = $1
ElseIf $2 <> '' Then
$aMatch[$aMatch[0]] = $2
ElseIf $3 <> '' Then
$aMatch[$aMatch[0]] = $3
EndIf
EndFunc
; #FUNCTION# ====================================================================================================================
; Name ..........: _StringRegExpReplace_Callback
; Description ...: Replaces ByRef all matches in a string by manipulation of the matches in a callback function
; Parameters ....: $sString String to manipulate
; ...............: $sPattern RegExp pattern for the match
; ...............: $sCallback Callback function as string, i.e. "MyCallback('$1')" -- '$1' represents the match
; .....optional..: $sBefore String to insert before the manipulated match
; .....optional..: $sAfter String to insert after the manipulated match
; Return values .: Success 1
; ...............: Failure 0 set error = 1
; Author ........: Taz77
; ===============================================================================================================================
Func _StringRegExpReplace_Callback(ByRef $sString, $sPattern, $sCallback, $sBefore = '', $sAfter = '')
$sString = Execute("'" & StringRegExpReplace(StringReplace($sString, "'", Chr(26), 0, 2), $sPattern, $sBefore & "'&" & $sCallback & "&'" & $sAfter) & "'")
If @error Then
ConsoleWrite('_StringRegExpReplace_Callback error! Pattern: "' & $sPattern & '", Callback: "' & $sCallback & '"' & @LF)
Return SetError(1,0,0)
EndIf
$sString = StringReplace($sString, Chr(26), "'", 0, 2)
Return 1
EndFunc ;==>_StringRegExpReplace_Callback
Mars:
Hi,
da recht häufig eine Dateiauflistung nach Datumskriterien weiterbearbeitet wird, halte ich es für sinnvoll, dass man doch die Listfunktion bereits dafür mit einer Option versieht. Wird diese Option nicht genutzt, führt dies auch zu keinerlei Verlangsamung der originalen Funktion, da der Timestamp erst im Anschluß des Standardablaufs ermittelt wird.
; #FUNCTION# ====================================================================================================================
; Name...........: _FileListToArray
; Description ...: Lists files and\or folders in a specified path (Similar to using Dir with the /B Switch)
; Syntax.........: _FileListToArray($sPath[, $sFilter = "*"[, $iFlag = 0]])
; Parameters ....: $sPath - Path to generate filelist for.
; $sFilter - Optional the filter to use, default is *. Search the Autoit3 helpfile for the word "WildCards" For details.
; $iFlag - Optional: specifies whether to return files folders or both
; |$iFlag= 0 (Default) Return both files and folders
; |$iFlag= 1 Return files only
; |$iFlag= 2 Return Folders only
; ******** $iDate - Optional: specifies to get additional time stamp ('YYYYMMDDHHMMSS')
; ******** |$iDate=-1 (Default) No time stamp
; ******** |$iDate= 0 Gets modification time stamp
; ******** |$iDate= 1 Gets creation time stamp
; ******** |$iDate= 2 Gets last access time stamp
; Return values .: @Error - 1 = Path not found or invalid
; |2 = Invalid $sFilter
; |3 = Invalid $iFlag
; |4 = No File(s) Found
; Author ........: SolidSnake <MetalGX91 at GMail dot com>
; Modified.......: BugFix (additional time stamp)
; Remarks .......: The array returned is one-dimensional and is made up as follows:
; $array[0] = Number of Files\Folders returned
; $array[1] = 1st File\Folder
; $array[2] = 2nd File\Folder
; $array[3] = 3rd File\Folder
; $array[n] = nth File\Folder
; ******** By using additional time stamp the array returned is two-dimensional:
; ******** $array[0][0] = Number of Files\Folders returned
; ******** $array[1][0] = 1st File\Folder, $array[1][1] = 1st time stamp
; ******** $array[2][0] = 2nd File\Folder, $array[2][1] = 2nd time stamp
; ******** $array[3][0] = 3rd File\Folder, $array[3][1] = 3rd time stamp
; ******** $array[n][0] = nth File\Folder, $array[n][1] = nth time stamp
; Related .......:
; Link ..........:
; Example .......: Yes
; Note ..........: Special Thanks to Helge and Layer for help with the $iFlag update speed optimization by code65536, pdaughe
; ===============================================================================================================================
Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0, $iDate = -1)
Local $hSearch, $sFile, $sFileList, $sDelim = "|"
$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "" ; ensure single trailing backslash
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
$hSearch = FileFindFirstFile($sPath & $sFilter)
If @error Then Return SetError(4, 4, "")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If ($iFlag + @extended = 2) Then ContinueLoop
$sFileList &= $sDelim & $sFile
WEnd
FileClose($hSearch)
If Not $sFileList Then Return SetError(4, 4, "")
If $iDate = -1 Then
Return StringSplit(StringTrimLeft($sFileList, 1), "|")
Else
Local $aContent = StringSplit(StringTrimLeft($sFileList, 1), "|")
Local $aOut[$aContent[0]+1][2] = [[$aContent[0]]]
For $i = 1 To $aContent[0]
$aOut[$i][0] = $aContent[$i]
$aOut[$i][1] = FileGetTime($sPath & $aContent[$i], $iDate, 1)
Next
Return $aOut
EndIf
EndFunc ;==>_FileListToArray
Wie kann ich das Bild in einem in einem Ringspeicher abspeichern ? So das immer das 10 Bild gelöscht wird ?
Schreib dir eine Speicherfunktion:
- Dateien im Ordner mit _FileListToArray einlesen
- Zielordner hat weniger als 10 Bilddateien? ==> nur speichern
- sonst ==> durch Array iterieren und älteste Datei ermitteln - diese löschen, neue Datei speichern