THandle und weiteres für den Zugriff auf ein anderes Program

Rund um die LCL und andere Komponenten
Antworten
hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

THandle und weiteres für den Zugriff auf ein anderes Program

Beitrag von hubblec4 »

Hallo Lazarusgemeinde

Ich hätte heute mal ein paar fragen zu besagtem Thema.

Was möchte ich machen.
Ich möchte ein kleines Tool schreiben was Matroska Dateien besser handhabt. Um Matroska Dateien abzuspielen braucht man logicherweise einen Player, dann noch einen Splitter und Video/Audio/Sub-Codecs. Das alles macht bei mir der MPC-HC und der LAV-Filter.
Allerdings ist der Matroska Support nicht ausreichend(für meine Wünsche).
Um das native Matroska Menu zum laufen zubringen müsste man einen neuen Matroska-Splitter schreiben, da kenne ich mich aber zu wenig aus.

Mein Vorhaben sieht wie folgt aus.
Ich würde gerne das Fenster von MPC-HC "fangen" wollen, damit ich so eine art Rahmen drumerhum legen kann um die Mouseposition zu ermitteln.
Weiterhin bräuchte ich Buttons auf die geklickt werden kann, aber die Buttons sollten nicht unbedingt sichtbar sein.
Es geht darum so eine art Klickbares Menü zu haben wie man es von DVD kennt, allerdings nicht so komplex.

Ich habe dazu schon ein kleines Test-Tool gebastelt was mir den Handle vom MPC-HC liefert. Kann ich jetzt mit diesem Handle, was ja auf die MPC-HC Main Form zeigt, dort neue Buttons zur Laufzeit setzen. Wie mache ich aus dem Handle(was ja nur eine Zahl ist) eine variable vom type TForm.
Ganz naiv mal gedacht:

Code: Alles auswählen

TForm(Handle(MPC_HC)) // geht das?


Ich hatte auch schon bissl gegoogelt und es scheint wohl für Linux nicht so einfach zu gehen, da dieses THandle ein Windows Konzept ist.
Könnte man das dennoch für Linux machen? Ich habe gesehen das in Lazarus bereits VLC Komponenten vorhanden sind, vielleicht kann man da ja direkt an der VLC Oberfläche estwas manipulieren.

hubble

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: THandle und weiteres für den Zugriff auf ein anderes Pro

Beitrag von braunbär »

hubblec4 hat geschrieben:Ganz naiv mal gedacht:

Code: Alles auswählen

TForm(Handle(MPC_HC)) // geht das?




Nein, das kann nicht gehen aus einem externen Programm kannst du keine FPC TForm machen. Eine TForm ist mehr als nur ein Windows Formular. Das ist eine FPC-Klasse, die eine Menge Verhalten und Eigenschaften einer Windows bzw. Linux Form kapselt, darüber hinaus aber auch beeinflusst (d.h. diese Werte sind nicht im Windows Formular gespeichert, sondern nur in der FPC TForm und steuern das Verhalten der FPC TForm-Methoden). Das Form-Handle ist eine der Properties, die das Windows auch kennt, aber woher sollte denn das Programm alle anderen relevanten Werte nehmen?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: THandle und weiteres für den Zugriff auf ein anderes Pro

Beitrag von wp_xyz »

Studiere den Code in (fpc)/packages/libvlc/src und in (lazarus)/components/vlc. Dort wird etwas ähnliches gemacht, nämlich den VLC-Player verfügbar zu machen und in einem Fenster einzubauen.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: THandle und weiteres für den Zugriff auf ein anderes Pro

Beitrag von hubblec4 »

@braunbär
Danke für die Erklärung, sowas dachte ich mir schon.
Eigentlich wollte ich auch nicht direkt neue Buttons in MPC-HC erstellen, vielmehr sollten die neuen Buttons über der MPC-HC Form "schweben", damit beim MouseOver nicht mehr ins Bild geklickt wird sondern auf den Button, der dann zu meinem Programm gehört.


@wp_xyz
Ja das werde ich mir aufjedenfall mal anschauen.


Da wäre noch etwas:
Ich müsste auch auf den LAV Splitter zugreifen, dort gibt es aber keine GUI-Form. Es gibt zwar ein Tray-Icon, aber das muss nicht immer aktiv sein(LAV-Einstellungen).
Im Tray-Icon ist ein kleines Menü wo man die Audio und Untertitel Spur wechseln kann, ebenso die Editions. Aufjedenfall denke ich das es ein Popupmenu ist mit MenuItems auf die man klickt und dann werden die gewünschten Aktion ausgeführt. Das ganze macht man mit der Mouse, Rechts-Klick auf das Tray-Icon und noch ein Klick auf das entsprechende Item.
Das ganze würde ich gerne von meinem Programm aus "fernsteuern" wollen.

Mit WinSpy wollte ich da bisschen was auslesen aber ich finde da nicht so richtig was.

Antworten