sheogorath
Goto Top

Objecthandle Funktion um Dateidetails zu editieren

Moin,

im Moment Sortiere ich meine Musik neu, da ich zur Musikorganisation gerade auf den Windows Mediaplayer umsteige. Nun, die Sortierung funktioniert schon per Autoit-Script perfekt, nur würde ich nun gerne auch automatisch die Interpreten und den Titel in den Details in den dafür vorgesehen Felder eintragen.

Auslesen, ja, das habe ich gefunden, nur schreiben irgendwie nicht bzw. nur in Powershell und da auch nicht als Objecthandle Funktion.

http://powershell.com/cs/media/p/8948.aspx

jetzt versuche ich den Codeschnipsel in Autoit zu übersetzen:
 $fileobject | Add-Member NoteProperty "Extended_$property" $value -force  

Wie gesagt, bisher das auslesen funktioniert ja super:
Func AddFileDetails()
	$oShell=ObjCreate("shell.application")  
	$oFolder=$oShell.NameSpace("D:\00_Userdata\Music\David Garrett")  

	If IsObj($oFolder) Then
		$oFolderItem= $oFolder.ParseName("Zorbra's Dance.mp3")  
		if IsObj($oFolderItem) Then
			For $i=1 to 34
			$oInfo=$oFolder.GetDetailsOf($oFolderItem,$i)

			MsgBox(0, "", $oInfo)  
			$oInfo=0
			Next
		EndIf
		$oFolderItem=0
	EndIf
	$oFolder=0
	$oShell=0
EndFunc

Somit konnte ich schon die Index Nummer der jeweiligen Felder schon ausfindig machen. (findet man ja auch im oben verlinkten Script)

Hat jemand eine Idee, wie man das in Autoit umsetzen kann? Ich mag dieses Cross-Scripting nicht und würde es deswegen gerne ausschließlich in Autoit umsetzen.

Gruß
Chris

Content-ID: 228668

Url: https://administrator.de/contentid/228668

Ausgedruckt am: 18.12.2024 um 01:12 Uhr

colinardo
Lösung colinardo 04.02.2014, aktualisiert am 24.06.2014 um 14:59:40 Uhr
Goto Top
Hallo Chris,
die Powershell-Funktion ist auch nur zum lesen der Attribute und Ergänzen dieser für die Anzeige in Powershell, jedoch nicht um die Eigenschaften auch wieder in die Datei zurückzuschreiben.

Eine mögliche Lösung für dein Vorhaben:

$oDocument=ObjCreate("DSOFile.OleDocumentProperties")  
$odocument.open("C:\test.txt")  
$odocument.SummaryProperties.author ="Ich bin der Autor"  
$odocument.Save
$odocument.Close
mehr dazu findest du hier:
http://technet.microsoft.com/en-us/library/ee692828.aspx

Grüße Uwe
Sheogorath
Sheogorath 04.02.2014 aktualisiert um 16:20:11 Uhr
Goto Top
Moin,

Zitat von @colinardo:

Hallo Chris,
die Powershell-Funktion ist auch nur zum lesen der Attribute und Ergänzen dieser für die Anzeige in Powershell, jedoch
nicht um die Eigenschaften auch wieder in die Datei zurückzuschreiben.

Das erklärt zumindest warum ich sie nicht in Autoit abbilden kann :D

Eine mögliche Lösung für dein Vorhaben:

> $oDocument=ObjCreate("DSOFile.OleDocumentProperties")  
> $odocument.open("C:\test.txt")  
> $odocument.SummaryProperties.author ="Ich bin der Autor"  
> $odocument.Save
> $odocument.Close
> 
mehr dazu findest du hier:
http://technet.microsoft.com/en-us/library/ee692828.aspx

danke für den neuen Input, ich habe es ausprobiert, klappt leider nicht wirklich. Ich habe aber einen neuen Ansatz gefunden
http://msdn.microsoft.com/en-us/library/windows/desktop/dd563870(v=vs.8 ...

Soweit ganz schick, mein Code funktioniert auch, aber er schreibt es nicht in die Datei zurück, hast du da eine Idee?

test("D:\00_Userdata\Music\David Garrett\Zorbra's Dance2.mp3", "Test")  

Func test($sPath, $sValue)$oWMP = ObjCreate("WMPlayer.OCX")  
	$oMedia= $oWMP.newMedia($sPath)
	If Not ($oMedia.isReadOnlyItem("AlbumArtist")) Then  

        ;Change the attribute value.
		MsgBox(0,"",$oMedia.getItemInfo("AlbumArtist"))  
        $oMedia.setItemInfo("AlbumArtist", $sValue)  
    EndIf

	If IsObj($oMedia)Then
		MsgBox(0,"","")  
	EndIf
	$oMedia=0
	$oWMP.close
	$oWMP=0
EndFunc

Gruß
Chris
colinardo
Lösung colinardo 04.02.2014 aktualisiert um 16:36:51 Uhr
Goto Top
Zitat von @Sheogorath:
danke für den neuen Input, ich habe es ausprobiert, klappt leider nicht wirklich.
Bei mir gehts einwandfrei... vermutlich hast du die DLL nicht ins "System32" Verzeichnis kopiert und mit
regsvr32 dsofile.dll
registriert...
Sheogorath
Sheogorath 04.02.2014 um 16:36:30 Uhr
Goto Top
Moin,

Zitat von @colinardo:

> Zitat von @Sheogorath:
> danke für den neuen Input, ich habe es ausprobiert, klappt leider nicht wirklich.
Bei mir gehts einwandfrei... vermutlich hast du die DLL nicht ins "System32" Verzeichnis kopiert und mit
> regsvr32 dsofile.dll
> 
registriert...

stimmt, das habe ich nicht gemacht. er hat bei mir aber beim registieren rumgemeckert, dass ihm die DLL nicht passen würde, hat sich aber erledigt, ich habt es geschafft face-smile

Func _FileSetProperty($sPath, $sPropertyname , $sValue)
	$oWMP = ObjCreate("WMPlayer.OCX")  
	$oMedia= $oWMP.newMedia($sPath)
	If Not ($oMedia.isReadOnlyItem($sPropertyname)) Then
        ;Change the attribute value.
        $oMedia.setItemInfo($sPropertyname, $sValue)
    EndIf
	$oMedia=0
	$oWMP.close
	$oWMP=0
EndFunc

Was ich nicht gelesen habe, dass die Änderungen erst nach dem nächsten Start des Windows Media Player zurück geschrieben werden. Aber damit erfüllt es voll und ganz das, was ich brauche. face-smile

Vielen Dank für die Unterstützung, @colinardo!

Gruß
Chris