Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

avi video Datei abspielen lassen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 08.12.2014, 22:04    Titel: avi video Datei abspielen lassen Antworten mit Zitat

Wie kann ich aktuell avi Video Dateien mit Ton in einem neuem Fenster abspielen lassen ?

Hintergrund ist die Planung zu meinem Frage-Antwort-Spiel aus folgenden Thread:http://forum.qbasic.at/viewtopic.php?t=8549

Der Spieler soll die Möglichkeit haben via Tastendruck (im Spielefenster quasi Konsole) folgendes zu steuern, während das Video (in einem zweitem Fenster) läuft:
F1 = Pause
F2 = Beenden

Wenn man das Video in die Konsole integrieren könnte, wäre das natürlich Hammer aber ich weiss nicht ob das überhaupt möglich ist.
[/url]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 09.12.2014, 04:00    Titel: Antworten mit Zitat

Hallo kay2016

Meinst du etwas in dieser Art?
Code:
#Include "windows.bi"
#include "win\tlhelp32.bi"

Declare Sub TastenSim(taste As String = "")

Type IINPUT
   itype As Integer
   Union
      mi As MOUSEINPUT
      ki As KEYBDINPUT   
      hi As HARDWAREINPUT
   End Union
End Type

Dim As Integer pid
Dim As IINPUT ip
Dim As HWND hWndDiesesFenster, hWndVLC
Dim As LPDWORD prozess
Dim As HANDLE snapshothandle
Dim As PROCESSENTRY32 prozessantwort
Dim As String g

hWndDiesesFenster = GetForegroundWindow()

'fensterhandle des VLC-players ermitteln
snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen
prozessantwort.dwSize = SizeOf(prozessantwort) 'größe der datenstruktur für antwort übergeben
Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS)
Do While Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen
   If LCase(prozessantwort.szExeFile) = "vlc.exe" Then 'prozess gehört zum VLC-player
      pid = prozessantwort.th32ProcessID 'zugehörige prozess-ID
      hWndVLC = GetWindow(FindWindow(0,0), GW_HWNDFIRST) 'erstes fensterhandle
      Do
         hWndVLC = GetWindow(hWndVLC,GW_HWNDNEXT) 'nächstes fensterhandle
         GetWindowThreadProcessId(hWndVLC, @prozess) 'prozess-ID des fensters ermitteln
         If pid = prozess Then 'fenster gehört zum gesuchten prozess
            Exit Do, Do 'suche beenden
         EndIf
      Loop While hWndVLC
   EndIf
Loop
CloseHandle(snapshothandle) 'ressourcen freigeben

If hWndVLC = 0 Then
   Print "FEHLER: Zielfenster nicht verfuegbar"
   Sleep
   End
EndIf

Print "F1 = Pause/weiter"
Print "F2 = Beenden"

Do
   g = InKey
   Select Case g
      Case Chr(255,59) 'F1
         SetForegroundWindow(hWndVLC) 'VLC-player in den vordergrund holen
         Sleep 100
         TastenSim(" ") 'druck auf 'SPACE' simulieren ( = pause/weiter)
         SetForegroundWindow(hWndDiesesFenster) 'konsolenfenster in den vordergrund
         Sleep 100
      Case Chr(255,60) 'F2
         End
   End Select
Loop

Sub TastenSim(taste As String = "")
   Dim As IINPUT ip
   Dim As String ut
   Dim As UByte ta
   
   ta = Asc(UCase(Right(taste,1))) 'taste als großbuchstabe
   If Len(taste) > 1 Then
      ut = LCase(Left(taste,InStr(taste, Any " +") - 1)) 'umschalttaste isolieren
   Else
      ut = "" 'keine umschalttaste
   EndIf
   
   ip.itype = INPUT_KEYBOARD
   With ip.ki
      .wScan = 0
      .dwFlags = 0
      
      If ut <> "" Then
         Select Case ut 'umschalttaste drücken
            Case "shift"
               .wVk = VK_SHIFT
            Case "alt"
               .wVk = VK_MENU
            Case "altgr"
               .wVk = VK_RMENU
            Case "ctrl"
               .wVk = VK_CONTROL
         End Select
         SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))
      EndIf
            
      .wVk = ta
      SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))   'taste drücken
      
      .dwFlags = KEYEVENTF_KEYUP
      SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))   'taste loslassen
      
      If ut <> "" Then
         Select Case ut 'umschalttaste loslassen
            Case "shift"
               .wVk = VK_SHIFT
            Case "alt"
               .wVk = VK_MENU
            Case "altgr"
               .wVk = VK_RMENU
            Case "ctrl"
               .wVk = VK_CONTROL
         End Select
         SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))
      EndIf
            
   End With

End Sub

Dieses Sniplet ist für eine Zusammenarbeit mit dem VLC-Player geschrieben, kann aber leicht an jedes andere Abspielprogramm angepasst werden. Der VLC-Player muß beim Start des Programms schon laufen.

Ob es eine Videoplayersoftware gibt, die sich direkt in FB integrieren lässt, entzieht sich leider meiner Kenntnis, aber es würde mich wundern, wenn das nicht schon jemand versucht hätte.

Gruß
grindstone

Noch ein Hinweis: Solange du nicht weißt, was du da machst, solltest du an der Sub TastenSim nicht herumprogrammieren, du kannst dir damit nämlich die Tastatureingabe so gründlich lahmlegen, daß nur noch ein Neustart des Rechners (per Maus) hilft!
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!


Zuletzt bearbeitet von grindstone am 09.12.2014, 09:26, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 09.12.2014, 08:38    Titel: Antworten mit Zitat

Zur "richtigen" Integration gibt es auch Bibliotheken wie xVideo, da wirst du aber erst mal die Header nach FreeBASIC übersetzen müssen.
Wenn das Endergebnis wirklich in der Konsole landen soll, gibt es ja noch libcaca... grinsen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 09.12.2014, 10:00    Titel: Antworten mit Zitat

Für Leute mit Russischkenntnissen wäre vielleicht auch Window9 eine Alternative.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 09.12.2014, 11:18    Titel: Antworten mit Zitat

Danke grindstone !

Der Snippet lässt sieht doch schon ganz gut aus.
Kann ich so ein Snippet als Funktion hinterlegen ?
Im Spiel sollen ca. 50 Videos abspielbar seien, für jedes einzelne
den Codeblock neuzuschreiben wäre überflüssig.
Auf eine bestimmte Frage soll ein bestimmtes Video gespielt werden.
Wie kann ich das machen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 09.12.2014, 22:49    Titel: Antworten mit Zitat

Hallo kay2016

Am besten ist es wohl, wenn ich einmal Schritt für Schritt erkläre, wie das Ganze funktioniert.

Mit SendInput kannst du jedes Programm, dessen Fensterhandle du kennst, von einem anderen Programm aus so steuern, als ob du selbst davorsitzen und die Befehle eintippen würdest. Also quasi Programmbedienung durch die Hintertür.

Zunächst einmal brauchst du die Fensterhandles sowohl von deinem Konsolenprogramm als auch vom VLC-Player. Für das Konsolenprogramm ist das einfach, denn direkt nach dem Programmstart ist das Konsolenfenster mit Sicherheit im Vordergrund, und dann kannst du mit
Code:
hWndDiesesFenster = GetForegroundWindow()
das Fensterhandle ganz einfach ermitteln.

Für ein schon laufendes externes Programm ist das etwas schwieriger, dafür sind die Programmzeilen rund um den Systemschnappschuß zuständig. Wenn du jedoch den VLC-Player von deinem Konsolenprogramm aus startest, ist die Sache wieder ganz einfach:
Code:
Shell "start C:\Programme\VideoVLC\vlc.exe" 'VLC-Player starten
Sleep 1000 'warten bis VLC-Player sicher gestartert ist
hWndVLC = GetForegroundWindow() 'fensterhandle vom VLC-Player ermitteln

Der Systemschnappschuß wird dann nicht mehr benötigt. Die Pfadangabe mußt du natürlich an deine Installation anpassen.

Als nächstes mußt du den VLC-Player dazu bringen, auf einen bestimmten Tastendruck (im Konsolenprogramm) hin ein bestimmtes Video abzuspielen.
Code:
SetForegroundWindow(hWndDiesesFenster)
Print "1 - Video 1"
Print "2 - Video 2"
Print "3 - Video 3"
Do
   g = InKey
   Select Case g
      Case "1"
         datei = "D:\videos\video1.avi"
         Exit Do
      Case "2"
         datei = "D:\videos\video2.avi"
         Exit Do
      Case "3"
         datei = "D:\videos\video2.avi"
         Exit Do   
   End Select
Loop
abspielen(datei)

Die Pfade und Namen der Videos mußt du natürlich wieder entsprechend anpassen. Und ja, es ist eine gute Idee, die Abspielroutine in einer Sub unterzubringen, und sei es nur, um die Lesbarkeit des Programms zu erhöhen:
Code:
Sub abspielen(datei As String)
   Dim As Integer y, kc
   Dim As String f
   
   SetForegroundWindow(hWndVLC)
   Sleep 100
   TastenSim("ctrl + o") 'datei öffnen - menü
   
   'abzuspielende datei eingeben
   TastenSim("shift + 2") 'anführungszeichen vorne
   For y = 0 To Len(datei) - 1 'dateinamen
      kc = VkKeyScan(datei[y]) 'in scancodes umwandeln
      Select Case HiByte(kc) 'umschalttasten
         Case 1
            f = "shift+"
         Case 2
            f = "ctrl+"
         Case 6
            f = "altgr+"
         Case Else
            f = ""
      End Select
      TastenSim(f + Chr(LoByte(kc))) 'tastendruck simulieren
   Next
   TastenSim("shift + 2") 'anführungszeichen hinten
   
   TastenSim(Chr(VK_RETURN)) 'return
   Sleep 1000 'warten, bis video abgespielt wird
      
End Sub


Das ganze (bis auf die noch anzupassenden Dateipfade) lauffähige Programm habe ich hierhin hochgeladen.

Zum perfekten Funktionieren fehlen noch einige Programmteile, wie beispielsweise zum automatischen Platzieren der Fenster, so daß sie sich nicht überdecken, aber ein bisschen Arbeit will ich auch noch für dich übriglassen, sonst verderbe ich am Ende noch deinen Charakter... zwinkern

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 09.12.2014, 23:05    Titel: Antworten mit Zitat

Boar, vielen, vielen Dank grindstone !!
Das muss ich mir erstmal zu Gemüte führen.
HAMMER !!!

vor Freude klatschen vor Freude klatschen vor Freude klatschen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.12.2014, 09:55    Titel: Antworten mit Zitat

Nur zur Info: Der VLC-Player besitzt ein sehr umfangreiches Kommandozeilenparameter-Arsenal, es gibt daher absolut keinen Grund, irgend ein hässliches SendKeys()-Gebastel zu verwenden, welches bei einem versehentlichen Mausklick-Fensterfokuswechsels zu hängenbleibenden Fenstern führt.

Zum Ausprobieren:
Code:
' Nicht in FB getestet, aber aus VBScript-Beispiel übernommen
Dim meinVideo As String, lErrLv
meinVideo "C:\Daten\MeinVideo.mpeg"
lErrLv = Shell(Environ("programFiles") + "\VideoLAN\VLC\vlc.exe --play-and-exit --fullscreen" + _
" --no-video-title-show " + meinVideo)
If lErrLv <> 0 Then
  ' Fehlerbehandlung
End If

d.h. so ziemlich jede gewünschte Eigenschaft lässt sich als Parameter übergeben. Selbst nur ein bestimmter Ausschnitt abspielen ist auf diese Weise möglich.

Siehe

https://wiki.videolan.org/VLC_command-line_help
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.12.2014, 12:17    Titel: Antworten mit Zitat

Diese spezielle Implementierung wiederum setzt voraus, dass VLC in sein Standardverzeichnis installiert wurde, was auch nicht sonderlich hübsch ist.
Wobei Videos in einem Spiel per VLC abzuspielen so oder so nicht hübsch ist. Was machen die Spieler, die VLC nicht installiert haben? In die Röhre gucken? Da wäre es fast schon sinnvoller, den Windows Media Player anzusteuern, der ist immerhin in allen Windows-Versionen bis auf die N-Versionen dabei...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 10.12.2014, 13:15    Titel: Antworten mit Zitat

@dreael:
Wirklich "sauber" ist die Methode über SendInput zugegebenermaßen nicht - dafür aber sehr universell. kay2016 hatte ja nur nach "einer Möglichkeit" gefragt, Videos abzuspielen. Den VLC-Player habe ich in dem Programmbeispiel verwendet, weil ich ihn selber bevorzugt benutze. Jeder andere per Tastatur steuerbare Player wäre auch gegangen.

Was die Kommandozeilenoptionen betrifft, so ist der VLC-Player wunderbar vielseitig, allerdings nur, wenn er damit gestartet wird. Eine Möglichkeit, per Kommandozeile Befehle an einen bereits laufenden Player zu schicken, habe ich noch nicht entdeckt. Falls du da mehr wissen solltest als ich: Lass mich an deiner Weisheit teilhaben!

@Jojo:
Ich hatte ja dazugeschrieben, daß der Pfad eventuell angepasst werden muß. Man könnte natürlich auch bei jedem Programmstart erst einmal die gesamte Festplatte nach der "vlc.exe" durchsuchen und, falls diese nicht vorhanden sein sollte, alternativ den Windows Media Player starten. Ist alles nur eine Frage der Implementierung...

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.12.2014, 13:49    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Was die Kommandozeilenoptionen betrifft, so ist der VLC-Player wunderbar vielseitig, allerdings nur, wenn er damit gestartet wird. Eine Möglichkeit, per Kommandozeile Befehle an einen bereits laufenden Player zu schicken, habe ich noch nicht entdeckt. Falls du da mehr wissen solltest als ich: Lass mich an deiner Weisheit teilhaben!

Erfahrung aus Veranstaltungsprojekte mit PowerPoint auf Grossleinwand: Dort hat es sich eigentlich bewährt, den VLC-Player nur temporär zu starten (also --play-and-exit). Heutige PCs mit ausreichend RAM cachen praktisch alles, so dass der VLC-Player daraufhin ziemlich schnell startet.

Ansonsten, wenn ein Prozess fortlaufend gesteuert werden soll: SendKeys() wenn immer möglich nur im Notfall verwenden, besser ist es mit der Windows Script Host-Automatisierungsschnittstelle zu arbeiten (ist z.B. bei Microsoft Office [Word, Excel und PowerPoint] und Internet Explorer recht gut ausgebaut). Bei den zuvor genannten Grossleinwand-Projekten habe ich in der Regel immer PowerPoint via VBScript-Automatisierungsschnittstelle angesteuert und für die Wiedergabe von Kurzfilme jeweils den VLC-Player in der gezeigten Art gestartet.

Für die FreeBasic-Windows-Experten: Ich meinte, dass wir in der Vergangenheit auch schon direkte Aufrufe ohne ein Hilfs-.VBS diskutiert hatten. Falls jemand einmal eine neue Programmierherausforderung in FB sucht: Kleine Demo-Anwendung bauen, die das Umgekehrte macht, also eine FreeBasic-Klasse bereitstellt, die man z.B. mit
Code:
' VBS-Beispiel
Option Explicit

Dim oMyFBApp, i

Set oMyFBApp = CreateObject("MyFreeBasicApp.Application")
oMyFBApp.callMethodFoo "Hallo Welt"
i = oMyFBApp.getValue
WScript.Echo "Wert von i:" & i

aus einem WSH-Script verwenden kann. Dürfte vermutlich auf ein .DLL-Projekt herauslaufen, wobei die vom FB-Compiler fertig erzeugte .DLL in der Registry passend registriert werden muss.

Falls das Ganze für ein Spielprojekt dienen soll: Ich weiss nur, dass in der Vergangenheit manche INSTALL.EXE auf Spiele-CD-ROMs u.a. die Laufzeitkomponenten für beispielsweise QuickTime mitinstalliert hat, um Multimedia-Inhalte eingebettet wiedergeben zu können -> am besten einmal nach entsprechenden APIs suchen (muss nicht zwingend QuickTime sein, sondern kann auch etwas vollkommen anderes sein).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 10.12.2014, 13:58    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
[...] die gesamte Festplatte nach der "vlc.exe" durchsuchen [...]

Das halte ich für eine sehr schlechte Lösung. Bei meinem System mit einer normalen HDD (also insbesondere keine SSD) und sehr vielen Dateien würde das wohl mehrere Stunden dauern. Besser wäre da z.B. in der Registry unter
HKLM\Software\VideoLAN\VLC\InstallDir nachzuschaun und wenn der Key nicht vorhanden ist den Nutzer zu fragen.


Programme per SendInput zu steuern halte ich auch für eine relativ hässliche Lösung (auch wenns funktioniert).
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.12.2014, 14:27    Titel: Antworten mit Zitat

Zu meiner Herausforderung: Unter

http://www.freebasic.net/forum/viewtopic.php?f=6&t=16254

hat sich im internationalen Forum bereits jemand an diese Aufgabe gewagt (geht um sog. COM-Objekte).

Zum eigentlichen hier diskutierten Problem:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd564679%28v=vs.85%29.aspx

d.h. der praktisch auf allen Windows-Versionen vorhandene Windows Media Player besitzt auch eine solche COM-Schnittstelle. => Diese würde es sich in diesem konkreten Fall lohnen, vertiefter anzuschauen, um die gewünschte Video-Sequenz eingebettet wiedergeben zu können => dann sind Dinge, wie Stoppen und Fortsetzen aus FB heraus gesteuert möglich.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 10.12.2014, 14:33    Titel: Antworten mit Zitat

St_W hat Folgendes geschrieben:

grindstone hat Folgendes geschrieben:
[...] die gesamte Festplatte nach der "vlc.exe" durchsuchen [...]

Das halte ich für eine sehr schlechte Lösung.

Das war jetzt eigentlich auch eher ironisch gemeint gewesen. Es würde ja vollkommen reichen, das Verzeichnis "Programme" zu durchsuchen... OK, ich hör ja schon auf zwinkern

Vielleicht ließe sich bei der Steuerung des VLC-Players ja über HTTP was machen. Ich werde mal ein bisschen rumprobieren.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.12.2014, 16:50    Titel: Antworten mit Zitat

Inzwischen ein kleines Beispiel mit VBScript "gezimmert":
Code:
' Einfaches Beispiel für Windows Media Player (WMPlayerDemo.vbs)

Option Explicit

Const WM_PLAYING = 3

Dim oMediaPlayer, oCtrl

Set oMediaPlayer = CreateObject("WMPlayer.OCX.7")
oMediaPlayer.settings.autoStart = false
oMediaPlayer.URL = "C:\Daten\Filme\Beispiel.avi"

Set oCtrl = oMediaPlayer.controls
oCtrl.play

' Demo-Teil: Wir lassen 10 Sekunden abspielen
WScript.Sleep 10000
' und halten den Film/Tondatei an
oCtrl.pause
' und warten 5 Sekunden
WScript.Sleep 5000
' und setzen wieder fort
oCtrl.play
' und lassen den Film/Tondatei zu Ende laufen
While oMediaPlayer.playState = WM_PLAYING
  WScript.Echo "Abspielposition: " & oCtrl.currentPosition
  WScript.Sleep 2000
Wend
WScript.Echo "Endstatus: " & oMediaPlayer.playState

Set oCtrl = Nothing
oMediaPlayer.close
Set oMediaPlayer = Nothing

Hauptproblem beim Testen via Windows Script Host: Nur Ton, d.h. kein Bild.

Für die COM-Programmierprofis: Jetzt wäre es also nur noch nötig, ein Bereich vom mit ScreenRes initialisierten fbgfxlib-Fenster als Bereich diesem Objekt mitgeben zu können, dann müsste auch das Bild erscheinen.

Mit der Methode openPlayer bekam ich zwar ein Fenster und Bild, dafür aber gehorchte das Controls-Objekt nicht mehr auf pause und play.

Ansonsten ist bereits mit dem Ton ersichtlich, dass Stoppen (Pausieren) und Fortsetzen soweit ohne Probleme möglich sind. => Damit müsste also fürs ursprüngliche Projekt die gewünschte Ansteuerung ohne SendKeys() möglich sein.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 11.12.2014, 01:07    Titel: Antworten mit Zitat

Hallo!

Kann mir jemand verraten, warum ich mit
Code:
Print GetWindowLong(hWndVLC,GWL_WNDPROC)

(bei laufendem VLC-Player) eine 0 zurückbekomme? Alle anderen Flags funktionieren.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.12.2014, 08:55    Titel: Antworten mit Zitat

Äh, warum solltest du so einfach an die Window Procedure eines fremden Fensters gelangen können? Was würde dir der zurückgegebene Wert sagen? Das ist ein Pointer auf einen Adressbereich, der dir nicht mal gehört!
Zitat:
You cannot change this attribute if the window does not belong to the same process as the calling thread.


Außerdem sollte man heutzutage wegen der 64-Bit-Kompatibilität GetWindowLongPtr mit GWLP_WNDPROC verwenden, wenn überhaupt.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 11.12.2014, 11:55    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
warum solltest du so einfach an die Window Procedure eines fremden Fensters gelangen können?


Weil ich den entsprechenden Prozess zuvor mit
Code:
CreateProcess(0,"C:\Programme\VideoVLC\vlc.exe",@sa,0,TRUE,0,0,0,@siVLC,@pi)
als Kindprozess gestartet habe. Jetzt möchte ich die WndProc hooken, um den Messagestrom, der dort durchrauscht, zu analysieren. Aber dazu brauche ich den Pointer auf die WndProc.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 11.12.2014, 13:32    Titel: Antworten mit Zitat

naja du konntest wahrscheinlich auch einfach libVLC nutzen

https://wiki.videolan.org/LibVLC/
https://wiki.videolan.org/GenerateLibFromDll/

Das Beispiel ist in C geschrieben:
https://wiki.videolan.org/LibVLC_Tutorial/

Es wird natürlich nicht ganz einfach die lib und header datei zu erzeugen, alle Abhängigkeiten aufzulösen, aber wenn die Umgebung eingerichtet ist und es läuft, kannst du die volle Funktionalität von VLC nutzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.12.2014, 19:28    Titel: Antworten mit Zitat

grindstone: Auch ein Kindprozess ist nicht dein Prozess, insbesondere hat auch ein Kindprozess seinen eigenen Adressraum!
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz