Zuerst Powershell im Single Thread Apartment Modus starten: powershell -sta
Dann copy & paste
. . Getestet auf Windows7
#--------kopiere von hier-----------------
Cls;#Erstmal machen wir reinen Tisch
@"
https://www.ibjs.net 130730 - Zufällige Wiedergabe von Mediendateien in Powershell, FileSystem, Mediaplayer
Anregungen vom Guru http://powershell.com/cs/blogs/tobias/archive/2011/01/07/organizing-videos-and-music.aspx
sicherheitshalber die Powershell im STA Mode starten: powershell -sta
sonst sind Thread Fehler zu erwarten:
The calling thread cannot access this object because a different thread owns it
Der aufrufende Thread kann nicht auf dieses Objekt zugreifen,
da sich das Objekt im Besitz eines anderen Threads befindet.
"@
If ($host.Runspace.ApartmentState -eq 'STA')
{
#Windows verwaltet FileSystemInfo Objekte, die man z.B. mit gci ermittelt
$Suchwort="Logon"# Logon,Balloon, Default, Ding, Error, Notify, etc
$files=(gci -path $env:windir/media -recurse "*$Suchwort*" -include *.wav,*.mp3)
$file=$files|get-random -count 1
#Mit dem shell-object hat man Zugriff auf die zusätzlichen Dateieigenschaften für ein FileSystemObjekt
$shell=New-Object -COMObject Shell.Application
#Man benötigt die shellfolder, welche Träger der Eigenschaften sind
$shellfolder=$shell.namespace($file.DirectoryName)
#Die Eigenschaften beziehen sich auf die items des shellfolders, den shellfile
$shellfile=$shellfolder.parsename($file.Name)
#msdn nennt 289 Eigenschaften: http://msdn.microsoft.com/en-us/library/windows/desktop/bb787870(v=vs.85).aspx
#die man mit getdetailsof anzeigen kann
0..288|?{ $shellfolder.GetDetailsOf($shellfile, $_) }| %{'{0,-4}{1,-24}{2}' -f $_,$shellfolder.GetDetailsOf($null, $_), $shellfolder.GetDetailsOf($shellfile, $_)}
#für den Medienplayer ist vielleicht die 27, die Liedlänge interessant
$Länge=([timespan]$shellfolder.GetDetailsOf($shellfile,27)).totalseconds
if ($Länge -gt 5) {$Länge=5} #kleine Bremse
#nun kann man den Medienplayer zum Abspielen bemühen
Add-Type -AssemblyName presentationCore
$mediaPlayer = New-Object system.windows.media.mediaplayer
$mediaPlayer.open([uri]"$($file.fullname)")
$mediaPlayer.Play()
#Warte bis Lied aus
Start-Sleep -Seconds ([int]($Länge))
$mediaPlayer.Stop()
#Ende der Vorstellung
}
Else {
"Starte die Powershell im Single Thread Appartment Modus mit: powershell -sta"
}
#Ende -------- kopiere bis hier !!!
Keine Kommentare:
Kommentar veröffentlichen