Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0062: Parameter an EXE mit Command$ übergeben

 von 

Beschreibung 

Mit der Umgebungsvariablen Command$ besteht die Möglichkeit eine Exe-Datei mit Parametern ausführen zu lassen. Beliebtes Beispiel hierfür das starten der EXE über das Anklicken eines zugehörigen Dokumentes. Demonstriert wird das hier mit Hilfe des Tipp 1. Es wird eine Dateiendung registriert und einer EXE zugeordnet, dass diese mit dem Parameter der aufrufenden Datei gestartet wird.

Dieser Tipp funktioniert entweder nur in kompilierter Form oder benötigt eine DLL/OCX-Datei. Diese Binärdateien sind dem Tipp hinzugefügt worden, um seinen Funktionsumfang darstellen zu können. Vor dem Upload wurden sie auf Viren geprüft.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RegCreateKeyA (RegCreateKey), RegSetValueA (RegSetValue)

Download:

Download des Beispielprojektes [13,21 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektgruppe Gruppe1.vbg -------------
'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "Text4"
' Steuerelement: Textfeld "Text3"
' Steuerelement: Textfeld "Text2"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Beschriftungsfeld "Label4"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"
'Dieser Source stammt von http://www.ActiveVB.de

'Sollten Sie Fehler entdecken oder Fragen haben, dann
'mailen Sie mir bitte unter: Reinecke@ActiveVB.de

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias _
        "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As _
        String, phkResult As Long) As Long

Private Declare Function RegSetValue Lib "advapi32.dll" Alias _
        "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As _
        String, ByVal dwType As Long, ByVal lpData As String, _
        ByVal cbData As Long) As Long

Private Const HKEY_CLASSES_ROOT As Long = &H80000000
Private Const MAX_PATH As Long = 260&
Private Const REG_SZ As Long = 1&

Private Sub Eintrag(ByVal AppName As String, ByVal AppPath As String, _
    ByVal AppReg As String, ByVal AppExt As String)
    
    Dim Result As Long, hKey As Long
         
    '### Generiert den neuen Eintrag
    Result = RegCreateKey(HKEY_CLASSES_ROOT, AppReg, hKey)
    Result = RegSetValue(hKey, "", REG_SZ, AppName, 0&)
  
    '### Generiert die Assoziotion mit der Endung
    Result = RegCreateKey(HKEY_CLASSES_ROOT, "." & AppExt, hKey)
    Result = RegSetValue(hKey, "", REG_SZ, AppReg, 0&)
  
    '### Setzt den ausführenden Pfad für die Anwendung
    Result = RegCreateKey(HKEY_CLASSES_ROOT, AppReg, hKey)
    Result = RegSetValue(hKey, "shell\open\command", REG_SZ, _
             AppPath & " %1 /open/", MAX_PATH)
End Sub

Private Sub Command1_Click()
  Call Eintrag(Text1.Text, Text2.Text, Text3.Text, Text4.Text)
End Sub

Private Sub Form_Load()
  Text2.Text = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") & "Project2.exe"
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------
'------------- Anfang Projektdatei Project2.vbp -------------
'--------- Anfang Formular "Form2" alias Form2.frm  ---------
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Textfeld "Text2"
' Steuerelement: Textfeld "Text1"
Option Explicit

Private Sub Command1_Click()
  Beep
End Sub
'---------- Ende Formular "Form2" alias Form2.frm  ----------
'--------- Anfang Modul "Module2" alias Module2.bas ---------

Option Explicit

Sub Main()
    Dim Pos As Long
    Dim Path As String
    Dim FFN As Integer
    
    If Command$ <> "" Then
        Pos = InStr(1, Command$, "/open/")
        If Pos <> 0 Then
            Path = Trim$(Left$(Command$, Pos - 1))
            Form2.Text2.Text = Path
            FFN = FreeFile
            
            Open Path For Input As #FFN
                Form2.Text1.Text = Input$(LOF(FFN), FFN)
            Close FFN
        Else
            '### Weitere Befehle
        End If
    End If
    
    Form2.Show
End Sub
'---------- Ende Modul "Module2" alias Module2.bas ----------
'-------------- Ende Projektdatei Project2.vbp --------------
'-------------- Ende Projektgruppe Gruppe1.vbg --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 11 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von MR am 18.11.2008 um 02:03

Wenn ich Euch nich hätte.... cool :)) danke!!

Kommentar von eshat am 27.02.2005 um 23:54

:) coole sache danke :)

Kommentar von Kracher am 10.10.2004 um 23:50

für alle die genaueres wissen wollen es wird in der txt-datei im archiv des projekt gut erklärt. einfach downloaden ...entpacken und z.b Project2.txt lesen ;)

Kommentar von nope_ am 26.02.2004 um 21:18

echt cool ... aba ich würd auf kein fall links unten als extension exe eintragen :D .. des könnte nämlich problematisch werdn (hab damit mein ganzes system abgeschossen)

Kommentar von JensHans am 26.08.2003 um 15:50

herr wichmann wohnen sie in berlin, besuchten sie dort eine gesamtschule, bitte um meldung.

Kommentar von Clemens Klix am 27.04.2002 um 22:24

Kann ich irgendwie den Pfad der geöffneten Datei anzeigen lassen?

Kommentar von Andreas am 12.02.2002 um 13:04

Ich will einer EXE Datei Parameter übergeben und diese verwenden zb. für Standartdrucker zu ändern und das Druckfach einstellen.

Kommentar von Patrick am 14.08.2001 um 21:35

Ich muß eine EXE- Datei aufrufen und an sie Parameter übergeben.Dies funktioniert sehr gut mit dem Shell Befehl.
Syntax: Shell "C:\...\Anwendung.exe Par1 Par2" ,das Problem beginnt da wo ich von dieser Anwendung Parameter zurück bekomme in der Form Syntax: code=1 & par1=string & par2=string...,denn die werden nicht ausgegeben nur im Dos-Fenster was der Shell-befehl aber nicht öffnet.Außerdem wär es für mich sinnvoller wenn ich diese Variablen direkt an VB übergeben könnte.Die Anwendung ist in C geschrieben und nutzt das STDIN und STDOUT,wäre echt toll wenn mir wer helfen könnte. Cu Patrick

Kommentar von Marc Reichelt am 11.07.2001 um 16:34

Ich habe mein Problem selber lösen können, man muss den Befehl SHELL verwenden!

Kommentar von Marc Reichelt am 11.07.2001 um 13:08

Wie kann man denn jetzt eigentlich einfach NUR eine stinknormale EXE-Datei aufrufen?
Ich komme mit der zum Herunterladen angebotenen Projekt2 nicht klar!

Kommentar von Patrick Wichmann am 03.05.2001 um 09:20

Ich suche nach einer ähnlichen Möglichkeit. Und zwar soll Text aus einem anderen Programm mit dem Aufruf bzw. der Nennung eines Parameters %1 übergeben werden, z.B. "C:\Programme\Benachrichtigung.exe %1".
Geht das auch so oder so ähnlich ?