Danke, Fehler gefunden. Hatte das Macro unter Diese Arbeitsmappe und nicht unter Module gespeichert, nice.
@rynow, dass werde ich mir mal ansehen, danke
water, 32 bit
Danke, Fehler gefunden. Hatte das Macro unter Diese Arbeitsmappe und nicht unter Module gespeichert, nice.
@rynow, dass werde ich mir mal ansehen, danke
water, 32 bit
Hallo zusammen,
ich möchte eine Excel 2010 Datei mit Macros Embedded starten. Im Forum bin ich natürlich auch fündig geworden. Leider beendet sich bei mir das Script mit folgendem Fehler in der Ausgabe:
D:\Test\test.au3 (45) : ==> The requested action with this object has failed.:
$Obj1.Application.Run("Align_Z")
$Obj1.Application.Run("Align_Z")^ ERROR
leider kenne ich mich mit der Object gesteuerten Programmierung nicht so gut aus. Meine erste Vermutung war, das es mit Excel 2010 zusammenhängt. Daher habe ich es mit einer im alten 2003-Format gespeicherten ExcelDatei versucht - das gleiche Ergebnis.
Das Excel-Macro in einem normal gestarteten Excel-Fenster macht was es soll.
Ich bin mit meinem Latein am Ende, weiß jemand woran es liegt und wie man es beheben kann?
Vielen Dank
Hallo RR04,
ich möchte mal ein kleines Statement abgeben. Meine Kritikpunkte:
- Ich würde es gut finden, wenn die Programmoberfläche skalierbar wäre und die Diashow auch Bildschirmfüllend gestartet werden könnte.
- die Auflösung der Bilder reicht mir nicht. Die Kanten sind ziemlich pixellig.
Als sich die Updatemeldung öffnete wurde mein Interesse geweckt. Als ich dann aber im Code nur ein Aufruf der Homepage fand, war ich doch etwas enttäuscht. Ich dachte schon, ich kann etwas abschauen.
Sonst aber ein nettes Programm
VG Jescho
Hallo, das ist ja ein nettes Tool .
Funktioniert super bei mir. Die Werte passen soweit.
Meine Frage: Wofür stehen diese Lampen MAIL und EIN (ich denke mal das es welche sein sollen)?
Könnte es sein - für Maileingang/neue Mail oder? Wenn ja wie kann man es den koppeln? Und die Anzeige über dem Halbkreis erschließt sich auch noch nicht.
VG Jescho
Du sagtest es handelt sich um einen Laptop, die haben doch für diese Prozedur Sondertasten. Bei mir ist das die Tastenkombination: Fn+F10.
Manchmal kann man ja schon fertige Lösungen nutzen.
Na da schließe ich mich doch gern an.
>>Herzlichen Glückwunsch auch von mir<<
Hallo TheLuBu,
nicht schlecht - aber zwei kleine Kritikpunkte habe ich:
ein Tipp auf die nötigen Includes (#Include<Date.au3>) wäre super gewesen, ersparrt die Fehlersuche. Weiterhin ist mir ein Tippfehler aufgefallen. Du hast in Zeile 24 und 26 auf einmal ein Variable $iDate verwendet, sie müßte aber $i_Date heißen.
MfG Jescho
Sieh dir mal dieses Bsp. von Oskar an.
Grüße
Danke, das werde ich mal einbauen.
Hallo Helferleins,
ich habe mal wieder ein Progblem. Ich habe aus dem wunderbaren Bsp. von Oskar eine Datenbank erstellt. Die ersten Tests liefen auch wunderbar. Als von mehreren Benutzern ein Datensatz zur gleichen Zeit eingegeben wurde, stellte ich aber fest, das nur ein Datensatz gespeichert wurde. Mache ich einen Denkfehler oder möchte ich da etwas was nur richtige Datenbanken haben? Hier mein bisheriges Werk:
#include<WindowsConstants.au3>
#include<ListViewConstants.au3>
#include<ButtonConstants.au3>
#include<GUIConstantsEx.au3>
#include<Guilistview.au3>
#include<String.au3>
#Include<Date.au3>
Global $ver = 'Ver. 0.2' ; Versionsnummer auf Label
[/autoit] [autoit][/autoit] [autoit]Global $sHeader = "Tfz|Lz-Nummer|von|nach|Zeit|Datum" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
Global $sDBFile = @ScriptDir & "\datenbank.txt" ; Pfad und Name der Datenbank-Datei
Global $iEdit = -1 ; Wert auf -1 setzen, weil _GUICtrlListView_GetSelectionMark() einen Nullbasierten Wert liefert
#Region Hauptfenster
Global $hGui = GUICreate("Ausfall Lz-Nummern", 560, 500) ; Hauptfenster erstellen
Global $hListView = GUICtrlCreateListView($sHeader, 2, 3, 420, 470, $LVS_SHOWSELALWAYS) ; Listview erstellen
Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
_GUICtrlListView_SetColumn($hLVHandle, 0, "Tfz" , 60, 0)
_GUICtrlListView_SetColumn($hLVHandle, 1, "Lz-Nummer" , 80, 0)
_GUICtrlListView_SetColumn($hLVHandle, 2, "von" , 60, 0)
_GUICtrlListView_SetColumn($hLVHandle, 3, "nach" , 60, 0)
_GUICtrlListView_SetColumn($hLVHandle, 4, "Zeit" , 60, 0)
_GUICtrlListView_SetColumn($hLVHandle, 5, "Datum" ,100, 0)
Global $hNew = GUICtrlCreateButton("Neuer Eintrag" , 435, 10, 115, 30, $BS_DEFPUSHBUTTON) ; ist Default-Push-Button (User = [Enter])
Global $hEdit = GUICtrlCreateButton("Eintrag bearbeiten" , 435, 50, 115, 30)
Global $hDel = GUICtrlCreateButton("Eintrag löschen" , 435, 90, 115, 30)
Global $hSave = GUICtrlCreateButton("Speichern" , 435, 130, 115, 30)
Global $hLoad = GUICtrlCreateButton("Neu laden" , 435, 170, 115, 30)
Global $hClose = GUICtrlCreateButton("Programm Schließen" , 457, 250, 70, 40, $BS_MULTILINE) ; Zeilenumbruch
Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 435, 444, 115, 30)
Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
#EndRegion Hauptfenster
#Region Fenster für neuen Eintrag
Global $hGuiNew = GUICreate("Neue Lz-Nummer", 636, 140, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen (größer)
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 105, 15, 90, 20); Überschriften-Label erstellen
GUICtrlSetFont(-1, 9, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 105, 30, 100, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
Next
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 140, 65, 150, 35) ; Button zum speichern
Global $hCreateSave = GUICtrlCreateButton("Speichern und schließen", 310, 65, 150, 35, $BS_DEFPUSHBUTTON) ; Button zum speichern und schließen
#EndRegion Fenster für neuen Eintrag
_GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen
[/autoit] [autoit][/autoit] [autoit]If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden
[/autoit] [autoit][/autoit] [autoit]AdlibRegister('Load', 60000) ; zum automatischen Aktualisieren 60000 ms = 1 min
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Edit() ; Daten aus dem Listview ins Formular einlesen
Load() ; aktuelle Daten aus DB laden
Case $hLoad ; User hat auf "Aktualisieren" geklickt
Load() ; aktuelle Daten aus DB laden
Case $hSave ; User hat auf "Speichern" geklickt
Save() ; geänderte Daten in DB speichern
Load() ; aktuelle Daten aus DB laden
Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then
_GUICtrlListView_DeleteItemsSelected($hLVHandle)
Save() ; geänderte Daten in DB speichern
Load() ; aktuelle Daten aus DB laden
EndIf
Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then
_GUICtrlListView_DeleteAllItems($hLVHandle)
Save() ; geänderte Daten in DB speichern
Load() ; aktuelle Daten aus DB laden
EndIf
Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
Load() ; Daten aktualiesierern
NewItem() ; Daten bearbeiten
Save() ; Daten prüfen und speichern
Load() ; Daten neu einlesen
Case $hCreateSave ; User hat auf "Speichern und schließen" im Fenster "Neuer Eintrag" geklickt
Load() ; Daten aktualiesierern
NewItem() ; Daten bearbeiten
Save() ; Daten prüfen und speichern
GUISetState(@SW_HIDE, $hGuiNew)
GUISetState(@SW_ENABLE, $hGui)
WinActivate($hGui)
Load() ; Daten neu einlesen
Case $hClose ; User hat auf "Programm schließen" geklickt
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
$iEdit = -1
For $i = 0 To UBound($aNew) - 1
GUICtrlSetData($aNew[$i], "") ; Alle Eingabefelder leeren
Next
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
WinActivate($hGui) ; und in den Vordergrund holen
EndSwitch
EndSwitch
WEnd
Func NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
ConsoleWrite('NewItem() aufgerufen' & @LF)
Dim $sTime, $sDate
Local $sItem = ""
For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
Switch $i
Case 0 ; Tfz
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Case 1 ; Lz-Nummer
If StringLen(GUICtrlRead($aNew[$i])) < 6 Then
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, StringLeft(GUICtrlRead($aNew[$i]), 5), $i) ; nur die ersten 5 Zeichen nehmen
EndIf
Case 2 ; von Bst
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, StringUpper(GUICtrlRead($aNew[$i])), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Case 3 ; nach Bst
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, StringUpper(GUICtrlRead($aNew[$i])), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Case 4 ; Zeit
If StringInStr(GUICtrlRead($aNew[$i]), ':') = 0 Then ; Doppelpunkt ist noch nicht vorhanden
$sTime = '0' & _StringInsert(GUICtrlRead($aNew[$i]), ':' , -2) ; einfügen des Doppelpunktes
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, $sTime, $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else ; Doppelpunkt bereits vorhanden
If StringLen(GUICtrlRead($aNew[$i])) = 4 Then
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, '0'&GUICtrlRead($aNew[$i]), $i) ; Uhrzeitformat vervollständigen
Else
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
EndIf
EndIf
Case 5 ; Datum
$sDate = GUICtrlRead($aNew[$i])
If StringLen($sDate) < 2 Then
$sDate = '0'&$sDate ; auffüllen des Datums
Else
$sDate = StringLeft($sDate, 2) ; nur den Tag extrahieren
EndIf
If StringRight(_NowCalcDate(), 2) = $sDate Then ; passt die eingabe zu heute?
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, _NowCalcDate(), $i)
ElseIf StringRight(_DateAdd('d', 1, _NowCalcDate()), 2) = $sDate Then ; passt die eingabe zu morgen
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, _DateAdd('d', 1, _NowCalcDate()), $i)
ElseIf StringRight(_DateAdd('d', -1, _NowCalcDate()), 2) = $sDate Then ; passt die eingabe zu gestern
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, _DateAdd('d', -1, _NowCalcDate()), $i)
Else
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; leeren Eintrag ins Listview schreiben
EndIf
EndSwitch
Else ; sonst $iEdit = -1 (neuer Eintrag)
ConsoleWrite('$i= '&$i&' >> $sItem= ' & $sItem & @LF)
Switch $i
Case 0 ; Tfz
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
Case 1 ; Lz-Nummer
If StringLen(GUICtrlRead($aNew[$i])) < 6 Then
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
Else
$sItem &= StringLeft(GUICtrlRead($aNew[$i]), 5) & "|" ; nur die ersten 5 Zeichen nehmen
EndIf
Case 2 ; von Bst
$sItem &= StringUpper(GUICtrlRead($aNew[$i])) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
Case 3 ; nach Bst
$sItem &= StringUpper(GUICtrlRead($aNew[$i])) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
Case 4 ; Zeit
If StringInStr(GUICtrlRead($aNew[$i]), ':') = 0 Then ; Doppelpunkt ist noch nicht vorhanden
If StringLen(GUICtrlRead($aNew[$i])) = 3 Then
$sTime = '0' & _StringInsert(GUICtrlRead($aNew[$i]), ':' , -2)
$sItem &= $sTime & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
Else
$sTime = _StringInsert(GUICtrlRead($aNew[$i]), ':' , -2)
$sItem &= $sTime & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
EndIf
ElseIf StringLen(GUICtrlRead($aNew[$i])) = 4 Then
$sItem &= '0' & GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
Else
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
EndIf
Case 5 ; Datum
$sDate = GUICtrlRead($aNew[$i])
If StringLen($sDate) < 2 Then
$sDate = '0'&$sDate ; auffüllen des Datums
Else
$sDate = StringLeft($sDate, 2) ; nur den Tag extrahieren
EndIf
If StringRight(_NowCalcDate(), 2) = $sDate Then ; passt die eingabe zu heute?
$sItem &= _NowCalcDate() & '|'
ElseIf StringRight(_DateAdd('d', 1, _NowCalcDate()), 2) = $sDate Then ; passt die eingabe zu morgen
$sItem &= _DateAdd('d', 1, _NowCalcDate()) & '|'
ElseIf StringRight(_DateAdd('d', -1, _NowCalcDate()), 2) = $sDate Then ; passt die eingabe zu morgen
$sItem &= _DateAdd('d', -1, _NowCalcDate()) & '|'
Else
$sItem &= '' & '|' ;
EndIf
EndSwitch
EndIf
GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
Next
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
$iEdit = -1
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
Else ; sonst $iEdit = -1 (neuer Eintrag)
If $sItem<>"||||||" Then ; bei Leeres Eingabfenster nichts
GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
EndIf
EndIf
EndFunc ;==>NewItem
Func Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
ConsoleWrite('Edit() aufgerufen' & @LF)
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
If $iEdit > -1 Then
Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
For $i = 1 To $aItem[0]
GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
Next
EndIf
EndFunc ;==>Edit
Func Load() ; Datenbank-Datei laden
ConsoleWrite('Load() aufgerufen' & @LF)
_GUICtrlListView_DeleteAllItems($hLVHandle) ; löscht alle Items des ListViews
Local $sItem
Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
_GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
While True ; Endlosschleife
$sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
WEnd
_GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
FileClose($hFile) ; Datei schließen
EndIf
EndFunc ;==>Load
Func Save() ; Datenbank-Datei speichern
ConsoleWrite('Save() aufgerufen' & @LF)
Local $sItem, $sSplit, $vTrain, $Msg
Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
$sSplit = StringSplit($sItem, '|') ; aufsplitten der Eintrags
$vTrain = _getValidTrain($sSplit[6], $sSplit[5]) ; überprüfen ob noch nicht abgelaufen
If $vTrain = 1 Then
FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
Else
$Msg = MsgBox(4,'','Der Eintrag ' & $sSplit[2] & ' ist abgelaufen oder falsch und wird gelöscht.')
If $Msg = 7 Then FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
EndIf
Next
FileClose($hFile) ; Datei schließen
ElseIf $hFile = -1 Then ; wenn das öffnen nicht erfolgreich war, dann...
MsgBox(16,'Fehler', 'Leider konnte die Datenbank nicht zum schreiben geöffnet werden.')
EndIf
EndFunc ;==>Save
Func End() ; Funktion zum Speicher und Beenden der Datenbank
ConsoleWrite('End() aufgerufen' & @LF)
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit
EndFunc ;==>End
Func _getValidTrain($sDate, $sTime) ; prüft die Gültigkeit des Eintrages
;ReturnWert 0 = Zug zu alt
;ReturnWert 1 = Zug noch gültig
;Returnwert 2 = Falsches Datumsformat
Dim $svalidityTime = '1200' ; angabe in Min
$sDatetime = $sDate & ' ' & $sTime ; zusammenfassen der Var
If _DateIsValid($sDatetime) Then ; prüft auf Gültigkeit
Dim $iDateCalc = _DateDiff('n', $sDatetime, _NowCalc())
;~ ConsoleWrite('$iDateCalc= ' & $iDateCalc & @LF) ; mur zu testzwecken
If $iDateCalc > $svalidityTime Then ; Abfrage
Return 0
Else
Return 1
EndIf
Else
Return 2
EndIf
EndFunc ; ==>_getValidTrain
VG Jescho
Danke Fehler sind da um gemacht zu werden
Hallo miteinander, woher kommt der Unterschied??? Bei der zweiten Variante wird für die aktuelle Kalenderwoche ein falscher Wert zurückgegeben.
So ist es richtig:
#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('kw ' & _WeekNumberISO() & @LF)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('kw für letzte Woche ist: ' & _KW_IF(2)&@LF)
ConsoleWrite('kw für diese Woche ist: ' & _KW_IF(0)&@LF)
ConsoleWrite('kw für nächste Woche ist: ' & _KW_IF(1)&@LF)
ConsoleWrite('Fehler: ' &@error&@LF)
Func _KW_IF($kw)
;~ ConsoleWrite('Wert $kw= ' & $kw & @LF)
If $kw = 0 Then ;aktuelle Woche
$ret = _WeekNumberISO()
ElseIf $kw = 1 Then ;nächste Woche
$s_string =StringSplit(_DateAdd('d', 7, _NowCalcDate()), '/')
$ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
ElseIf $kw = 2 Then ;letzte Woche
$s_string =StringSplit(_DateAdd('d', - 7, _NowCalcDate()), '/')
$ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
Else
MsgBox(16,'','Es wurde kein gültiger Parameter übergeben.')
EndIf
Return $ret
EndFunc
So ist es falsch - warum:
#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('kw ' & _WeekNumberISO() & @LF)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('kw für letzte Woche ist: ' & _KW_SWITCH(2)&@LF)
ConsoleWrite('kw für diese Woche ist: ' & _KW_SWITCH(0)&@LF)
ConsoleWrite('kw für nächste Woche ist: ' & _KW_SWITCH(1)&@LF)
ConsoleWrite('Fehler: ' &@error&@LF)
Func _KW_SWITCH($kw)
;~ ConsoleWrite('Wert $kw= ' & $kw & @LF)
Switch $kw
Case $kw = 0 ;aktuelle Woche
$ret = _WeekNumberISO()
Case $kw = 1 ;nächste Woche
$s_string =StringSplit(_DateAdd('d', 7, _NowCalcDate()), '/')
$ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
Case $kw = 2 ;letzte Woche
$s_string =StringSplit(_DateAdd('d', - 7, _NowCalcDate()), '/')
$ret = _WeekNumberISO($s_string[1], $s_string[2], $s_string[3])
Case Else
MsgBox(16,'','Es wurde kein gültiger Parameter übergeben.')
EndSwitch
Return $ret
EndFunc
@sillyboy:
die Anfrage war auf die Funktion _IECreate ausgerichtet. Die Info mit dem ständigen Aktivieren hatte ich auch schon gegoogelt.
aber trotzdem danke - so ein Login-script ist immer gut (ich versuche mich gerade mal wieder in die IE-Func einzulesen)
misterspeed:
der Tip mit dem englischen Forum war gut - das werde ich mir mal genauer ansehen, Danke
Hallo Leute,
kann man mit _IECreate den IE auch im Privaten Modus Starten? Also ich habe nichts gefunden.
Meine Versuche:
#include <IE.au3>
$Link = 'https://service.gmx.net/de/cgi/g.fcgi/organizer/login'
;~ ;InPrivate geht
Run('"C:\Program Files (x86)\Internet Explorer\iexplore.exe" -private ' & $Link)
;InPrivate geht nicht
$oIE = _IECreate ($Link)
sorry, das Post war zu kurz. "geht leider nicht." bezog sich auf: Der Registrierung-Editor ist gesperrt. Aktueller Stand:
#include <Array.au3>
#include <Constants.au3>
#Include <String.au3>
Local $RegPath1 = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Common\Smart Tag"
Local $save_file = 'D:\Sicherung\Test.dat'
_EnumRegKey($RegPath1, 0, $save_file)
;========================================================================================
; Function Name: _EnumRegKey($HKEY, $prm, [$file])
; Description: Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Parameter(s): 0 = Ausgabe auf Console
; 1 = Ausgabe in Datei
; nur bei 1 path der Sicherungsdatei
; Return Value(s): Ausgabe auf Console
; Ausgabe in Sicherungsdatei
; Author(s): JeScho ([email='jescho@autoit.de'][/email])
; Großvater (Unterst. im Forum)
;========================================================================================
Func _EnumRegKey($RegPath, $prm ,$file)
;prm Gültigkeit prüfen
If $prm = 0 Then
ElseIf $prm = 1 And $file <> '' Then
ConsoleWrite('richtige Prm,' & @LF)
Else
ConsoleWrite('Falscher Prm,' & @LF)
Exit
EndIf
$aReg = _EnumRegVal($RegPath)
If $prm = 0 Then ConsoleWrite(@LF)
If $prm = 0 Then ConsoleWrite('[' & $RegPath & ']' & @LF)
For $i = 1 To UBound($aReg) -1
;~ If $prm = 0 Then ConsoleWrite('"' & $aReg[$i][0] & '"=' & $aReg[$i][1] & $aReg[$i][2] & @LF)
If $prm = 0 Then ConsoleWrite('"' & $aReg[$i][0] & '"=' & $aReg[$i][1] &':' & $aReg[$i][2] & @LF)
Next
$REK = RegEnumKey($RegPath,1)
If $REK <> '' Then
For $i = 1 To 100
$REK = RegEnumKey($RegPath,$i)
If @error Then ExitLoop
_EnumRegKey($RegPath & '\' & $REK, 0, $save_file);recursiver Aufruf
Next
EndIf
EndFunc ;==> _EnumRekKey
Func _EnumRegVal($RegPath)
;~ Local $RegTypes[8] = ["REG_NONE", '', "REG_EXPAND_SZ", "hex:", "dword:", '', '', "REG_MULTI_SZ"]
Local $RegTypes[8] = ['REG_NONE', 'REG_SZ', 'REG_EXPAND_SZ', 'REG_BINARY', 'REG_DWORD', '', '', 'REG_MULTI_SZ']
Local $RegValue = ""
Local $Instance = 1
Local $aResult[256][3] = [[0, 0, 0]]
Local $Reg = ""
Local $Ext = ""
While True
$RegValue = RegEnumVal($RegPath, $Instance)
If @error Then ExitLoop
$Reg = RegRead($RegPath, $RegValue)
If @error Then ExitLoop
$Ext = @extended
If $Ext = $REG_BINARY Then $Reg = StringToBinary(BinaryToString($Reg))
$aResult[0][0] = $Instance
$aResult[$Instance][0] = $RegValue
$aResult[$Instance][1] = $RegTypes[$Ext]
$aResult[$Instance][2] = $Reg
$Instance += 1
WEnd
ReDim $aResult[$Instance][3]
Return $aResult
EndFunc
Die Ausgabe auf die Console passt schon. Jetzt soll aber die Ausgabe in eine Datei gehen, und dann nach dem Userlogin synchronisiert werden.
Du sagst mit einer Schleife ist es zu langsam - für Verbesserungen bin ich immer offen.
Gruß Jescho
geht leider nicht
Moin,
auch wenn sich das System Registry sich mir noch nicht ganz erschlossen hat so ist doch etwas Licht ins Dunkle gelangt. Ich habe den Code auch schon erweitert, so dass er mir den kompletten Zweig ausliest. Vielen Dank erstmal. Was mich noch interressiert, ich möchte gerne einen kompletten Reg-Zweig als Datei sichern und auf anderen Rechnern wiederherstellen. Muss ich dabei beim auslesen/speichern/wiederherstellen etwas besonderes beachten?
Danke.
Jedoch bleibt noch die Frage mit den hexadezimalen Wert. Warum wird im Export vom Regitrierungs-Editors überhaupt der hexadetimale Wert gespeichert?
Hallo Leute,
was mache ich falsch? Wenn ich die Funktion "_GetRegValues($HKEY)" von BugFix "Registry-Funktionen per Objekt " nutze erhalte ich bei den meisten Einträgen keinen Wert. Hier der zusammengestrickter Code:
#include<Array.au3>
Local $regpath = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Common\Smart Tag'
;~ Local $regpath = 'HKEY_CURRENT_USER\Software\AutoIt v3\Au3Info'
; Versuch 1
Local $ar = _GetRegValues($regpath) ; Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
If IsArray($ar) Then
_ArrayDisplay($ar, 'Values von ' & $regpath)
Else
MsgBox(0, '', 'Fehler')
EndIf
; bringt fast keine Werte unter Col2
; --> was mache ich falsch?
; Versuch 2
$REV = RegEnumVal($regpath, 1)
$RR = RegRead($regpath, $REV)
If @error Then
ConsoleWrite('Fehler: ' & @error & @LF)
Else
ConsoleWrite($REV & ':' & $RR & @LF)
EndIf
; bringt nur den dezimalen Wert
; --> wie erhalte ich den hexadezimalen Wert?
; --> aus der Hilfe werde ich in diesem Fall nicht schlau
; Versuch 3
$REV = RegEnumVal($regpath, 1)
$RRB = _RegReadBinary($regpath, $REV)
If @error Then
ConsoleWrite('Fehler: ' & @error & @LF)
Else
ConsoleWrite($REV & ':' & $RRB & @LF)
EndIf
; den Wert kann ich garnicht deuten
; --> auch hier möchte ich den hexadezimalen Wert wie ihn der Regiestrierungs-Editor ausgibt
;========================================================================================
; Function Name: _GetRegSubKeys($HKEY)
; Description: Ermittelt die Unterschlüssel für den übergebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array mit den Unterschlüsseln
; Fehler Leerstring (keine Unterschlüssel vorhanden oder Schlüssel existiert nicht)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegSubKeys($HKEY)
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $arrSubKeys = '', $subkey
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
$oReg.EnumKey ($HKEY, $strKeyPath, $arrSubKeys)
Return $arrSubKeys
EndFunc ;==>_GetRegSubKeys
;========================================================================================
; Function Name: _GetRegRights($HKEY)
; Description: Ermittelt die Rechte des Abfragenden für den übergebenen Schlüssel
; Parameter(s): $HKEY der zu prüfende Registryschlüssel
; Return Value(s): String mit Auflistung der Rechte:
; Q Key Query Value
; S Key Set Value
; C Key Create Sub Key
; D Delete
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegRights($HKEY)
Local $bHasAccessRight, $sRights = ''
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0001, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'Q'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0002, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'S'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0004, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'C'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x00010000, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'D'
Return $sRights
EndFunc ;==>_GetRegRights
;========================================================================================
; Function Name: _GetRegValues($HKEY)
; Description: Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array[i][0] = Name
; Array[i][1] = Typ
; Array[i][2] = Wert
; Fehler Leerstring (Schlüssel existiert nicht oder ist ohne Einträge)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegValues($HKEY)
Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Local $arrValueNames, $arrValueTypes, $strValue
$oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
$OEvent = ObjEvent($oReg, "EnumValues")
If Not IsArray($arrValueNames) Then Return ''
Local $arOut[UBound($arrValueNames)][3]
For $i = 0 To UBound($arrValueNames) -1
$arOut[$i][0] = $arrValueNames[$i]
Switch $arrValueTypes[$i]
Case 1
$arOut[$i][1] = 'REG_SZ'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 2
$arOut[$i][1] = 'REG_EXPAND_SZ'
$oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 3
$arOut[$i][1] = 'REG_BINARY'
$oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 4
$arOut[$i][1] = 'REG_DWORD'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 7
$arOut[$i][1] = 'REG_MULTI_SZ'
$oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
EndSwitch
$arOut[$i][2] = $strValue
Next
Return $arOut
EndFunc ;==>_GetRegValues
Func MyErrFunc()
Return
Endfunc
Func _RegReadBinary($KEY, $VALUE)
If $KEY = '' Or $VALUE = '' Then Return SetError(4,0,1)
Local $reg = RegRead($KEY, $VALUE)
Local $err = @error, $ext = @extended
If $err Then Return SetError($err,0,1)
If $ext <> 3 Then Return $reg
Local $val = ''
For $i = 1 To StringLen($reg) - 2 Step 2
$tmp = BinaryToString('0x' & StringMid($reg, $i, 2))
If $tmp <> "" Then
$val = $val & $tmp
EndIf
Next
Return $val
EndFunc ;==>_RegReadBinary
Des weiteren habe ich mit den Standard-Functionen versucht weiter zu kommen, jedoch habe ich es bis jetzt nicht geschaft den hexadezimalen Wert zu erhalten. Auch mit der Function _RegReadBinary($KEY, $VALUE)von BugFix bin ich nicht weitergekommen. Zur Konntrolle, wass ich erwarte habe ich einen Export aus dem Registrierungs-Editor ausgeführt. Der Export sieht so aus:
[HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart Tag]
"migratedBitValues"=hex:01,00,00,00
[HKEY_CURRENT_USER\Software\AutoIt v3\AU3Info]
"WinX"=dword:00000200
"WinY"=dword:00000000
"WinW"=dword:00000200
"WinH"=dword:00000258
"ColorMode"=dword:00000001
"CoordMode"=dword:00000001
"HighlightControls"=dword:00000000
"Magnify"=dword:00000000
"AlwaysOnTop"=dword:00000001
"HighlightColor"=dword:00000000
"LastTab"=dword:00000006
Danke für die schnellen Antworten. Ich werde mir das mal in Ruhe anschauen. Mit dem Spoiler habe ich meinen Fehler schon gesehen - danke
Edit: das wars - Danke