none
msvidctl - Netzwerktyp des Input-Devices ermitteln RRS feed

  • Frage

  • Hallo,

    in meinem System befinden sich ein Doppel-Sat-Tuner (DVB-S) und ein USB-DVB-T-Tuner.
    Mit folgendem Code ermittele ich die verfügbaren BDA-Input-Devices:

        Dim impdev As MSVidInputDevice
        For Each impdev In vidctl.InputsAvailable(clsidBDATuners)
          TextBox1.Text += impdev.ClassID + " - " + impdev.Name + vbCrLf
        Next

    Das Ergebnis sieht wie folgt aus:

    {A2E3074E-6C3D-11D3-B653-00C04F79498E}
    - \\?\pci#ven_11bd&dev_0040&subsys_004511bd&rev_00#4&1add88a5&0&00f0#{71985f48-1ca1-11d3-9cc8-00c04f7971e0}\{3337a69e-1c6e-4797-8955-65caeb31e593}
    {A2E3074E-6C3D-11D3-B653-00C04F79498E}
    - \\?\pci#ven_11bd&dev_0041&subsys_004511bd&rev_00#4&1add88a5&0&01f0#{71985f48-1ca1-11d3-9cc8-00c04f7971e0}\{3337a69e-1c6e-4797-8955-65caeb31e593}
    {A2E3074E-6C3D-11D3-B653-00C04F79498E}
    - \\?\usb#vid_0ccd&pid_0043#5&278a3c80&0&6#{71985f48-1ca1-11d3-9cc8-00c04f7971e0}\{7c8095ab-c110-40e5-9f4d-310858bbbf64}

    Alle 3 Tuner werden gefunden, nur wie kann ich unterscheiden, welche der Tuner die DVB-S-Tuner sind und welches der DVB-T-Tuner ist?
    Ich weiß natürlich, dass die ersten 2 Einträge die Sat-Tuner sind, nur wie kann ich das per Code ermitteln?
    Die ClassIDs sind leider gleich und in der InputDeviceStruktur finde ich keinen Eintrag, mit dem ich den NetzwerkTyp ermitteln kann.

    Gruß, Ralli
    • Bearbeitet Ralliwan Sonntag, 21. Juni 2009 15:45
    Sonntag, 21. Juni 2009 15:16

Antworten

  • Hallo Ralliwan,

    vorausgeschickt: Ich habe nicht wirklich Ahnung vom Thema und dem Objektmodell und auch keine entsprechende Hardware, um hier selber Tests zu fahren. Aber was Du da als Ausgaben von impdev.Name erhalten hast, sieht mir weniger nach dem DevName als vielmehr nach dem DevPath aus. Eigentlich sollte der DevName ein "Friendly Name" sein, also eine menschenlesbare Produktbezeichnung. Wie werden diese Geräte denn im Gerätemanager angezeigt?

    Wenn ich das SDK richtig verstehe, gibt es eine so fixierte Gerätezuordnung wie Du sie suchst wahrscheinlich nicht. Sondern es gibt die sogenannten TuningSpaces. Darüber kannst Du hier eine Menge erfahren (nicht aus Entwicklersicht, aber zur aufschlussreichen Info): http://blogs.msdn.com/peterrosser/archive/2006/04/03/MCE_TechTalk_1.aspx . Interessant sind darin sicher auch die Registry-Pfade. Schau doch mal in Deiner Registry nach, ob unter den DevName-Einträgen tatsächlich die erhaltenen Gerätepfadausgaben hinterlegt sind - das wäre dann ein Treiberfehler, der sich ebenso auf den Gerätemanager auswirken würde.

    Sei Dir bitte dessen bewusst, dass ich hier eher philosophiere, als technisch akkurate Informationen gewähren zu können - aber ich habe den Eindruck, dass ein/ein jeder TuningSpace für DVB-S (DVBSTuningSpace ) die Guid {B64016F3-C9A2-4066-96F0-BD9563314726} und ein/ein jeder TuningSpace für DVB-T/-C (DVBTuningSpace ) die Guid {C6B14B32-76AA-4A86-A7AC-5C79AAF58DA7} trägt.

    Ich bin mir dessen bewusst, dass das nicht gerade direkt zum Ziel führt - aber vielleicht ist der eine oder andere brauchbare Tipp für Dich dabei. Vielleicht auch der eine oder andere Unsinn. ;-)

    Viel Erfolg!

    Hi,

    deine Ansätze sind sehr gut. Habe viel nachgedacht, gelesen und ausprobiert, aber zum Ziel bin ich dann doch leider nicht gekommen.
    Vielleicht verstehe ich das Ganze einfach noch nicht richtig.

    Im Gerätemanager werden die Tuner wie folgt aufgeführt:

    Pinnacle PCTV DVB-S Tuner 1
    Pinnacle PCTV DVB-S Tuner 2
    Cynergy T USB XS (Rev.1)

    In der Registry findet man zusätzlich auch noch folgende Strings:

    Pinnacle Stargate
    Pinnacle Stargate
    Cynergy T USB XS

    Aber auch in der Registry habe ich noch keinen Hinweis darauf gefunden, um welche Netzform es sich handelt.
    Und selbst wenn es dort zu finden wäre, fände ich es doch sehr umständlich in der Registry danach zu suchen.

    Ich muss im MSVidCtl gezielt einen Tuner wählen und diesen dann gezielt mit dem richtigen TuningRequest (TuningSpace) füttern.
    Also muss ich doch wissen, um welche Tunerart es sich handelt, um die richtige Auswahl zu treffen.
    Man könnte die Exceptions auswerten, falls man einen Tuner einen falschen TuningSpace zugewiesen hat, aber soll das der Weg sein, um die Netzform zu ermitteln?

    Sollte man wirklich den Weg über die TuningSpaces gehen müssen, so würde ich darüber die DVB-S-Tuner nicht finden, denn ein DVB-S-TuningSpace ist in meinem System nicht vorhanden, obwohl es 2 DVB-S-Tuner gibt.

    Wie du schon sagtest, die Lösung meines Problemes werde ich wahrscheinlich über die TuningSpaces finden, nur scheint mir im Moment noch irgend ein wichtiges Puzzleteil zu fehlen...

    Gruß, Ralli
    Dienstag, 23. Juni 2009 22:07

Alle Antworten

  • Hallo Ralliwan,

    Ich sehe in dem langen String Ergebnis dass wo "pci#ven" auftaucht handelt es sich um einen DVB-S-Tuner und wo  "usb#vid" auftaucht handelt es sich um einen DVB-T-Tuner.

    Folgender Code nimmt dieses Ergebnis und sagt was es nach der Reihe enthält (DVB-S-Tuner oder DVB-T-Tuner).

    	Dim mypos01 As Integer = 0
            	Dim myText As String = ""
            	Dim counter As Integer = 0
    
            myText = TextBox1.Text
    
            Do
    
                mypos01 = InStr(myText, "{A2E3074E-6C3D-11D3-B653-00C04F79498E}")
                counter = counter + 1
    
                Select Case Mid(myText, mypos01 + 45, 7)
                    Case "pci#ven"
                        MsgBox(counter.ToString + " Erscheinung ist ein Doppel-Sat-Tuner [DVB-S-Tuner]")
                    Case "usb#vid"
                        MsgBox(counter.ToString + " Erscheinung ist ein USB-DVB-T-Tuner [DVB-T-Tuner]")
                End Select
    
                myText = Mid(myText, mypos01 + 52, Len(myText) - 52)
    
            Loop Until mypos01 = 0
    Grüße,
    Montag, 22. Juni 2009 15:07
    Moderator
  • Hallo Ralliwan,

    vorausgeschickt: Ich habe nicht wirklich Ahnung vom Thema und dem Objektmodell und auch keine entsprechende Hardware, um hier selber Tests zu fahren. Aber was Du da als Ausgaben von impdev.Name erhalten hast, sieht mir weniger nach dem DevName als vielmehr nach dem DevPath aus. Eigentlich sollte der DevName ein "Friendly Name" sein, also eine menschenlesbare Produktbezeichnung. Wie werden diese Geräte denn im Gerätemanager angezeigt?

    Wenn ich das SDK richtig verstehe, gibt es eine so fixierte Gerätezuordnung wie Du sie suchst wahrscheinlich nicht. Sondern es gibt die sogenannten TuningSpaces. Darüber kannst Du hier eine Menge erfahren (nicht aus Entwicklersicht, aber zur aufschlussreichen Info): http://blogs.msdn.com/peterrosser/archive/2006/04/03/MCE_TechTalk_1.aspx. Interessant sind darin sicher auch die Registry-Pfade. Schau doch mal in Deiner Registry nach, ob unter den DevName-Einträgen tatsächlich die erhaltenen Gerätepfadausgaben hinterlegt sind - das wäre dann ein Treiberfehler, der sich ebenso auf den Gerätemanager auswirken würde.

    Sei Dir bitte dessen bewusst, dass ich hier eher philosophiere, als technisch akkurate Informationen gewähren zu können - aber ich habe den Eindruck, dass ein/ein jeder TuningSpace für DVB-S (DVBSTuningSpace) die Guid {B64016F3-C9A2-4066-96F0-BD9563314726} und ein/ein jeder TuningSpace für DVB-T/-C (DVBTuningSpace) die Guid {C6B14B32-76AA-4A86-A7AC-5C79AAF58DA7} trägt.

    Ich bin mir dessen bewusst, dass das nicht gerade direkt zum Ziel führt - aber vielleicht ist der eine oder andere brauchbare Tipp für Dich dabei. Vielleicht auch der eine oder andere Unsinn. ;-)

    Viel Erfolg!
    Montag, 22. Juni 2009 15:58
  • Hi Robert,

    das funktioniert sicherlich in meinem Fall, aber funktioniert es denn auch bei anderen Tunerkarten?
    Sicherlich gibt es auch SAT-Tuner auf USB-Basis und DVB-T-Tuner auf PCI-Basis.
    Man müsste mal die Strings von weiteren Tunern sehen um eine genaue Aussage zu machen.

    Gruß, Ralli


    Dienstag, 23. Juni 2009 21:34
  • Hallo Ralliwan,

    vorausgeschickt: Ich habe nicht wirklich Ahnung vom Thema und dem Objektmodell und auch keine entsprechende Hardware, um hier selber Tests zu fahren. Aber was Du da als Ausgaben von impdev.Name erhalten hast, sieht mir weniger nach dem DevName als vielmehr nach dem DevPath aus. Eigentlich sollte der DevName ein "Friendly Name" sein, also eine menschenlesbare Produktbezeichnung. Wie werden diese Geräte denn im Gerätemanager angezeigt?

    Wenn ich das SDK richtig verstehe, gibt es eine so fixierte Gerätezuordnung wie Du sie suchst wahrscheinlich nicht. Sondern es gibt die sogenannten TuningSpaces. Darüber kannst Du hier eine Menge erfahren (nicht aus Entwicklersicht, aber zur aufschlussreichen Info): http://blogs.msdn.com/peterrosser/archive/2006/04/03/MCE_TechTalk_1.aspx . Interessant sind darin sicher auch die Registry-Pfade. Schau doch mal in Deiner Registry nach, ob unter den DevName-Einträgen tatsächlich die erhaltenen Gerätepfadausgaben hinterlegt sind - das wäre dann ein Treiberfehler, der sich ebenso auf den Gerätemanager auswirken würde.

    Sei Dir bitte dessen bewusst, dass ich hier eher philosophiere, als technisch akkurate Informationen gewähren zu können - aber ich habe den Eindruck, dass ein/ein jeder TuningSpace für DVB-S (DVBSTuningSpace ) die Guid {B64016F3-C9A2-4066-96F0-BD9563314726} und ein/ein jeder TuningSpace für DVB-T/-C (DVBTuningSpace ) die Guid {C6B14B32-76AA-4A86-A7AC-5C79AAF58DA7} trägt.

    Ich bin mir dessen bewusst, dass das nicht gerade direkt zum Ziel führt - aber vielleicht ist der eine oder andere brauchbare Tipp für Dich dabei. Vielleicht auch der eine oder andere Unsinn. ;-)

    Viel Erfolg!

    Hi,

    deine Ansätze sind sehr gut. Habe viel nachgedacht, gelesen und ausprobiert, aber zum Ziel bin ich dann doch leider nicht gekommen.
    Vielleicht verstehe ich das Ganze einfach noch nicht richtig.

    Im Gerätemanager werden die Tuner wie folgt aufgeführt:

    Pinnacle PCTV DVB-S Tuner 1
    Pinnacle PCTV DVB-S Tuner 2
    Cynergy T USB XS (Rev.1)

    In der Registry findet man zusätzlich auch noch folgende Strings:

    Pinnacle Stargate
    Pinnacle Stargate
    Cynergy T USB XS

    Aber auch in der Registry habe ich noch keinen Hinweis darauf gefunden, um welche Netzform es sich handelt.
    Und selbst wenn es dort zu finden wäre, fände ich es doch sehr umständlich in der Registry danach zu suchen.

    Ich muss im MSVidCtl gezielt einen Tuner wählen und diesen dann gezielt mit dem richtigen TuningRequest (TuningSpace) füttern.
    Also muss ich doch wissen, um welche Tunerart es sich handelt, um die richtige Auswahl zu treffen.
    Man könnte die Exceptions auswerten, falls man einen Tuner einen falschen TuningSpace zugewiesen hat, aber soll das der Weg sein, um die Netzform zu ermitteln?

    Sollte man wirklich den Weg über die TuningSpaces gehen müssen, so würde ich darüber die DVB-S-Tuner nicht finden, denn ein DVB-S-TuningSpace ist in meinem System nicht vorhanden, obwohl es 2 DVB-S-Tuner gibt.

    Wie du schon sagtest, die Lösung meines Problemes werde ich wahrscheinlich über die TuningSpaces finden, nur scheint mir im Moment noch irgend ein wichtiges Puzzleteil zu fehlen...

    Gruß, Ralli
    Dienstag, 23. Juni 2009 22:07
  • Hallo Ralli,

    Es gibt noch ein Dienstprogramm das auflistet alle USB und PCI Geräte vom System mit deren Beschreibung.

    DevCon command-line utility à http://support.microsoft.com/kb/311272

    Für USB der Befehl wurde lauten: devcon find usb\*

    Für PCI der Befehl wurde lauten: devcon find pci\*

    Du kannst den Befehl von cmd.exe laufen lassen aber Du sollst cmd.exe mit Administrator Rechte starten.

    Grüße,

    Robert

    Donnerstag, 10. September 2009 12:44
    Moderator