1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Neklor

Beiträge von Neklor

  • Tastatur Hardware - strg alt - vmware verlassen

    • Neklor
    • 5. Mai 2020 um 11:51
    Code
    Send("^!")

    Funktioniert das?

  • Hintergrundfarbe in einem GUICtrlCreateTab ändern

    • Neklor
    • 5. Mai 2020 um 10:06

    Ich denke das hier hilft: https://www.autoitscript.com/forum/topic/137829-gui-tab-color/

  • Microphone Mute Status abfragen und setzen

    • Neklor
    • 5. Mai 2020 um 09:48

    Hi,

    ich suche nach einem Befehl oder ähnlichem, um mit einem AutoIT Script zu prüfen ob das aktive Mikrofon stumm geschaltet ist (in Windows 10).

    Ich habe aber leider nicht viel finden können, am dichtesten dran scheint mir dieses Script zu sein: https://www.autoitscript.com/forum/topic/16…enable-disable/

    Leider listet das Script aber nur einige Devices auf, welche nicht nach meinen Micros aussehen und gemuted wird auch nichts.

    Ich habe auch Infos gefunden, dass man den Status in der Registry sehen und ändern kann:

    Code
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture

    Aber egal was ich mache, da ändert sich nichts und eine Änderung hat auch keinen Effekt.

    Unter Systemsteuerung --> Sound --> Aufnahme --> Microphone --> Pegel kann man auf das Lautpsrecher Symbol klicken, dann ist es gemuted. Leider konnte ich mit Process Explorer nicht rausfinden was da im Hintergrund passiert. Nach dem klick ist das Symbol durchgestrichen und zeigt den Mute Zustand an, aber offenbar auch nicht generell.

    pasted-from-clipboard.png

    Drücke ich die Mute Taste an meinem Headset, änder sich dieses Symbol nicht, ich bin aber gemuted. Betätige ich den eben genannten Knopf, muted sich aber auch mein Headset (Jabra Engage 75).

    Kennt jemand eine Möglichkeit den Mute Status aller (oder auch nur des aktiven) Mikros abzufragen und zu ändern?

  • Umlaut Problem

    • Neklor
    • 23. März 2014 um 18:23
    Zitat von misterspeed

    Ich würde der Funktion aber einen anderen Namen geben, denn wenn du für etwas anderes nochmal die file.au3 einbinden musst wirst du vermutlich Probleme bekommen wenn du eine eigene Funktion mit gleichem Namen deklariert hast.


    Ja, guter Hinweis, vermutlich würde ich das nach einiger Zeit vergessen :D
    Ich hab das ganze Script nochmal überarbeitet, war irgendwie noch recht Fehleranfällig.
    Ich hab das auch oben mal geändert, falls es sich jemand kopiert.

  • Umlaut Problem

    • Neklor
    • 23. März 2014 um 15:08
    Zitat von misterspeed

    Dann verwende eben stattdessen die nativen Funktionen

    [autoit]


    fileopen
    fileread
    filewrite

    [/autoit]

    und gib den entsprechenden Modus (UTF-8 ohne BOM) vor.


    EDIT:

    Oder wenn es unbedingt aus Faulheit die Filewritetoline Funktion sein soll schau in die file.au3, such dir die Funktion raus und erstell dir eine angepasste Kopie davon.


    Hier einfach die Funktionsaufrufe für fileopen, fileread , filewrite entsprechend abändern und dann als _MY_filewritetoline() in dein Script einbinden...

    Spoiler anzeigen
    [autoit]


    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _FileWriteToLine
    ; Description ...: Writes text to a specific line in a file.
    ; Syntax.........: _FileWriteToLine($sFile, $iLine, $sText[, $fOverWrite = 0])
    ; Parameters ....: $sFile - The file to write to
    ; $iLine - The line number to write to
    ; $sText - The text to write
    ; $fOverWrite - If set to 1 will overwrite the old line
    ; |If set to 0 will not overwrite
    ; Return values .: Success - 1
    ; Failure - 0
    ; @Error - 0 = No error
    ; |1 = File has less lines than $iLine
    ; |2 = File does not exist
    ; |3 = Error when opening file
    ; |4 = $iLine is invalid
    ; |5 = $fOverWrite is invalid
    ; |6 = $sText is invalid
    ; Author ........: cdkid
    ; Modified.......: partypooper, MrCreatoR
    ; Remarks .......: If _FileWriteToLine is called with $fOverWrite as 1 and $sText as "", it will delete the line.
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _FileWriteToLine($sFile, $iLine, $sText, $fOverWrite = 0)
    If $iLine <= 0 Then Return SetError(4, 0, 0)
    If Not IsString($sText) Then
    $sText = String($sText)
    If $sText = "" Then Return SetError(6, 0, 0)
    EndIf
    If $fOverWrite <> 0 And $fOverWrite <> 1 Then Return SetError(5, 0, 0)
    If Not FileExists($sFile) Then Return SetError(2, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $sRead_File = FileRead($sFile)
    Local $aSplit_File = StringSplit(StringStripCR($sRead_File), @LF)
    If UBound($aSplit_File) < $iLine Then Return SetError(1, 0, 0)
    Local $hFile = FileOpen($sFile, $FO_OVERWRITE)
    If $hFile = -1 Then Return SetError(3, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $sRead_File = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aSplit_File[0]
    If $i = $iLine Then
    If $fOverWrite = 1 Then
    If $sText <> '' Then $sRead_File &= $sText & @CRLF
    Else
    $sRead_File &= $sText & @CRLF & $aSplit_File[$i] & @CRLF
    EndIf
    ElseIf $i < $aSplit_File[0] Then
    $sRead_File &= $aSplit_File[$i] & @CRLF
    ElseIf $i = $aSplit_File[0] Then
    $sRead_File &= $aSplit_File[$i]
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    FileWrite($hFile, $sRead_File)
    FileClose($hFile)

    [/autoit] [autoit][/autoit] [autoit]

    Return 1
    EndFunc ;==>_FileWriteToLine

    [/autoit]
    Alles anzeigen


    Super, Danke!
    Darauf hätte ich ja auch kommen können :D

    Ich habe jetzt erstmal mein Script auf die AutoIt Beta angepasst, da hat sich offenbar was geändert. Ich habe dann _FileReadToArray in FileReadToArray geändert, das funzt.
    Der Fehler entsteht aber nur beim speichern, also habe ich mir _FileWritToLine ins Script geholt und ein paar Tests damit gemacht.

    Hier liegt das Problem:

    [autoit]

    Local $hFileOpen = FileOpen($sFilePath, FileGetEncoding($sFilePath) + $FO_OVERWRITE)

    [/autoit]

    Offenbar funktioniert an der Stelle kein FileGetEncoding, hat wohl niemand getestet...

    Ich habe es geändert in:

    [autoit]

    Local $hFileOpen = FileOpen($sFilePath, $FO_UTF8_NOBOM + $FO_OVERWRITE)

    [/autoit]

    Das klappt jetzt :)

    Ich habe das Script oben jetzt gegen die funktionierende Version ausgetauscht, vieleicht hilft das ja nochmal jemanden bei so einem Problem ;)

  • Umlaut Problem

    • Neklor
    • 23. März 2014 um 13:11
    Zitat von chesstiger

    Eventuell kannst du mit

    [autoit]


    StringToBinary
    BinaryToString

    [/autoit]


    etwas erreichen.

    Gruß

    Hi,
    danke für den Tipp, aber offenbar ensteht das Problem beim speichern der Datei:

    [autoit]

    _FileWriteToLine($file2, $start2, '<p class="pcont2">' & $asplit[1] & '</p><br />', 0)

    [/autoit]

    Hier wird die Datei zu ANSI. Wenn ich mir mal FileOpen anschaue, so kann man da definieren, wie die Daten verarbeite werden sollen.
    Leider funktioniert _FileWriteToLine wohl nur mit dem Dateipfad und man kann keine Kodierung angeben. Hat noch jemand eine Idee zur Lösung?

  • Umlaut Problem

    • Neklor
    • 23. März 2014 um 12:42

    Hi,
    danke schonmal für die bisherige Hilfe, ich gebe zu das ist schwer zu verstehen, daher erkläre ich jetzt mal anhand von Screenshots was passiert.

    Datei wir mit Expression Web 4 oder Notepad++ bearbeitet. Ergebnis:
    [Blockierte Grafik: http://www.neklor.de/img/autoit/manuell.jpg]

    Dann die bearbeitung mit dem Script. Ergebnis:
    [Blockierte Grafik: http://www.neklor.de/img/autoit/tool.jpg]

    Das Problem entsteht aber schon lokal, wenn ich die Datei mit Expression Web 4 öffne, sieht man das Problem, alle Umlaute sind durch ? ersetzt.
    Ersetze ich diese wieder gegen Umlaute uns speichere das ganze, dann ist nach dem Upload alles OK.
    Ansicht im Expression web 4:
    [Blockierte Grafik: http://www.neklor.de/img/autoit/quellcode_expressionweb4.jpg]

    Öffne ich die durchs Script veränderte Datei statt im Expression Web 4 im Notepad++, so sehen alle Umlaute normal aus:
    [Blockierte Grafik: http://www.neklor.de/img/autoit/quellcode_notepadplus.jpg]

    Ich vermute also, es ändert sich was am Dateiformat selbst...
    Im Editor von Windows sieht übrigens auch alles normal aus ;)

    Ich habe beide Dateien verglichen, der Inhalt ist identisch, aber im Notepad++ wird das Problem sichtbar:
    Die unbearbeitete Datei hat die Kodierung: UTF-8 ohne BOM
    Die durchs Script bearbeitete Datei hat die Kodierung: ANSI
    Wie kriege ich die mit Autoit wieder ins richtige Format?

  • Umlaut Problem

    • Neklor
    • 22. März 2014 um 23:06

    So, ich habe mal aufgeräumt und in der php Datei mal was mit Umlaut ergänzt, sowie das charset in php definiert.
    Mein Problem ist, dass es ja sonst funktioniert.
    Bearbeite ich die Datei normal und lade sie dann hoch, brauch ich kein &ouml; usw. definieren, dass umzubauen wäre ein imenser Aufwand.
    Wenn ich aber die Datei mit dem Script bearbeite, so sind zwar noch alle Umlaute normal, wenn ich diese dann aber hochlade passt es nicht.
    Ich verwende extra utf-8 aber offenbar reicht die definition im quelltext nicht aus, bei php muss die Datei selbst im richtigen Format sein.
    Leider verändert das Script etwas an der Datei und ich weiss nicht was es ist.

    Ich hoffe ich habe es nun besser erklärt und ihr könnt mir helfen :D

  • Umlaut Problem

    • Neklor
    • 22. März 2014 um 20:05

    Hi,
    ich habe für nen Kumpel mal fix ein Script geschrieben mit der er nen Teil seiner Webseite Updaten kann.
    Eigentlich nicht schwer, leider werden mir irgenwo die Umlaute zerhackt. Ich vermute bei _FileWriteToLine
    Kennt jemand eine Lösung für das Problem?

    Es gibt noch ein zweites Problem, wenn jemand zufällig den Fehler findet bitte melden, ansonsten such ich den später selbst:
    Nach einer aktualisierung verdoppelt sich beim nächsten mal der letzte Eintrag, starte ich das Script neu passiert das nicht.

    Ansonsten funktioniert das Script einwandfrei ;)

    Spoiler anzeigen
    [autoit]


    ;*****************************************
    ;Erstellt mit ISN AutoIt Studio v. 0.95 BETA
    ;*****************************************
    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    #include "Forms\gui.isf"
    ; -- Created with ISN Form Studio 2 for ISN AutoIt Studio -- ;
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiButton.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <FTPEx.au3>
    Global $aArray
    Global $start
    Global $ende
    Global $fpath = @ScriptDir & "\ergebnisse.php"
    Global $rfile = 'ergebnisse.php'
    $server = ' '
    $username = ' '
    $pass = ' '
    $gui = GUICreate("Update Ergebnisse",722,523,-1,-1,-1,-1)
    $btn_hoch = GUICtrlCreateButton("Hoch",588,401,100,30,-1,-1)
    $btn_runter = GUICtrlCreateButton("Runter",588,450,100,30,-1,-1)
    Global $liste = GUICtrlCreatelistview("Titel |Text ",40,190,534,309,-1,512)
    $inp_titel = GUICtrlCreateInput("",80,57,290,21,-1,512)
    GUICtrlCreateLabel("Titel:",50,60,26,15,-1,-1)
    GUICtrlSetBkColor(-1,"-2")
    GUICtrlCreateLabel("Text:",50,100,24,15,-1,-1)
    GUICtrlSetBkColor(-1,"-2")
    GUICtrlSetStyle($liste, $LVS_REPORT, $LVS_EX_FULLROWSELECT)
    $inp_text = GUICtrlCreateInput("",80,97,289,20,-1,512)
    $btn_add = GUICtrlCreateButton("Hinzufügen",406,53,100,30,-1,-1)
    $btn_upload = GUICtrlCreateButton("Upload",590,140,100,30,-1,-1)
    $btn_del = GUICtrlCreateButton("Löschen",589,320,100,30,-1,-1)
    $btn_nxline = GUICtrlCreateButton("Nächste Zeile <br />",407,94,109,30,-1,-1)
    GUISetState(@SW_SHOW,$gui)
    ;TODO: EDIT Funktion erstellen, Fehler nach dem Upload beheben (erneuter Import?)

    [/autoit] [autoit][/autoit] [autoit]

    $down = _FTP_Transfer ($server, $username, $pass, $fpath, $rfile, 0)
    If $down Then
    MsgBox(16, "Fehler", "Es ist ein Fehler beim Download aufgetreten!")
    Exit
    EndIf
    _importData ()
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_add
    GUICtrlCreateListViewItem(GUICtrlRead($inp_titel) & "|" & GUICtrlRead($inp_text), $liste)
    Case $btn_del
    _GUICtrlListView_DeleteItemsSelected($liste)
    Case $btn_nxline
    $tmptxt = GUICtrlRead($inp_text)
    GUICtrlSetData($inp_text, $tmptxt & "<br />")
    GUICtrlSetState($inp_text, $GUI_FOCUS)
    Send("{RIGHT}")
    Case $btn_runter
    _GUICtrlListView_MoveItems($gui, $liste,1)
    Case $btn_hoch
    _GUICtrlListView_MoveItems($gui, $liste,-1)
    Case $btn_upload
    GUICtrlSetState ($btn_upload, $GUI_Disable)
    _writeData ()
    $up = _FTP_Transfer ($server, $username, $pass, $fpath, $rfile, 1)
    GUICtrlSetState ($btn_upload, $GUI_Enable)
    If $up Then
    MsgBox(16, "Fehler", "Es ist ein Fehler beim Upload aufgetreten!")
    Else
    MsgBox(0, "Erfolg", "Die Übertragung wurde erfolgreich beendet!")
    EndIf
    MsgBox(0, "Hinweis", "Aufgrund eines noch bestehenden Fehlers, wird das Programm jetzt beendet! Für eine weitere Anpassung starten Sie das Programm bitte neu!")
    Exit
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _importData()
    $tmpFile = FileOpen($fpath, FileGetEncoding($fpath) + $FO_READ)
    $aArray = FileReadToArray($tmpFile)
    If @error Then
    MsgBox(0, "", "Fehler beim einlesen der Datei. Fehler: " & @error)
    Exit
    EndIf
    ; Start und Ende finden
    $start = _ArraySearch($aArray, "<!--Start-->",0, 0, 0, 1)
    If @error Then
    MsgBox(0, "", "Fehler beim der Suche nach dem Startpunk. Fehler: " & @error)
    Exit
    EndIf
    $ende = _ArraySearch($aArray, "<!--Ende-->",0, 0, 0, 1)
    If @error Then
    MsgBox(0, "", "Fehler beim der Suche nach dem Endpunk. Fehler: " & @error)
    Exit
    EndIf
    For $i = $start To $ende
    If stringinstr($aArray[$i], '<p class="pcont2">') Then
    $tmp = StringTrimLeft ($aArray[$i], 18)
    $tmp = StringTrimRight($tmp, 10)
    $tmp2 = StringTrimRight($aArray[$i+1], 6)
    GUICtrlCreateListViewItem($tmp & "|" & $tmp2, $liste)
    Endif
    Next
    FileClose($tmpFile)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _writeData ()
    Local $asplit
    $delanzahl = ($ende) - ($start) - 1
    For $i = 1 to $delanzahl
    _FileWriteToLineExt($fpath, $start+2, "", 1)
    If @error Then
    MsgBox(0, "", "Fehler beim löschen der Zeilen in der Datei. Fehler: " & @error)
    Exit
    EndIf
    Next
    Local $itemc = _GUICtrlListView_GetItemCount ($liste)
    $start2 = $start+2
    For $i = 1 To $itemc
    $tmp = _GUICtrlListView_GetItemTextString ($liste, $i-1)
    $asplit = StringSplit($tmp, "|")
    _FileWriteToLineExt($fpath, $start2, '<p class="pcont2">' & $asplit[1] & '</p><br />', 0)
    If @error Then
    MsgBox(0, "", "Fehler beim schreiben in die Datei. Fehler: " & @error)
    Exit
    EndIf
    $start2 +=1
    _FileWriteToLineExt($fpath, $start2, $asplit[2] & '<br />', 0)
    If @error Then
    MsgBox(0, "", "Fehler beim schreiben in die Datei. Fehler: " & @error)
    Exit
    EndIf
    $start2 +=1
    _FileWriteToLineExt($fpath, $start2, '<hr class="hr1" /> ', 0)
    If @error Then
    MsgBox(0, "", "Fehler beim schreiben in die Datei. Fehler: " & @error)
    Exit
    EndIf
    $start2 +=1
    Next

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _FTP_Transfer()
    ; Description: Download oder Upload einer Datei von/auf einen FTP Server. (Download or upload a file from/to FTP server.)
    ;
    ; Parameter(s): $sServer - Serveradresse
    ; $sUser - FTP Benutzer
    ; $sPass - FTP Passwort
    ; $sFile - Dateiname mit Pfad, der lokalen Datei. Z.B.: @ScriptDir & "\test.php"
    ; $sRemoteFile - Dateiname auf dem Server ohne Pfad mit Erweiterung. Z.B.: test.php
    ; $iMode - Angabe des Modus:
    ; 0 Download Modus
    ; 1 Upload Modus
    ;
    ; Requirement(s): #include <FTPEx.au3>
    ;
    ; Return Value(s): Erfolg (On success) - 0
    ; Fehler (On failure) - 1
    ;
    ; Author(s): C.Krogmann (Neklor)
    ;===============================================================================
    Func _FTP_Transfer ($sServer, $sUser, $sPass, $sFile, $sRemoteFile, $iMode)
    Local $iErr = 0
    Local $hOpen = _FTP_Open('MyFTP Control')
    If @error Then
    MsgBox(16, "Fehler", "FTP Session kann nicht gestartet werden. Fehler: " & @error)
    $iErr = 1
    EndIf
    Local $hConn = _FTP_Connect($hOpen, $sServer, $sUser, $sPass)
    If @error Then
    MsgBox(16, "Fehler", "Verbindung zum FTP Server nicht möglich. Fehler: " & @error)
    $iErr = 1
    EndIf
    If $iMode = 0 Then
    _FTP_FileGet($hConn, $sRemoteFile, $sFile)
    If @error Then
    MsgBox(16, "Fehler", "Fehler beim Download der Datei. Fehler: " & @error)
    $iErr = 1
    EndIf
    ElseIf $iMode = 1 Then
    _FTP_FileDelete ($hConn, $sRemoteFile)
    If @error Then
    MsgBox(16, "Fehler", "Löschen der Datei auf dem Server nicht möglich: " & @error)
    $iErr = 1
    EndIf
    _FTP_FilePut ($hConn, $sFile, $sRemoteFile)
    If @error Then
    MsgBox(16, "Fehler", "Ein Fehler ist bei der Übertragung aufgetreten: " & @error)
    $iErr = 1
    EndIf
    Else
    MsgBox(16, "Fehler", "Ungültiger Modus!")
    Local $hFtpc = _FTP_Close($hConn)
    Local $hFtpo = _FTP_Close($hOpen)
    Exit
    EndIf

    Local $hFtpc = _FTP_Close($hConn)
    Local $hFtpo = _FTP_Close($hOpen)
    Return $iErr
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _GUICtrlListView_MoveItems()
    ; Description: Move selected item(s) in ListView Up or Down.
    ;
    ; Parameter(s): $hWnd - Window handle of ListView control (can be a Title).
    ; $vListView - The ID/Handle/Class of ListView control.
    ; $iDirection - [Optional], define in what direction item(s) will move:
    ; 1 (default) - item(s) will move Next.
    ; -1 item(s) will move Back.
    ; $sIconsFile - Icon file to set image for the items (only for internal usage).
    ; $iIconID_Checked - Icon ID in $sIconsFile for checked item(s).
    ; $iIconID_UnChecked - Icon ID in $sIconsFile for Unchecked item(s).
    ;
    ; Requirement(s): #include <GuiListView.au3>, AutoIt 3.2.10.0.
    ;
    ; Return Value(s): On seccess - Move selected item(s) Next/Back.
    ; On failure - Return "" (empty string) and set @error as following:
    ; 1 - No selected item(s).
    ; 2 - $iDirection is wrong value (not 1 and not -1).
    ; 3 - Item(s) can not be moved, reached last/first item.
    ;
    ; Note(s): * This function work with external ListView Control as well.
    ; * If you select like 15-20 (or more) items, moving them can take a while :( (depends on how many items moved).
    ;
    ; Author(s): G.Sandler a.k.a CreatoR (<a href='http://creator-lab.ucoz.ru' class='bbc_url' title='External link' rel='nofollow external'>http://creator-lab.ucoz.ru</a>)
    ;===============================================================================
    Func _GUICtrlListView_MoveItems($hWnd, $vListView, $iDirection=1, $sIconsFile="", $iIconID_Checked=0, $iIconID_UnChecked=0)
    Local $hListView = $vListView
    If Not IsHWnd($hListView) Then $hListView = ControlGetHandle($hWnd, "", $hListView)

    Local $aSelected_Indices = _GUICtrlListView_GetSelectedIndices($hListView, 1)
    If UBound($aSelected_Indices) < 2 Then Return SetError(1, 0, "")
    If $iDirection <> 1 And $iDirection <> -1 Then Return SetError(2, 0, "")

    Local $iTotal_Items = ControlListView($hWnd, "", $hListView, "GetItemCount")
    Local $iTotal_Columns = ControlListView($hWnd, "", $hListView, "GetSubItemCount")

    Local $iUbound = UBound($aSelected_Indices)-1, $iNum = 1, $iStep = 1
    Local $iCurrent_Index, $iUpDown_Index, $sCurrent_ItemText, $sUpDown_ItemText
    Local $iCurrent_Index, $iCurrent_CheckedState, $iUpDown_CheckedState

    If ($iDirection = -1 And $aSelected_Indices[1] = 0) Or _
    ($iDirection = 1 And $aSelected_Indices[$iUbound] = $iTotal_Items-1) Then Return SetError(3, 0, "")

    ControlListView($hWnd, "", $hListView, "SelectClear")

    Local $aOldSelected_IDs[1]
    Local $iIconsFileExists = FileExists($sIconsFile)

    If $iIconsFileExists Then
    For $i = 1 To $iUbound
    ReDim $aOldSelected_IDs[UBound($aOldSelected_IDs)+1]
    _GUICtrlListView_SetItemSelected($hListView, $aSelected_Indices[$i], True)
    $aOldSelected_IDs[$i] = GUICtrlRead($vListView)
    _GUICtrlListView_SetItemSelected($hListView, $aSelected_Indices[$i], False)
    Next
    ControlListView($hWnd, "", $hListView, "SelectClear")
    EndIf

    If $iDirection = 1 Then
    $iNum = $iUbound
    $iUbound = 1
    $iStep = -1
    EndIf

    For $i = $iNum To $iUbound Step $iStep
    $iCurrent_Index = $aSelected_Indices[$i]
    $iUpDown_Index = $aSelected_Indices[$i]+1
    If $iDirection = -1 Then $iUpDown_Index = $aSelected_Indices[$i]-1

    $iCurrent_CheckedState = _GUICtrlListView_GetItemChecked($hListView, $iCurrent_Index)
    $iUpDown_CheckedState = _GUICtrlListView_GetItemChecked($hListView, $iUpDown_Index)

    _GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index)

    For $j = 0 To $iTotal_Columns-1
    $sCurrent_ItemText = _GUICtrlListView_GetItemText($hListView, $iCurrent_Index, $j)
    $sUpDown_ItemText = _GUICtrlListView_GetItemText($hListView, $iUpDown_Index, $j)

    _GUICtrlListView_SetItemText($hListView, $iUpDown_Index, $sCurrent_ItemText, $j)
    _GUICtrlListView_SetItemText($hListView, $iCurrent_Index, $sUpDown_ItemText, $j)
    Next

    _GUICtrlListView_SetItemChecked($hListView, $iUpDown_Index, $iCurrent_CheckedState)
    _GUICtrlListView_SetItemChecked($hListView, $iCurrent_Index, $iUpDown_CheckedState)

    If $iIconsFileExists Then
    If $iCurrent_CheckedState = 1 Then
    GUICtrlSetImage(GUICtrlRead($vListView), $sIconsFile, $iIconID_Checked, 0)
    Else
    GUICtrlSetImage(GUICtrlRead($vListView), $sIconsFile, $iIconID_UnChecked, 0)
    EndIf

    If $iUpDown_CheckedState = 1 Then
    GUICtrlSetImage($aOldSelected_IDs[$i], $sIconsFile, $iIconID_Checked, 0)
    Else
    GUICtrlSetImage($aOldSelected_IDs[$i], $sIconsFile, $iIconID_UnChecked, 0)
    EndIf
    EndIf

    _GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index, 0)
    Next

    For $i = 1 To UBound($aSelected_Indices)-1
    $iUpDown_Index = $aSelected_Indices[$i]+1
    If $iDirection = -1 Then $iUpDown_Index = $aSelected_Indices[$i]-1
    _GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Original _FileWriteToLine from:
    ; Author ........: cdkid
    ; Modified.......: partypooper, MrCreatoR
    ;
    ; New Version: _FileWriteToLineExt by Neklor
    ; Mod........: Files will be saved in UTF-8 NOBOM now.
    ; ===============================================================================================================================
    Func _FileWriteToLineExt($sFilePath, $iLine, $sText, $iOverWrite = 0)
    If $iLine <= 0 Then Return SetError(4, 0, 0)
    If Not IsString($sText) Then
    $sText = String($sText)
    If $sText = "" Then Return SetError(6, 0, 0)
    EndIf
    If $iOverWrite <> 0 And $iOverWrite <> 1 Then Return SetError(5, 0, 0)
    If FileExists($sFilePath) = 0 Then Return SetError(2, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hFileOpen = FileOpen($sFilePath, FileGetEncoding($sFilePath) + $FO_READ)
    Local $aArray = FileReadToArray($hFileOpen)
    FileClose($hFileOpen)
    Local $iUBound = UBound($aArray) - 1
    If ($iUBound + 1) < $iLine Then Return SetError(1, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $hFileOpen = FileOpen($sFilePath, $FO_UTF8_NOBOM + $FO_OVERWRITE)
    If $hFileOpen = -1 Then Return SetError(3, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $sData = ""
    $iLine -= 1 ; Now the array is 0-based, so reduce the line number by 1.
    For $i = 0 To $iUBound
    If $i = $iLine Then
    If $iOverWrite Then
    If $sText Then $sData &= $sText & @CRLF
    Else
    $sData &= $sText & @CRLF & $aArray[$i] & @CRLF
    EndIf
    ElseIf $i < $iUBound Then
    $sData &= $aArray[$i] & @CRLF
    ElseIf $i = $iUBound Then
    $sData &= $aArray[$i]
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    FileWrite($hFileOpen, $sData)
    FileClose($hFileOpen)
    Return 1
    EndFunc ;==>_FileWriteToLine

    [/autoit]

    ergebnisse.php
    Achtung: Ab <!--Start--> fangen alle zeilen eigentlich ohne Leerzeichen vorweg an, ist hier wohl ein anzeigefehler im forum.

    Spoiler anzeigen
    PHP
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <? header("Content-Type: text/html; charset=utf-8"); ?>
    <head>
    <meta content="de" http-equiv="Content-Language" />
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Test</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    
    <body>
    
    
    <div id="wrapper">
        <div id="header">
        <? include ("head.php"); ?>
                </div>
    <div id="navi">
    
    
    <? include ("nav.php"); ?>
        </div>    
    <div id="content" align="center">
    <? include ("head.php"); ?>
    <div id="content2" align="center">
    <hr class="hr1" />
    <!--Start-->
        <p class="pcont2">Testevent1</p><br />
        von März 2013 - Dezember 2013, 123 teststadt<br />
        <hr class="hr1" />        
        <p class="pcont2">Testevent2</p><br />
        von November 2013 - Dezember 2013, 124 Südöstliche Stadt<br />
        <hr class="hr1" />
        <p class="pcont2">Testevent3</p><br />
         von November 2013 - Dezember 2013, 125 teststadt<br />
        <hr class="hr1" />    
        <p class="pcont2">Testevent4</p><br />
        von November 2013 - Dezember 2013, 126 teststadt<br />
        <hr class="hr1" />    
        <p class="pcont2">Testevent5</p><br />
         von November 2013 - Dezember 2013, 127 teststadt<br />
        <hr class="hr1" />    
        <p class="pcont2">Testevent6</p><br />
        von November 2013 - Dezember 2013, 128 teststadt<br />
        <hr class="hr1" />    
    <!--Ende-->    
    <br />
    
    
    
    
        </div>
    </div>
    </div>
    
    
    </body>
    
    
    </html>
    Alles anzeigen
  • _FileWriteToLine Problem

    • Neklor
    • 14. Februar 2014 um 00:05

    Vielen Dank, jetzt klappt es auch mit dem Löschen der Zeilen ;)

    Zu dem Problem mit dem seltsamen Fehler bei FileWriteToLine: Das Problem lag offensichtlich and der AutoIt version 3.3.8.1. Ich habe jetzt aktualisiert und der Fehler tritt nicht mehr auf. :D

    Seltsamerweise erhalte ich jetzt aber Fehler, wenn ich mein Script mit der Beta Version ausführe, die ich auch aktualisert habe. Mit der normalen Version geht alles :S

    Das Script oben habe ich aktualisiert und ohne Leerzeichen im Austauschbaren Teil in der php Datei, funktioniert es dann auch.

  • _FileWriteToLine Problem

    • Neklor
    • 13. Februar 2014 um 22:13

    Hi,
    entweder hab ich grad nen Brett vorm Kopf oder ich komm einfach nicht auf die Lösung.
    Eigentlich möchte ich nur in einem Script die _FileWriteToLine funktion nutzen, aber es klappt einfach nicht.
    Ich habe die Funktion bereits in anderen Scripts erfolgreich verwendet, aber bei diesem komme ich nicht weiter.

    Was macht das Script: Es liest die Daten aus einer .php Datei in eine Liste, da kann man diese bearbeiten und die Funktion _writeData soll diese wieder in die Datei einfügen.
    Ich habe mir mal eine MSG Box eingebaut, die mir @error, den Inhalt von $i und die Anzahl der Zeilen ausgibt.
    @error ist 1, also: File has less lines than $iLine
    $i ist 26 und die Zeilenzahl 54
    Demnach verstehe ich das Problem jetzt nicht so ganz ?(
    Ich bin für jede Hilfe dankbar ;)

    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    #include "Forms\gui.isf"
    ; -- Created with ISN Form Studio 2 for ISN AutoIt Studio -- ;
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiButton.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <FTPEx.au3>
    Global $aArray
    Global $start
    Global $ende
    $gui = GUICreate("Update Events",722,523,-1,-1,-1,-1)
    $btn_hoch = GUICtrlCreateButton("Hoch",588,401,100,30,-1,-1)
    $btn_runter = GUICtrlCreateButton("Runter",588,450,100,30,-1,-1)
    Global $liste = GUICtrlCreatelistview("Titel |Text ",40,190,534,309,-1,512)
    $inp_titel = GUICtrlCreateInput("",80,57,290,21,-1,512)
    GUICtrlCreateLabel("Titel:",50,60,26,15,-1,-1)
    GUICtrlSetBkColor(-1,"-2")
    GUICtrlCreateLabel("Text:",50,100,24,15,-1,-1)
    GUICtrlSetBkColor(-1,"-2")
    GUICtrlSetStyle($liste, $LVS_REPORT, $LVS_EX_FULLROWSELECT)
    $inp_text = GUICtrlCreateInput("",80,97,289,20,-1,512)
    $btn_add = GUICtrlCreateButton("Hinzufügen",420,75,100,30,-1,-1)
    $btn_upload = GUICtrlCreateButton("Upload",590,140,100,30,-1,-1)
    $btn_del = GUICtrlCreateButton("Löschen",589,320,100,30,-1,-1)
    GUISetState(@SW_SHOW,$gui)

    [/autoit][autoit][/autoit][autoit]

    _importData ()
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_add
    GUICtrlCreateListViewItem(GUICtrlRead($inp_titel) & "|" & GUICtrlRead($inp_text), $liste)
    Case $btn_del
    _GUICtrlListView_DeleteItemsSelected($liste)
    Case $btn_runter
    _GUICtrlListView_MoveItems($liste,1)
    Case $btn_hoch
    _GUICtrlListView_MoveItems($liste,-1)
    Case $btn_upload
    _writeData ()

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    EndSwitch
    Sleep(10)
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _importData()
    _FileReadToArray(@ScriptDir& "\events.php", $aArray)
    If @error Then
    MsgBox(0, "", "Fehler beim einlesen der Datei. Fehler: " & @error)
    Exit
    EndIf
    ; Start und Ende finden
    $start = _ArraySearch($aArray, "<!--Start-->",0, 0, 0, 1)
    If @error Then
    MsgBox(0, "", "Fehler beim der Suche nach dem Startpunk. Fehler: " & @error)
    Exit
    EndIf
    $ende = _ArraySearch($aArray, "<!--Ende-->",0, 0, 0, 1)
    If @error Then
    MsgBox(0, "", "Fehler beim der Suche nach dem Endpunk. Fehler: " & @error)
    Exit
    EndIf
    For $i = $start To $ende
    If stringinstr($aArray[$i], '<p class="pcont2">') Then
    $tmp = StringTrimLeft ($aArray[$i], 18)
    $tmp = StringTrimRight($tmp, 10)
    $tmp2 = StringTrimRight($aArray[$i+1], 6)
    GUICtrlCreateListViewItem($tmp & "|" & $tmp2, $liste)
    Endif
    Next
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _writeData ()
    Local $asplit
    Local $file2 = "events.php"
    $delanzahl = ($ende) - ($start+1)
    For $i = 1 to $delanzahl
    _FileWriteToLine($file2, $start+1, "", 1)
    If @error Then
    MsgBox(0, "", "Fehler beim löschen der Zeilen in der Datei. Fehler: " & @error)
    Exit
    EndIf
    Next
    Local $itemc = _GUICtrlListView_GetItemCount ($liste)
    $start2 = $start+1
    For $i = 1 To $itemc
    $tmp = _GUICtrlListView_GetItemTextString ($liste, $i-1)
    $asplit = StringSplit($tmp, "|")
    _FileWriteToLine($file2, $start2, '<p class="pcont2">' & $asplit[1] & '</p><br />', 0)
    If @error Then
    MsgBox(0, "", "Fehler beim schreiben in die Datei. Fehler: " & @error)
    Exit
    EndIf
    $start2 +=1
    _FileWriteToLine($file2, $start2, $asplit[2] & '<br />', 0)
    If @error Then
    MsgBox(0, "", "Fehler beim schreiben in die Datei. Fehler: " & @error)
    Exit
    EndIf
    $start2 +=1
    _FileWriteToLine($file2, $start2, '<hr class="hr1" /> ', 0)
    If @error Then
    MsgBox(0, "", "Fehler beim schreiben in die Datei. Fehler: " & @error)
    Exit
    EndIf
    $start2 +=1
    Next

    EndFunc
    ;===============================================================================
    ; Function Name: _GUICtrlListView_MoveItems()
    ; Description: Moves Up or Down selected item(s) in ListView.
    ;
    ; Parameter(s): $hListView - ControlID or Handle of ListView control.
    ; $iDirection - Define in what direction item(s) will move:
    ; -1 - Move Up.
    ; 1 - Move Down.
    ;
    ; Requirement(s): AutoIt 3.3.0.0
    ;
    ; Return Value(s): On seccess - Move selected item(s) Up/Down and return 1.
    ; On failure - Return "" (empty string) and set @error as following:
    ; 1 - No selected item(s).
    ; 2 - $iDirection is wrong value (not 1 and not -1).
    ; 3 - Item(s) can not be moved, reached last/first item.
    ;
    ; Note(s): * If you select like 15-20 (or more) items, moving them can take a while (second or two).
    ;
    ; Author(s): G.Sandler a.k.a CreatoR
    ;===============================================================================
    Func _GUICtrlListView_MoveItems($hListView, $iDirection)
    Local $aSelected_Indices = _GUICtrlListView_GetSelectedIndices($hListView, 1)

    [/autoit][autoit][/autoit][autoit]

    If UBound($aSelected_Indices) < 2 Then Return SetError(1, 0, "")
    If $iDirection <> 1 And $iDirection <> -1 Then Return SetError(2, 0, "")

    [/autoit][autoit][/autoit][autoit]

    Local $iTotal_Items = _GUICtrlListView_GetItemCount($hListView)
    Local $iTotal_Columns = _GUICtrlListView_GetColumnCount($hListView)

    [/autoit][autoit][/autoit][autoit]

    Local $iUbound = UBound($aSelected_Indices)-1, $iNum = 1, $iStep = 1

    [/autoit][autoit][/autoit][autoit]

    Local $iCurrent_Index, $iUpDown_Index, $sCurrent_ItemText, $sUpDown_ItemText
    Local $iCurrent_Index, $iCurrent_CheckedState, $iUpDown_CheckedState
    Local $iImage_Current_Index, $iImage_UpDown_Index

    [/autoit][autoit][/autoit][autoit]

    If ($iDirection = -1 And $aSelected_Indices[1] = 0) Or _
    ($iDirection = 1 And $aSelected_Indices[$iUbound] = $iTotal_Items-1) Then Return SetError(3, 0, "")

    [/autoit][autoit][/autoit][autoit]

    ControlListView($hListView, "", "", "SelectClear")

    [/autoit][autoit][/autoit][autoit]

    If $iDirection = 1 Then
    $iNum = $iUbound
    $iUbound = 1
    $iStep = -1
    EndIf

    [/autoit][autoit][/autoit][autoit]

    For $i = $iNum To $iUbound Step $iStep
    $iCurrent_Index = $aSelected_Indices[$i]
    $iUpDown_Index = $aSelected_Indices[$i]+1
    If $iDirection = -1 Then $iUpDown_Index = $aSelected_Indices[$i]-1

    [/autoit][autoit][/autoit][autoit]

    $iCurrent_CheckedState = _GUICtrlListView_GetItemChecked($hListView, $iCurrent_Index)
    $iUpDown_CheckedState = _GUICtrlListView_GetItemChecked($hListView, $iUpDown_Index)

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index)

    [/autoit][autoit][/autoit][autoit]

    For $j = 0 To $iTotal_Columns-1
    $sCurrent_ItemText = _GUICtrlListView_GetItemText($hListView, $iCurrent_Index, $j)
    $sUpDown_ItemText = _GUICtrlListView_GetItemText($hListView, $iUpDown_Index, $j)

    [/autoit][autoit][/autoit][autoit]

    If _GUICtrlListView_GetImageList($hListView, 1) <> 0 Then
    $iImage_Current_Index = _GUICtrlListView_GetItemImage($hListView, $iCurrent_Index, $j)
    $iImage_UpDown_Index = _GUICtrlListView_GetItemImage($hListView, $iUpDown_Index, $j)

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlListView_SetItemImage($hListView, $iCurrent_Index, $iImage_UpDown_Index, $j)
    _GUICtrlListView_SetItemImage($hListView, $iUpDown_Index, $iImage_Current_Index, $j)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlListView_SetItemText($hListView, $iUpDown_Index, $sCurrent_ItemText, $j)
    _GUICtrlListView_SetItemText($hListView, $iCurrent_Index, $sUpDown_ItemText, $j)
    Next

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlListView_SetItemChecked($hListView, $iUpDown_Index, $iCurrent_CheckedState)
    _GUICtrlListView_SetItemChecked($hListView, $iCurrent_Index, $iUpDown_CheckedState)

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index, 0)
    Next

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aSelected_Indices)-1
    $iUpDown_Index = $aSelected_Indices[$i]+1
    If $iDirection = -1 Then $iUpDown_Index = $aSelected_Indices[$i]-1
    _GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index)
    Next

    [/autoit][autoit][/autoit][autoit]

    Return 1
    EndFunc

    [/autoit]

    events.php

    PHP
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    
    <head>
    <meta content="de" http-equiv="Content-Language" />
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Test</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    
    <body>
    
    
    <div id="wrapper">
    	<div id="header">
    	<? include ("head.php"); ?>
    			</div>
    <div id="navi">
    
    
    <? include ("nav.php"); ?>
    	</div>	
    <div id="content" align="center">
    <? include ("head.php"); ?>
    <div id="content2" align="center">
    <hr class="hr1" />
    <!--Start-->
    	<p class="pcont2">Testevent1</p><br />
    	von November 2013 - Dezember 2013, 123 teststadt<br />
    	<hr class="hr1" />		
    	<p class="pcont2">Testevent2</p><br />
    	von November 2013 - Dezember 2013, 124 teststadt<br />
    	<hr class="hr1" />
    	<p class="pcont2">Testevent3</p><br />
     	von November 2013 - Dezember 2013, 125 teststadt<br />
    	<hr class="hr1" />	
    	<p class="pcont2">Testevent4</p><br />
    	von November 2013 - Dezember 2013, 126 teststadt<br />
    	<hr class="hr1" />	
    	<p class="pcont2">Testevent5</p><br />
     	von November 2013 - Dezember 2013, 127 teststadt<br />
    	<hr class="hr1" />	
    	<p class="pcont2">Testevent6</p><br />
    	von November 2013 - Dezember 2013, 128 teststadt<br />
    	<hr class="hr1" />	
    <!--Ende-->	
    <br />
    
    
    
    
    	</div>
    </div>
    </div>
    
    
    </body>
    
    
    </html>
    Alles anzeigen
  • Systemordner erstellen funktioniert nicht!

    • Neklor
    • 25. März 2013 um 23:52

    Hi,
    der Ordner wird schon erstellt, aber nicht im System32 Vezeichnis, denn bei 64bit Systemen werden die Pfade von 32bit Programmen in den syswow64 Ordner umgeleitet.
    Die Lösung ist, dass Script als x64 zu kompilieren und schon funktioniert alles ;)
    Beim Ausführen im Editor, läuft dies übrigens als 32bit, also nicht gut um sowas zu testen.

  • Autenthifizierungsfenster abfangen und füllen

    • Neklor
    • 25. März 2013 um 18:56

    Also ohne es jetzt getestet zu haben, würde ich es mal so versuchen:

    [autoit]

    $file = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    $hFile = FileOpen($file, 2) ;// Datei im Schreibmodus öffnen (falls sie nicht exstiert, wird sie erstellt)
    $checkpw = FileRead($hFile)
    if $checkpw = "" then
    $sText = InputBox("Passwort-Box", "Bitte geben Sie Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'")
    FileWrite($hFile, $sText) ;// Text in Datei schreiben
    endif

    [/autoit][autoit][/autoit][autoit]

    $sText = fileread($hFile)

    [/autoit][autoit][/autoit][autoit]

    while 1
    if winexists("Authentifizierung") then
    ControlSetText("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]",$sText)
    controlclick("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]")
    endif
    sleep(100)
    wend
    FileClose($hFile) ;Sollte immer vorhanden sein ;)
    Exit ;Das auch

    [/autoit]

    EDIT: Kleine ergänzung ;)
    EDIT2: Ich seh gerade, dass deine ausgelesenen werte nicht ganz stimmen, die vom Input Feld ist sicher anders als der OK Knopf.

  • Fehler bei COM abfrage

    • Neklor
    • 25. März 2013 um 18:00

    Hi,
    das 2. Problem bleibt!
    Aber ich möchte hier schonmal einige Erkenntnisse mitteilen, die vieleicht dem einen oder anderem mit dem selben Problem, helfen könnten.
    Ich habe jetzt etwas mit verschiedenen Dateitypen experimentiert.
    Offenbar kann man mit der dsofile.dll so ziemlich alle Dateitypen bearbeiten.
    Nachteil: Ändert man den Autor bei einem .txt File oder einer Avi Datei, wo es diesen ja gar nicht gibt, so kann das vom Explorer nicht angezeigt werden.
    Vorteil: Der Wert ist aber trotzdem da, d.h. ich kann ihn mit einem Script auch wieder auslesen.

    Hier einmal die ein Beispiel an einer Avi Datei:

    Wert setzen:

    [autoit]

    ; Object identifiers
    Global Const $sCLSID_OleDocumentProperties = "{58968145-CF05-4341-995F-2EE093F6ABA3}"
    Global Const $IID_OleDocumentProperties = "{58968145-CF01-4341-995F-2EE093F6ABA3}"
    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $sDll = "dsofile.dll" ; location and name of your dll
    $hDll = DllOpen($sDll) ; open it

    [/autoit][autoit][/autoit][autoit]

    ; Experimenal feature. Try with newer versions of AutoIt
    $oFile = ObjCreate($sCLSID_OleDocumentProperties, $IID_OleDocumentProperties, $hDll)
    If Not @error Then
    ;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
    $oFile.Open("D:\ScreenRecords\Test.avi")
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.SummaryProperties.author = "Das ist ein Test Autor 124"
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Save
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Close
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    Else
    MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
    EndIf
    DllClose ($hDll)
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _ErrFunc($oError)
    ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
    "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    "err.description is: " & @TAB & $oError.description & @CRLF & _
    "err.source is: " & @TAB & $oError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]

    Und so liest man es wieder aus:

    [autoit]

    ; Object identifiers
    Global Const $sCLSID_OleDocumentProperties = "{58968145-CF05-4341-995F-2EE093F6ABA3}"
    Global Const $IID_OleDocumentProperties = "{58968145-CF01-4341-995F-2EE093F6ABA3}"
    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
    Dim $test

    [/autoit][autoit][/autoit][autoit]

    $sDll = "dsofile.dll" ; location and name of your dll
    $hDll = DllOpen($sDll) ; open it

    [/autoit][autoit][/autoit][autoit]

    ; Experimenal feature. Try with newer versions of AutoIt
    $oFile = ObjCreate($sCLSID_OleDocumentProperties, $IID_OleDocumentProperties, $hDll)
    If Not @error Then
    ;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
    $oFile.Open("D:\ScreenRecords\Test.avi")
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    MsgBox(0, "Test", $oFile.SummaryProperties.author)
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Close
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    Else
    MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
    EndIf
    DllClose ($hDll)
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _ErrFunc($oError)
    ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
    "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    "err.description is: " & @TAB & $oError.description & @CRLF & _
    "err.source is: " & @TAB & $oError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]
  • Fehler bei COM abfrage

    • Neklor
    • 25. März 2013 um 17:18

    Manchmal ist die Lösung ziemlich einfach...
    Ich versuche es die ganze Zeit mit neu erstellten leeren Dokumenten...
    Ein Buchstabe im Dokument reicht und schon funktioniert es auch mit .docx :D
    Das 2. Problem besteht aber weiterhin.

  • Fehler bei COM abfrage

    • Neklor
    • 25. März 2013 um 16:54

    So,
    nach einigem getüfftel habe ich rausgefunden woran es lag. Offenbar am docx Format.
    Aber eigentlich sollte doch genau das damit gehen oder?

    Folgendes funktioniert wunderbar:

    [autoit]


    ; Object identifiers
    Global Const $sCLSID_OleDocumentProperties = "{58968145-CF05-4341-995F-2EE093F6ABA3}"
    Global Const $IID_OleDocumentProperties = "{58968145-CF01-4341-995F-2EE093F6ABA3}"
    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $sDll = "dsofile.dll" ; location and name of your dll
    $hDll = DllOpen($sDll) ; open it

    [/autoit][autoit][/autoit][autoit]

    ; Experimenal feature. Try with newer versions of AutoIt
    $oFile = ObjCreate($sCLSID_OleDocumentProperties, $IID_OleDocumentProperties, $hDll)
    If Not @error Then
    ;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
    $oFile.Open("D:\neu.doc")
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.SummaryProperties.author = "Das ist ein Test Autor"
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Save
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Close
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    Else
    MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
    EndIf
    DllClose ($hDll)
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _ErrFunc($oError)
    ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
    "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    "err.description is: " & @TAB & $oError.description & @CRLF & _
    "err.source is: " & @TAB & $oError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]

    Damit bleiben aber leider einige Probleme offen:
    1. Warum geht das nicht mit .docx (Ich habe irgendow in der Beschreibung von MS gelesen, dass das jetzt supported wird. Gelöst
    2. Ich brauche die Funktion $oFile.CustomProperties.Add, kriege die aber nicht zum laufen. In C# würde man die wohl so aufrufen: oFile.CustomProperties.Add Test, Wert

    Kann da jemand weiter helfen?

    Ich habe, die DLL jetzt mal angehängt, der Download von Microsoft ist ja doch etwas umständlich, weil da soviel anderer kram mit drinne ist.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    dsofile.zip 44,21 kB – 384 Downloads
  • Fehler bei COM abfrage

    • Neklor
    • 24. März 2013 um 13:06
    Zitat von water

    Also ich verstehe die bisher gegebenen Infos so:

    • DSOFile.dll gibt Dir die Möglichkeit Attribute von Office Dokumenten zu ändern auch wenn Office gar nicht installiert ist
    • Wenn Office installiert ist, danna geht das auch mit Funktionen aus der Word UDF oder direkt über COM
    • Mit DSOFile lassen sich Properties anderer Dateitypen nicht ändern
    • Dazu gibt es garantiert eine Windows API


    So ist es ;)
    Aber eine Windows API konnte ich dazu bisher noch nicht finden. Also wenn jemand mehr zu dem Thema weiss, ich bin für jede Hilfe dankbar :)

  • Fehler bei COM abfrage

    • Neklor
    • 24. März 2013 um 01:23
    Zitat von qwert23

    ...ist es Dein Ziel die Dokumenteneigenschaften einer .docx (Word) Datei auszulesen bzw zu setzen?

    Dann empfehle ich Dir das Word-UDF und darin die Funktion _WordDocPropertyGet bzw. _WordDocPropertySet (Auszug aus der Hilfe im Spoiler)

    Deine og. Fehlermeldungen würde ich dahingehend interpretieren, dass die DLL keine Worddateien verarbeiten kann.

    Spoiler anzeigen


    Funktionsreferenz

    --------------------------------------------------------------------------------

    _WordDocPropertyGet
    Gibt eine ausgewählte Eigenschaft der Word-Datei zurück.


    #include
    _WordDocPropertyGet(ByRef $o_object, $v_property)


    Parameter
    $o_object Objektvariable eines Word.Application Dokumentobjekts.
    $v_property gewählte Eigenschaft (siehe Bemerkungen)

    Rückgabewert
    Erfolg: Wert der ausgewählten Eigenschaft
    Fehler: Gibt 0 zurück und setzt @ERROR
    @Error: $_WordStatus_Success = Kein Fehler
    $_WordStatus_GeneralError = allgemeiner Fehler
    $_WordStatus_ComError = Com Fehler
    $_WordStatus_InvalidDataType = ungültiger Datentyp
    $_WordStatus_InvalidObjectType = ungültiger Objekttyp
    $_WordStatus_InvalidValue = ungültiger Wert
    @Extended: Nummer des ungültigen Parameters

    Bemerkungen
    Man kann entweder den Index oder Namen für die Auswahl der Eigenschaft verwenden.

    Die folgenden Tabellen zeigen eine Beschreibung für jede verfügbare Eigenschaft.

    Word Dokument Eigenschaften

    Index der Eigenschaft/Name Beschreibung
    (1) "title" Titel.
    (2) "subject" Thema.
    (3) "author" Autor.
    (4) "keywords" Stichwörter.
    (5) "comments" Kommentare.
    (6) "template" Name der Vorlage.
    (7) "last author" Letzter Autor.
    (8 ) "revision number" Anzahl der Überarbeitungen.
    (9) "application name" Name der Anwendung.
    (10) "last print date" letztes Druckdatum.
    (11) "creation date" Erstelldatum.
    (12) "last save time" zuletzt gespeichert am.
    (13) "total editing time" Anzahl von Änderungen im VBA Pojekt.
    (14) "pages" Anzahl Seiten.
    (15) "words" Anzahl Wörter.
    (16) "characters" Anzahl Zeichen.
    (17) "security" Sicherheitseinstellungen.
    (18 ) "category" Kategorie.
    (19) "" nicht unterstützt.
    (20) "manager" Manager.
    (21) "company" Firma.
    (22) "bytes" Anzahl Bytes.
    (23) "lines" Anzahl Zeilen.
    (24) "paragraphs" Anzahl Absätze.
    (25-28 ) "" nicht unterstützt.
    (29) "hyperlink base" Wenn ein relativer Link auf einem festgelegten Pfad basiert (der erste Teil des Pfades der Datei, der den Hyperlink und die Zieldatei enthält), ist der Pfad die Basis des Hyperlinks.
    (30) "characters (with spaces)" Anzahl Zeichen inkl. Leerzeichen.


    Verwandte Funktionen
    _WordDocPropertySet
    Beispiel

    ; *******************************************************
    ; Beispiel 1 - Erstellt ein Word-Fenster, öffnet ein Dokument
    ; und liest alle verfügbaren Dokumenteigenschaften durch den Index.
    ; *******************************************************
    ;
    #include

    Local $oWordApp = _WordCreate(@ScriptDir & "\Test.doc")
    Local $oDoc = _WordDocGetCollection($oWordApp, 0)
    For $i = 1 To 30
    ConsoleWrite("Index der Eigenschaft " & $i & " - " & _WordDocPropertyGet($oDoc, $i) & @CR)
    Next

    ; *******************************************************
    ; Beispiel 2 - Erstellt ein Word-Fenster, öffnet ein Dokument
    ; und liest den Titel, Betreff und Autor des Dokumentes durch den Namen aus.
    ; *******************************************************
    ;
    #include
    $oWordApp = _WordCreate(@ScriptDir & "\Test.doc")
    $oDoc = _WordDocGetCollection($oWordApp, 0)
    ConsoleWrite("Titel - " & _WordDocPropertyGet($oDoc, "Title") & @CRLF)
    ConsoleWrite("Betreff - " & _WordDocPropertyGet($oDoc, "Subject") & @CRLF)
    ConsoleWrite("Autor - " & _WordDocPropertyGet($oDoc, "Author") & @CRLF)

    Alles anzeigen


    Grundsätzlich suche ich eine möglichkeit den kommentar bei so ziemlich jedem Dateityp zu setzen odert alternativ wenn das nicht geht eine eigene Eigenschaft hinzuzufügen.
    Diese DLL soll das zumindest schonmal bei allen Office dokumenten ermöglichen, was ja schonmal ganz gut ist. Eventuell kann man damit sogar alle Dateitypen bearbeiten.
    .docx kann die DLL laut Microsoft. Ich weiss das, dass Objekt erfolgreich erstellt wird, nur der Code danach verursacht Fehler...

    Gibt es vieleicht irgendeine Standard Funktion, die das auch kann? Ansonsten, weiss jemand, was hier nicht funktioniert?

  • Ein COM Objekt aus einer nicht registrierten DLL verwenden?

    • Neklor
    • 23. März 2013 um 00:15
    Zitat von funkey

    UEZ: Ich denke, das hat er bereits auch gelesen, denn ich glaube dass Neklor hier im Forum Matrix112 im englischen Forum ist ;)
    trancexx hat uns da wohl einiges verschwiegen, was sie da in ObjCreate() eingebaut hat (3.Parameter = $hDLL ?) Schade, dass sie nicht mehr im Dev-Team ist. :(


    Ja so ist es :D
    Ich habe das bereits getestet, funktioniert anscheinend.
    Ich habe jetzt aber mit den COM Abfragen ein neues Problem, dafür habe ich aber einen neuen Thread geöffnet.

  • Fehler bei COM abfrage

    • Neklor
    • 22. März 2013 um 23:57

    Hi,
    ich habe ein Problem bei einer COM Abfrage.
    Ich versuche zu einer Datei einen Kommentar hinzuzufügen, aber ich bekomme schon beim öffnen ein Problem.
    Ich habe nicht sehr viel ahnung von COM, daher habe ich mich an ein VB Script gehalten und habe versucht das in AutoIt zu übersetzen.

    VB Script:

    Code
    Set oFile = CreateObject("DSOFile.OleDocumentProperties")
    oFile.Open("c:\tmp\test.txt")
    oFile.SummaryProperties.Comments = "Test Comment"
    oFile.Save
    oFile.Close

    Mein Script:

    [autoit]


    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

    [/autoit][autoit][/autoit][autoit]

    $oFile = ObjCreate("DSOFile.OleDocumentProperties")
    If Not @error Then
    ;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
    $oFile.Open("C:\neu.docx")
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.SummaryProperties.Comments = "Test Kommentar"
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Save
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Close
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    Else
    MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
    EndIf
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _ErrFunc($oError)
    ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
    "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    "err.description is: " & @TAB & $oError.description & @CRLF & _
    "err.source is: " & @TAB & $oError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]

    Ich bekomme immer schon beim oFile.Open einen Fehler rausgeworfen:

    err.number is: -2147352567
    err.windescription: Unbekannter Fehler
    err.description is:
    err.source is: Dsofile.dll
    err.helpfile is:
    err.helpcontext is: 0
    err.lastdllerror is: 0
    err.scriptline is: 19
    err.retcode is: -2147467259


    Weiss jemand was ich falsch mache?

    Hinweis: Man benötigt Dsofile.dll von Microsoft, welche dann per regsvr32 registriert werden muss. http://support.microsoft.com/kb/224351/EN-US

    EDIT:
    Ich habe jetzt nochmal getestet ob es eventuell an der registrierten DLL liegt und habe eine alternative Methode probiert ohne die DLL zu registrieren, führt aber zum selben fehler, also liegt es vermutlich an meinem Code.

    Alternative Methode:

    [autoit]


    ; Object identifiers
    Global Const $sCLSID_OleDocumentProperties = "{58968145-CF05-4341-995F-2EE093F6ABA3}"
    Global Const $IID_OleDocumentProperties = "{58968145-CF01-4341-995F-2EE093F6ABA3}"
    Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $sDll = "dsofile.dll" ; location and name of your dll
    $hDll = DllOpen($sDll) ; open it

    [/autoit][autoit][/autoit][autoit]

    ; Experimenal feature. Try with newer versions of AutoIt
    $oFile = ObjCreate($sCLSID_OleDocumentProperties, $IID_OleDocumentProperties, $hDll)
    If Not @error Then
    ;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
    $oFile.Open("C:\neu.docx")
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.SummaryProperties.Comments = "Test Kommentar"
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Save
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    $oFile.Close
    If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
    Else
    MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
    EndIf
    DllClose ($hDll)
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _ErrFunc($oError)
    ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
    "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
    "err.description is: " & @TAB & $oError.description & @CRLF & _
    "err.source is: " & @TAB & $oError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
    "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
    EndFunc ;==>_ErrFunc

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™