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:
MfG,
Sudden
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 235585
Url: https://administrator.de/forum/der-pfad-eines-programmes-soll-ueberall-funktionieren-235585.html
Ausgedruckt am: 02.02.2025 um 14:02 Uhr
10 Kommentare
Neuester Kommentar
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 mitWas 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?
My.Application.Info.DirectoryPath
Application.StartupPath
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.
Ich klinke mich jetzt hier aus, wird mir jetzt zu blöd....sorry.