VLC-Player im UserControl1 Fernsteuern von Form1

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    VLC-Player im UserControl1 Fernsteuern von Form1

    Moin! :)
    Ich möchte ein Programm programmieren, mit diesem man den VLC-Player fernsteuern kann.
    Wenn der Player gestartet ist, kann man auf „Abspielen“ klicken oder auf „Stopp“.
    Einfach ein kleines Tool um den VLC-Player fernzusteuern.

    Ich habe mein Programm soweit, dass man auf „Starten!“ klickt, und der Player wird gestartet.
    Jetzt kann man auf „Stumm schalten!“ klicken.
    Ich habe ein UserControl1 gebastelt, mit dieser ich den Player starten kann.
    Auf der Hauptform befindet sich ein TabControl1 in diesen er Tabs erstellt mit den UserControls.
    Jetzt möchte ich von außen (Form1) auf „Stumm schalten!“ klicken.
    Nun wird der VLC-Player Stumm geschaltet!

    Soweit so gut….
    Aber wenn ich einen neuen Tab mit „NEW TAB“ erstelle.
    Und dann auf „Starten!“ klicke und verschiedene VLC-Player Instanzen geöffnet sind.
    Wird nicht für jede Instanz die Fernsteuerung z.B Stumm schalten ausgeführt.
    Weil es verschiedene VLC_Handle & VLC_ID Werte bekommt.
    Ich hoffe ich könnte das Problem gut beschreiben und freue mich auf eure Hilfe.

    In der UserContol1.vb ab Zeile 15 befindet sich dieser Code.
    Ich bin der Meinung, dass Problem liegt in dieser Sub.

    VB.NET-Quellcode

    1. Private Sub SET_VLCPlayerSETTINGS()
    2. ' Diese Sub muss ich verbessern...
    3. Dim prog As String = System.IO.Path.GetFileNameWithoutExtension(Me.txtVLCPlayerPfad.Text)
    4. Dim p() As Process = Process.GetProcessesByName(prog)
    5. If p.Length = 0 Then Exit Sub
    6. VLC_Handle = p(0).MainWindowHandle ' !
    7. VLC_ID = p(0).Id ' !
    8. End Sub

    VB.NET-Quellcode

    1. Private Sub btnTon_Click(sender As Object, e As EventArgs) Handles btnTon.Click
    2. Dim prozessName As String = "vlc"
    3. Dim prozesse() As Process = Process.GetProcessesByName(prozessName)
    4. If prozesse.Length = 0 Then Exit Sub
    5. SET_VLCPlayerSETTINGS()
    6. SetForegroundWindow(CLng(VLC_Handle))
    7. SendKeys.SendWait("m")
    8. End Sub


    Mein Lösungsweg wäre, folgender:
    Ich muss irgendwie für jeden „NEW TAB“ die Settings wie VLC-Handle und VLC _ID speichern und bei der Sub btnTon_Click verarbeiten.
    Aber wie? ?(
    Bin sehr dankbar, für jede Hilfe.


    vb-paradise.de/index.php/Attachment/54013/
    (Im Anhang mein Projekt!)

    BIG THX


    edit1:
    @an alle
    Ich habe das Problem nun gelöst. :)
    Ich habe das ausgewählte Tab Index verwendet.
    Und dies in eine Variable gepackt, und mit Index zugegriffen.

    Dim ausgewaehlterTabIndex As Integer = TabControl1.SelectedIndex
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Cheffboss“ ()

    Naja, wenn Du GetProcessesByName (der Name fer Methode enthält ja schon einen Plural!) benutzt, aber dann nur p(0) hernimmst, wird eben nur der erste VLC-Prozess hergenommen und dessen Daten gespeichert. Du musst schon alle speichern, um auf alle zugreifen zu lönnen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    @Cheffboss Wie hast Du SetForegroundWindow() deklariert? Bei mir steht da ein IntPtr drinne.
    Und:
    Wie viele VLC-Player willst Du denn gleichzeitig aktiv haben :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @an alle
    Danke, für eure Antwort.

    Ich möchte den Code so haben, dass ich beliebig viele VLC-Player Instanzen erstelle.
    Und jedes davon einzeln fernzusteuern.
    Das WindowHandle kann ich mit MainWindowHandle auslesen.
    Und dies in eine String-liste eingefügt.
    Aber leider bekomme ich es nicht hin, die richtige Instanz z.B Stumm geschaltet wird.
    Kann mir jemand einen Denkanstoß geben?

    (alter code gelöscht)
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Cheffboss“ ()

    Was'n das für Code? Der ist ja unvollständig. Zeile#5: If p.Length = 0 Then und dann eine For-Schleife, die alle p-Einträge durchgeht. Und dann fehlt ggf. ein Else und End If. Durch solches Codeposting wird die Logik verändert und wir können nicht vernünftig helfen. Denn dann machen wir Vorschläge und weisen auf Fehler hin und Du antwortest: »Neenee, der echte Code ist eigentlich an der Stelle gaaanz anders.«

    In TONAN verwendest Du ja wieder nur die Null: bei AllHandle(0). Du musst schon jedem Tab ein Handle zuordnen können. Im einfachsten Fall gilt: TabPage1 = Handle0, TabPage2 = Handle1, …
    Und dann eben eben beim Aufruf von TONAN schauen, welche TabPage aktiv ist und dann bei AllHandle den richtigen Index verwenden.

    btw: Die Benennung ist ausbaufähig. Beispiele:
    • TONAN: groß, deutsch, gibt keinen Imperativ (Befehl an - ein Verb fehlt
    • AllHandle: englisch, camel case, falscher Plural

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.