Du kannst prüfen, ob die Zeit größer ist, also z.B:
[autoit]while 1
if @HOUR > 9 AND @MIN > 0 then ExitLoop
WEnd
Das Script läuft dann maximal noch einmal durch, danach hört es aber auf
Du kannst prüfen, ob die Zeit größer ist, also z.B:
[autoit]while 1
if @HOUR > 9 AND @MIN > 0 then ExitLoop
WEnd
Das Script läuft dann maximal noch einmal durch, danach hört es aber auf
$Text = "Anmerkungen, also Fliesstext mit äüöÄÜÖ und ß und $&" & @CRLF & "Hier die zweite Zeile" & @CRLF & @CRLF & "Hier die dritte Zeile"
$s = VCard_Encode($Text)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $s = ' & $s & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
Func VCard_Encode($txt, $output = "NOTE;CHARSET=utf-8;ENCODING=QUOTED-PRINTABLE:")
Local $tmp, $Split, $Outputtxt
$tmp = StringReplace($txt, " ", "=20")
$tmp = StringReplace($tmp, @CRLF, "=0D=0A")
For $i = 128 To 255
$tmp = StringReplace($tmp, Chr($i), "=" & Hex($i, 2), 0 ,1)
Next
$tmp = $output & $tmp
$Split = StringSplit($tmp, "")
$Outputtxt = ""
For $i = 1 To $Split[0]
If IsInt($i / 75) Then $Outputtxt &= "=" & @CRLF
$Outputtxt &= $Split[$i]
Next
Return $Outputtxt
EndFunc ;==>VCard_Encode
In deinem Ergebnis sind mehr Zeichen drin als in deinem Text:
$t = "=20=C3=A4=C3=BC=C3=B6=C3=84=C3=9C=C3=96"
$Split = Stringsplit($t, "=")
$txt = ""
For $I = 1 To $Split[0]
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Chr(dec($Split[$i])) = ' & Chr(dec($Split[$i])) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
Next
Hier auch nur mit aktiven Buttons
#include <GUIConstantsEx.au3>
#include <Array.au3>
Dim $avArray[10][11]
$hGui = GUICreate("Button test", 500, 50)
$lefthaupt = 0
For $i = 0 To 9
$left = 0
$avArray[$i][0] = GUICtrlCreateButton("Button_"&$i, $lefthaupt, 0)
For $k = 1 To 10
$avArray[$i][$k] = GUICtrlCreateButton($i &" "&$k, $left, 25, 50)
GUICtrlSetState($avArray[$i][$k], $GUI_HIDE)
$left += 50
Next
$lefthaupt += 50
Next
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $avArray[0][0] TO $avArray[UBound($avArray) -1][UBound($avArray, 2) -1]
$hTmp = $nMsg - $avArray[0][0]
If IsInt($htmp/11) Then
For $i = 1 To UBound($avArray, 2) - 1
GUICtrlSetState($avArray[$htmp/11][$i], $GUI_SHOW)
Next
For $i = 0 To UBound($avArray) -1
If $i = $htmp/11 Then ContinueLoop
For $k = 1 To UBound($avArray, 2) -1
GUICtrlSetState($avArray[$i][$k], $GUI_HIDE)
Next
Next
;~ MsgBox(0, "Info", "Button " & $htmp/11+1 & " wurde gedrückt")
Else
$Split = Stringsplit($hTmp/11, ".")
$Split2 = Stringsplit($Split[2], "")
;~ MsgBox(0, "Info", "Button " & $Split[1] & " SubButton "&Ceiling($Split2[1]&"."&$Split2[2]&$Split2[3]) &"wurde gedrückt")
EndIf
EndSwitch
WEnd
Ich habe gesucht und gefunden ![]()
hier der _LINK
#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Dim $array[19]
$GUI = GUICreate("On-Event-Modus")
For $i = 0 To 18
$array[$i] = GUICtrlCreateButton('Button ' & $i + 1, 10, 10 + 20 * $i, 50, 18)
Next
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $array[0] To $array[18]
$hTmp = $nMsg - $array[0] + 1
MsgBox(0, "Info", "Button " & $hTmp & " wurde gedrückt")
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Ich versuche es mal auf dein Script umzuschreiben
Hier auf dein Script ( nur mit Arrays, sonst geht es nicht)
#include <GUIConstantsEx.au3>
#include <Array.au3>
Dim $avArray[11][11]
$hGui = GUICreate("Button test", 800, 800)
$top = 0
For $i = 0 To 10
$left = 0
$avArray[$i][0] = GUICtrlCreateButton("Button_"&$i, $left, $top)
For $k = 1 To 10
$left += 50
$avArray[$i][$k] = GUICtrlCreateButton("SubButton_"&$i, $left, $top)
Next
$top += 50
Next
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $avArray[0][0] TO $avArray[UBound($avArray) -1][UBound($avArray, 2) -1]
$hTmp = $nMsg - $avArray[0][0]
If IsInt($htmp/11) Then
MsgBox(0, "Info", "Button " & $htmp/11+1 & " wurde gedrückt")
Else
$Split = Stringsplit($hTmp/11, ".")
$Split2 = Stringsplit($Split[2], "")
MsgBox(0, "Info", "Button " & $Split[1] & " SubButton "&Ceiling($Split2[1]&"."&$Split2[2]&$Split2[3]) &"wurde gedrückt")
EndIf
EndSwitch
WEnd
Ich nutze bei sowas meistens SQL, da man da einfach die Tabelle mit einem UNIQUE KEy belegen kann und doppelte automatisch rausfallen.
Weiterhin musst du die nicht raussuchen, das macht die SQLite Dll, welche um einiges schneller rechnet ![]()
#include <Array.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
$Timer = TimerInit()
Global $aResult, $iRows, $iColumns
_SQLite_Startup()
_SQLite_Open()
_SQLite_Exec(-1, "CREATE TABLE Data (Patientennummer1 VARCHAR(100),Nachname VARCHAR(100),Vorname VARCHAR(100),PGR VARCHAR(100),Datum VARCHAR(100), Patientennummer2 VARCHAR(100), UNIQUE(Nachname, Vorname, Datum));")
$aSql = 'Begin Transaction ;' & @CRLF
$Dateiname = "Neues Textdokument.txt"
$Datei = FileOpen($Dateiname, 0)
$Read = FileRead($Datei)
$Lines = Stringsplit($Read, @CRLF)
For $i = 1 TO $Lines[0]
If $Lines[$i] = "" Then ContinueLoop
$Split = Stringsplit($Lines[$i], " ")
$aSql &= "INSERT OR IGNORE INTO Data VALUES('"&$Split[1]&"', '"&$Split[2]&"', '"&$Split[3]&"', '"&$Split[4]&"', '"&$Split[5]&"', '"&$Split[6]&"');" & @CRLF
Next
$aSql &= 'Commit Transaction ;' & @CRLF
_SQLite_Exec(-1, $aSql)
_SQLite_GetTable2d(-1, "SELECT * FROM Data;", $aResult, $iRows, $iColumns)
_ArrayDisplay($aResult)
_SQLite_Close()
_SQLite_Shutdown()
$Diff = Timerdiff($Timer)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Diff = ' & $Diff & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
such mal nach Dateiliste rekursiv von Bugfix, der hat das schon geschrieben, damit werden alle Dateien auch in Unterordnern aufgelistet.
Habs geändert, führende Nullen ![]()
So meinte ich das
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$s = WinList() ;holen uns die Fensterliste
RedIM $s[$s[0][0]+2][2] ; fügen einen Platz zur Fensterliste hinzu
$s[$s[0][0]+1][0] = "test" ; tragen in das letzte Feld den Text des Hauptfensters ein
AdlibRegister("CloseUnwantedWindows", 1000)
;~ StarteHauptprogramm()
; Was auch immer gemacht wird
;
;
;
;
;
While 1
WEnd
Func CloseUnwantedWindows()
$t = Winlist()
For $i = 1 TO $t[0][0]
$search = _ArraySearch($s, $t[$i][0], 0,0,0,0,1,0)
If $search <> -1 Then ContinueLoop
WinSetState($t[$i][0], "", @SW_MINIMIZE)
Next
EndFunc
$asdf = "08946353"
$asdf = "0" & $asdf
so nicht richtig chip
Wenn man Variablen Lokal deklariert werden die nur in der Funktion genutzt, nach dem Funktionsaufruf aber wieder verworfen, auch wenn AutoItSetOption("MustDeclareVars", 1)" nicht gesetzt ist ![]()
Heißt, das der Speicher nach den Funktionsaufrufen wieder freigegeben wird.
Dein Beispiel klappt nur, weil Autoit Alle Variablen Global deklariert, wenn sie nicht anders deklariert sind.
Alle Variablen, die nicht in einem Funktionsaufruf stehen sind sowieso Global
Wenn ich bei deinem Beispiel Local y = "lala" nehme klappt es zwar noch, aber bei diesem Beispiel nicht mehr
Declare()
setupY()
Func Declare()
Local $y = "lala"
ConsoleWrite("Vor der Funktion: "& $y & @CRLF)
EndFunc
Func setupY()
ConsoleWrite("In der Funktion: "& $y & @CRLF)
$y = "huhu"
ConsoleWrite("Nach ändern in der Funktion: "& $y & @CRLF)
EndFunc
ConsoleWrite("Nach der Funktion: "& $y & @CRLF)
UPIA du kannst die Variablen $x, $y bereits zum Anfang deines Scriptes deklarieren
[autoit]
Global $x, $y
setupX()
ConsoleWrite($x & @CRLF)
setupY()
ConsoleWrite($y & @CRLF)
; option 1
Func setupX()
$x = 5
EndFunc
; option 2
Func setupY()
$y = 2
EndFunc
Der Fehler saß im letzten Teil, habs ausgebessert mit hoffentlich genug Kommentaren ![]()
; By Hexpirator
[/autoit] [autoit][/autoit] [autoit]; Das Script soll Dateien aus dem Quellordner mit denen aus dem Zielordner
; vergleichen und neu hinzugefügten Dateien in den Zielordner kopieren.
#include "_GetIntersection.au3"
#include <File.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1_1 = GUICreate("Dateiarchivierer", 402, 293, 261, 151)
$Datei = GUICtrlCreateMenu("&Datei")
$Quelle = GUICtrlCreateMenuItem("Quellordner auswählen... (Q)", $Datei)
$Ziel = GUICtrlCreateMenuItem("Zielordner auswählen... (Z)", $Datei)
$Beenden = GUICtrlCreateMenuItem("Programm Beenden... (Strg+X)", $Datei)
$Group1 = GUICtrlCreateGroup("Option wählen:", 8, 104, 377, 81)
$Radio_loeschen = GUICtrlCreateRadio("Daten im Quellordner löschen !!!", 24, 152, 177, 17)
$Radio_behalten = GUICtrlCreateRadio("Daten im Quellordner beibehalten", 24, 128, 185, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Modus wählen:", 8, 8, 377, 81)
$Radio_einmalig = GUICtrlCreateRadio("Daten einmalig abgleichen ?", 24, 32, 161, 17)
$Radio_automat = GUICtrlCreateRadio("Daten automatisch nach vorgegebener Zeit angleichen", 24, 56, 297, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Los = GUICtrlCreateButton("Los", 8, 224, 83, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("By Hexpirator", 104, 240, 75, 17)
GUISetState(@SW_SHOW)
Dim $Form1_1_AccelTable[1][2] = [["^!p", $Ziel]]
GUISetAccelerators($Form1_1_AccelTable)
#EndRegion ### END Koda GUI section ###
Global $OpenQuell = 0
Global $OpenZiel = 0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
;-----------------------
Case $GUI_EVENT_CLOSE, $Beenden
Exit
;-----------------------
Case $Quelle
_Open_Quell()
;-----------------------
Case $Ziel
_Open_Ziel()
;-----------------------
Case $Radio_loeschen
_Radiodelete()
;-----------------------
Case $Los
_Los()
;-----------------------
EndSwitch
WEnd
;-----------------------
[/autoit] [autoit][/autoit] [autoit]Func _Open_Quell()
$OpenQuell = FileSelectFolder("Quellordner wählen", "Arbeitsplatz")
EndFunc ;==>_Open_Quell
;-----------------------
Func _Open_Ziel()
$OpenZiel = FileSelectFolder("Zielordner wählen", "Arbeitsplatz")
EndFunc ;==>_Open_Ziel
;-----------------------
Func _Radiodelete()
[/autoit] [autoit][/autoit] [autoit]$Option_Entscheidung = MsgBox(52, "Achtung!!!", "Möchten Sie die Daten im Quellordner" & @CRLF & "nach dem Kopiervorgang wirklich löchen?")
;MsgBox(0,"lesen",$Option_Entscheidung) ;beim JA-drücken -> 6 beim NEIN -> 7
If $Option_Entscheidung = 7 Then
GUICtrlSetState($Radio_loeschen, $GUI_UNCHECKED)
GUICtrlSetState($Radio_behalten, $GUI_CHECKED)
EndIf
EndFunc ;==>_Radiodelete
;-----------------------
Func _Los()
$Radio_einmalig_Status = GUICtrlRead($Radio_einmalig)
$Radio_automat_Status = GUICtrlRead($Radio_automat)
If $Radio_einmalig_Status = $Radio_automat_Status Then
MsgBox(48, "Modus", "Bitte Modus wählen.")
Return
EndIf
$Radio_behalten_Status = GUICtrlRead($Radio_behalten)
$Radio_loeschen_Status = GUICtrlRead($Radio_loeschen)
If $Radio_behalten_Status = $Radio_loeschen_Status Then
MsgBox(48, "Option", "Bitte Option wählen.")
Return
EndIf
$aFileList_Quell = _FileListToArray($OpenQuell)
[/autoit] [autoit][/autoit] [autoit]If @error = 1 Then
MsgBox(64, "Info", "Bitte wählen Sie den Quellordner")
Return
Else
_ArrayDisplay($aFileList_Quell, "Quelle")
EndIf
$aFileList_Ziel = _FileListToArray($OpenZiel)
[/autoit] [autoit][/autoit] [autoit]If @error = 1 Then
MsgBox(64, "Info", "Bitte wählen Sie den Zielordner")
Return
Else
_ArrayDisplay($aFileList_Ziel, "Ziel")
EndIf
; Unterschiede zwischen $aFileList_Quell und $aFileList_Ziel ermitteln und auflisten
$ret = _GetIntersection($aFileList_Quell, $aFileList_Ziel, 0, ' ')
$diff1 = ''
$diff2 = ''
If Not @error Then
For $i = 0 To UBound($ret) - 1
If $ret[$i][1] <> '' Then $diff1 &= $ret[$i][1] & ' ; '
If $ret[$i][2] <> '' Then $diff2 &= $ret[$i][2] & ' ; '
Next
EndIf
If $diff1 <> $diff2 Then ; Diff1 sah bei mir so aus : $diff1 = 2 ; 2.TXT ;
$aUnterschied_Quell = StringSplit($diff1, ";") ; hier trennst du nach ";", dabei kommt folgendes raus
; $aUnterschied_Quell[0] = '3'
; $aUnterschied_Quell[1] = '2 '
; $aUnterschied_Quell[2] = ' 2.TXT'
; $aUnterschied_Quell[3] = ' '
; es sind überall noch Leerzeichen vorhanden
; also nehmen wir die noch raus
For $h = 1 To Number(StringstripWS($aUnterschied_Quell[1], 8)) ; entfernt alle Leerzeichen, es wird eine Zahl erwartet, die kann keine Leerzeichen haben
FileCopy($OpenQuell & "\" & StringstripWS($aUnterschied_Quell[$h], 3), $OpenZiel & "\" & StringstripWS($aUnterschied_Quell[$h], 3), 9) ; entfernt führende und nachfolgende Leerzeichen und gibt auch den neuen Dateinamen an
If @error = 1 Then
MsgBox(0, "", "Fehler")
EndIf
Next
EndIf
;MsgBox(0, '', 'Unterschiede 1: ' & $diff1 & @LF & 'Unterschiede 2: ' & $diff2)
EndFunc ;==>_Los
[/autoit]Soweit ich weiß geht das nicht.
Einen workaround aus dem englischen Forum habe ich mal genutzt.
Mit
_GUICtrlListView_GetItemRect($hWnd, $iIndex[, $iPart = 3])
[/autoit]Die größe des Items herausfinden und dann mit
[autoit]GUICtrlCreateLabel
[/autoit]ein durchsichtiges Label drüberlegen, dann kann es nicht mehr durch direktes klicken ausgewählt werden.
Du kannst mit
[autoit]WinActive($Fenster)
[/autoit]prüfen, ob dein Fenster grade aktiviert ist. Wenn nicht, ist ja wahrscheinlich ein zweites Fenster offen, oder öffnen die sich im Hintergrund?
Ansonsten gäbe es noch die Möglichkeit, mit
[autoit]WinList
[/autoit]eine Liste aller Fenster ausgeben lassen, dann das Hauptfenster zur Liste hinzufügen und dann jedes Fenster schließen, was nicht auf der Liste steht
Ok ich versuche es mal ![]()
Ich hoffe ich habe es richtig verstanden
#include <GUIConstantsEx.au3>
Dim $avArray[11][11]
$hGui = GUICreate("Button test", 800, 800)
$top = 0
For $i = 0 To 10
$left = 0
$avArray[$i][0] = GUICtrlCreateButton("Button_"&$i, $left, $top)
For $k = 1 To 10
$left += 50
$avArray[$i][$k] = GUICtrlCreateButton("SubButton_"&$i, $left, $top)
Next
$top += 50
Next
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $avArray[0][0]
For $i = 1 To UBound($avArray, 2) - 1
GUICtrlSetState($avArray[0][$i], $GUI_HIDE)
Next
EndSwitch
WEnd
Du hast nurnoch ein Array mit den Button Control ID´s, wobei die $avArray[$i][0] Die HauptButtons sind, alle anderen Arrayitems sind dann die jeweiligen anderen Buttons.
--EDIT-- Noch die Includes eingefügt und ein Beispiel zur Abfrage eingebaut
--EDIT-- Ansonsten, wenn dir der Ansatz nicht gefällt, poste doch mal dein Script oder zumindest die wichtigen Teile, dann kann man vielleicht eine bessere Lösung finden
Hallo liebe Community,
Ich möchte zurzeit ein PDF Dokument auslesen, in dem eine Tabelle gespeichert ist.
Wenn ich alles kopiere und in ein Textdokument einfüge, bleiben zwar die Spalten bestehen (@CRLF) als Trennzeichen, die einzelnen Spalten sind aber nur mit einem Leerzeichen getrennt.
Wenn allerdings in 2 Spalten hintereinander im PDF nichts steht, ist auch nur 1 Leerzeichen vorhanden, also kann man die ursprüngliche Tabellenstruktur auch nicht mehr herstellen.
Gibt es eine Möglichkeit, den Text mit den Trennzeichen zu durchgehen?
Notfalls würde auch ein PDF2X Tool reichen, dieses dürfte aber nicht installiert werden.
Vielen Dank schonmal für die Hilfe
mit
[autoit]_GUICtrlComboBox_SetMinVisible($hCombo, 10)
[/autoit]
setzt du die Anzahl an Items, die angezeigt werden können, wenn es mehr Items sind kommen die Scrollbalken.
genau sowas, hätte ich ja auch selbst drauf kommen können...
Danke ![]()
Hier mal ein Beispiel für die Registry Variante
[autoit]RegWrite("HKEY_CURRENT_USER\Software\Test", "Test Schlüssel", "REG_DWORD", "0")
;====================================================================================
; Das hier ist was du brauchst, oben das ist nur um den Schlüssel anzulegen
$var = RegRead("HKEY_CURRENT_USER\Software\Test", "Test Schlüssel") ; prüfen, ob Schlüssel vorhanden
If $var = 0 Then ; wenn nicht
RegWrite("HKEY_CURRENT_USER\Software\Test", "Test Schlüssel", "REG_DWORD", "1") ; Schreibt 1 in die Registry, damit das andere Programm nicht den Sound abspielen kann
SoundPlay("C:\xxx\xxx\2.wav",0) ; spielt den Sound ab
EndIf
RegWrite("HKEY_CURRENT_USER\Software\Test", "Test Schlüssel", "REG_DWORD", "0")
;setzt den Wert wieder zurück, damit wieder ein Sound abgespielt werden kann
Also habe ich das richtig verstanden, das du 2 verschiedene Scripte hast, in denen der Ton laufen kann?
Dann wäre wie Alina schon geschrieben hat ein Eintrag in ne Ini oder Registry am einfachsten, den dann überprüfen, ob vorhanden, wenn ja dann nicht abspielen, wenn nicht dann abspielen
i2c du lädst die ID vom SubItem, nicht vom Index ![]()