sudden
Goto Top

Der Pfad eines Programmes soll überall funktionieren

Hallo Admins,

ich habe ein paar Probleme mit einem kleinen Programm was ich geschrieben habe.
Und zwar ist es ein Programm das mir meine Wiedergabegeräte anzeigt. Ich kann diese auch mit Hilfe eines kleinen Tools (EndPointControler) auswählen. Was mich stört, ist das ich den Pfad vom EndPointControler angeben muss, dieser aber selbstverständlich abweicht, wenn ich das Programm auf einem anderen Rechner ausführe. Ist es möglich das irgendwie zu vereinfachen? Kann ich das Programm und den EPC in einen Ordner packen, sodass es von dort aus ausgeführt wird, egal auf welchem PC es ausgeführt wird?
Dann noch etwas. Wenn ich mein Programm starte ist das aktive Wiedergabegerät immer als erstes in meiner ListBox aufgeführt, d.h.: Headset ist auf dem Index 0, jedoch ist beim EPC die Reihenfolge immer gleich. z.B.:

C:\>EndPointController.exe
Audio Device 0: Digital Output Device (HDMI TX0) (VIA High Definition Audio)
Audio Device 1: SPDIF Interface (TX1) (VIA High Definition Audio)
Audio Device 2: Headphone (VIA High Definition Audio)
Audio Device 3: Speakers (VIA High Definition Audio)

Wenn ich jetzt also den Index 2 auswähle, weil in meinem Programm die Speaker dort angezeigt werden, wähle ich stattdessen erneut die Headphones aus. Wie kann ich das bewerkstelligen, dass beide Listen synchron laufen?

Hier noch mein code:

'Pruefen ob eine Soundkarte im System installiert ist und auflisten der vorhandenen Soundkarten  
Option Explicit On
Option Strict On

Imports Microsoft.DirectX
Imports Microsoft.DirectX.DirectSound

Public Class Form1

    ' List der vorhandenen Soundkarten im System ermitteln  
    Public Class GetSoundDevices

        ' Rueckgabe der gefundenen Soundkarten  
        Public Shared ReadOnly Property DeviceList() As List(Of String)
            Get
                Return GetDeviceList()
            End Get

        End Property

        ' Soundkarten ermitteln  
        ' Rueckgabe der gefundenen Soundkarten an eine List(...)  
        Private Shared Function GetDeviceList() As List(Of String)
            Dim List As New List(Of String)
            Dim DeviceList As New DevicesCollection
            Try
                Dim n As Integer = 0
                Do While n < DeviceList.Count
                    List.Add(DeviceList(n).Description)
                    n += 1
                Loop
            Catch ex As Exception
                Throw New Exception(ex.Message.ToString())
            End Try
            Return List
        End Function

    End Class

    ' Pruefen ob im System eine Soundkarte installiert ist  
    Public Class DirectX_SoundkarteInstalliert

        ' Rueckgabe ob eine Soundkarte gefunden wurde. True - es wurde eine Soundkarte gefunden sonst False  
        Public Shared ReadOnly Property SoundkarteInstalliert() As Boolean
            Get
                Return GetSoundCard()
            End Get
        End Property

        ' Soundkarten ermitteln  
        Private Shared Function GetSoundCard() As Boolean
            Dim Result As Boolean = False
            Try
                Dim Device As DirectSound.Device = New DirectSound.Device()

                If Device = Nothing Then
                    Result = False
                Else
                    Result = True
                End If
            Catch ex As Exception
                Throw New Exception(ex.Message.ToString())
            End Try
            Return Result
        End Function
    End Class


    ' Initialisierung  
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles MyBase.Load
        With Me
            .CenterToScreen()
            .Text = "SoundSwitch"  
        End With
        ListBox1.Items.Clear()
        Try
            'Ist eine Soundkarte im System vorhanden?...  
            Dim IstInstalliert As Boolean = DirectX_SoundkarteInstalliert.SoundkarteInstalliert()
            Select Case IstInstalliert
                '...wenn ja ...  
                Case True
                    '... wird versucht eine Liste der vorhandenen Geraete anzulegen...  
                    Dim List As New List(Of String)(GetSoundDevices.DeviceList())
                    '... enthaelt die Liste Daten?... dann ...  
                    If List IsNot Nothing Then
                        '... wird die Liste in einer Schleife durchlaufen und das Ergebnis  
                        'in einer ComboBox aufgelistet  
                        For Each Devices As String In List
                            Me.ListBox1.Items.Add(Devices)
                        Next
                        If Me.ListBox1.Items.Count > 0 Then
                            'Erstes Item in der ListBox selektieren  
                            'Me.ListBox1.SelectedIndex = 1  
                        End If
                    End If
                Case Else
                    '... wenn keine Soundkarte gefunden werden konnte :  
                    MessageBox.Show("Es ist keine Soundkarte installiert!")  
            End Select
            'Eventuell auftretenden Fehler abfangen.  
        Catch ex As Exception
            Throw New Exception(ex.Message.ToString())
        End Try
        'Primärer Soundtreiber? Was soll das?  
        ListBox1.Items.RemoveAt(0)
        Me.Hide()
        NotifyIcon1.Visible = True
        NotifyIcon1.ShowBalloonTip(1500, "SoundSwitch", "", ToolTipIcon.Info)  

    End Sub

    ' Funktionsauswertung  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button1.Click
        ListBox1.Items.Clear()
        Try
            'Ist eine Soundkarte im System vorhanden?...  
            Dim IstInstalliert As Boolean = DirectX_SoundkarteInstalliert.SoundkarteInstalliert()
            Select Case IstInstalliert
                '...wenn ja ...  
                Case True
                    '... wird versucht eine Liste der vorhandenen Geraete anzulegen...  
                    Dim List As New List(Of String)(GetSoundDevices.DeviceList())
                    '... enthaelt die Liste Daten?... dann ...  
                    If List IsNot Nothing Then
                        '... wird die Liste in einer Schleife durchlaufen und das Ergebnis  
                        'in einer ComboBox aufgelistet  
                        For Each Devices As String In List
                            Me.ListBox1.Items.Add(Devices)
                        Next
                        If Me.ListBox1.Items.Count > 0 Then
                            'Erstes Item in der ListBox selektieren  
                            'Me.ListBox1.SelectedIndex = 1  
                        End If
                    End If
                Case Else
                    '... wenn keine Soundkarte gefunden werden konnte :  
                    MessageBox.Show("Es ist keine Soundkarte installiert!")  
            End Select
            'Eventuell auftretenden Fehler abfangen.  
        Catch ex As Exception
            Throw New Exception(ex.Message.ToString())
        End Try
        'Primärer Soundtreiber? Was soll das?  
        ListBox1.Items.RemoveAt(0)
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        If ListBox1.SelectedIndex = 1 Then Process.Start("C:\Users\Desktop\Desktop\ProjektENDE\EndPointController.exe", "1")  
        If ListBox1.SelectedIndex = 0 Then Process.Start("C:\Users\Desktop\Desktop\ProjektENDE\EndPointController.exe", "0")  
    End Sub
End Class

MfG,

Sudden

Content-Key: 235585

Url: https://administrator.de/contentid/235585

Printed on: April 19, 2024 at 16:04 o'clock

Member: Sheogorath
Sheogorath Apr 15, 2014 at 08:55:14 (UTC)
Goto Top
Moin,

Du könntest wenn es nicht allgemein gelegen ist (%programfiles(x86)%), aber dennoch installiert den Pfad aus der Registry auslesen (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall) bzw. wow64 wenn es um x64 geht.

Gruß
Chris
Member: lenny4me
lenny4me Apr 15, 2014 at 09:00:53 (UTC)
Goto Top
Hallo,

was spricht denn dagegen das Ding in einen Ordner zu packen und denn via \\%computername%\pfad\[..].exe darauf zuzugreifen?


Grüße
Member: colinardo
colinardo Apr 15, 2014 updated at 09:18:04 (UTC)
Goto Top
Zitat von @Sudden:
Was mich stört, ist das ich den Pfad vom EndPointControler angeben muss, dieser aber selbstverständlich abweicht, wenn ich das Programm auf einem anderen Rechner ausführe. Ist es möglich das irgendwie zu vereinfachen?
Der aktuellen Pfad deines Programmes erhältst du immer mit
My.Application.Info.DirectoryPath
oder
Application.StartupPath
Grüße Uwe
Member: Sudden
Sudden Apr 15, 2014 at 10:13:27 (UTC)
Goto Top
Das verstehe ich nicht. Wenn ich mein Programm weitergebe ist es gepackt. wenn es dann entpackt wird, liegen mein SoundSwitch.exe und EndPointController.exe in einem Ordner wie soll ich jetzt meinen Pfad im Code bei
Process.Start("C:\Users\Desktop\Desktop\ProjektENDE\EndPointController.exe", "1")  

so ändern das er den EPC immer aus dem aktuellen Ordner nimmt, also wo auch mein Programm liegt?

Hat noch jemand ne Idee wegen der Reihenfolge vom EPC und meinem Programm? Also wie ich das in den Griff bekomme?

MfG,

Sudden
Member: colinardo
colinardo Apr 15, 2014 updated at 10:25:57 (UTC)
Goto Top
mit dir ist es wirklich schwer .....
Process.Start(My.Application.Info.DirectoryPath & "\EndPointController.exe", "1")
Member: Sudden
Sudden Apr 15, 2014 at 10:30:31 (UTC)
Goto Top
mit dir ist es wirklich schwer .....

Ja ich weiß. Ich bin aber auch sehr dankbar für deine Hilfe face-smile

Fakt ist, das Funktioniert so nicht.

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Try
            If ListBox1.SelectedIndex = 1 Then Process.Start(My.Application.Info.DirectoryPath & "\EndPointController.exe", "1")  
            If ListBox1.SelectedIndex = 0 Then Process.Start(My.Application.Info.DirectoryPath & "\EndPointController.exe", "0")  
        Catch ex As Exception

        End Try
        
    End Sub
Member: colinardo
colinardo Apr 15, 2014 updated at 10:39:11 (UTC)
Goto Top
Zitat von @Sudden:
Fakt ist, das Funktioniert so nicht.
Fakt ist das geht einwandfrei wenn man die Exe in das Verzeichnis wo die Exe des Programms liegt plaziert! Ich mach das ja nicht zum ersten mal, und hier geht es wie immer einwandfrei !!!

Ich klinke mich jetzt hier aus, wird mir jetzt zu blöd....sorry.
Member: Sudden
Sudden Apr 15, 2014 at 10:52:18 (UTC)
Goto Top
Zitat von @colinardo:
Ich klinke mich jetzt hier aus, wird mir jetzt zu blöd....sorry.

Miesepeter...

Die exe ist im Debug Ordner wo ich meine VB Projekte habe.

Zu der Reihenfolge Der Wiedergabegeräte hat niemand ne idee?

MfG,

Sudden
Member: Snowman25
Snowman25 Apr 15, 2014 at 12:37:59 (UTC)
Goto Top
Wie wäre es, wenn du My.Application.Info.DirectoryPath mal in eine MsgBox schreibst und nachschaust, ob das wirklich auch der von dir vermutete Pfad ist?
Member: Sudden
Sudden Apr 15, 2014 at 13:04:41 (UTC)
Goto Top
Hab das hinbekommen mit dem Pfad.

Aber Die Reihenfolge muss doch noch irgendwie zu ändern sein, oder?


MfG,


Sudden