ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 13.09.2000

Diese Seite wurde zuletzt aktualisiert am 13.09.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Oberbefehlsempfänger

Zurück...


Anzeige

(-hg) mailto:hg_dllparentinfo@aboutvb.de

Wie können eine ActiveX-DLL oder ein ActiveX-Control den Inhalt der Kommandozeile der Anwendung, von der sie geladen wurden, in Erfahrung bringen? Es gibt zwar die Funktion Command$ - doch diese liefert nur die Kommandozeile des jeweiligen Projekts. Bei einer ActiveX-DLL und einem ActiveX-Control liefert Command$ jedoch schlichtweg nichts. Weil aber eine ActiveX-DLL und ein ActiveX-Control im gleichen Prozessraum laufen wie die Anwendung, von der sie geladen wurden, können Sie den Inhalt der Kommandozeile jener Anwendung über die API-Funktion MSDN Library - API GetCommandLineGetCommandLine erhalten.

Darüber hinaus gibt GetCommandLine sogar noch den Namen der ausführbaren Datei der Anwendung zurück. Und wenn Sie Glück haben, ist der Name der ausführbaren Datei sogar noch mit der vollständigen Pfadangabe versehen. Ihr Glück hängt in dieser Hinsicht von der konkreten Windows-Version ab - unter Windows 9x, Windows NT 4 ab Service Pack 4 und Windows 2000 scheint dies immer der Fall zu sein. Doch da sich die MSDN-Dokumentation diesbezüglich recht vage äußert, sollten Sie sich nicht darauf verlassen. Sicherer ist da wohl der in Vaterschaftsnachweis I"Vaterschaftsnachweis I" gezeigte Weg.

Da GetCommandLine nur einen String zurück gibt, der beide Teile enthält, müssen Sie diese voneinander trennen. Beginnt der String mit einem Anführungszeichen, ist der Name bzw. komplette Pfadname der ausführbaren Datei in Anführungszeichen eingeschlossen. Damit haben Sie mit dem zweiten Anführungszeichen die richtige Trennstelle. Fehlen die Anführungszeichen, können Sie sicher sein, dass der Name bzw. der Pfadname der ausführbaren Datei selbst keine Anführungszeichen enthält. Die Trennstelle ist somit das erste Leerzeichen in dem gesamten String. Selbst über mehrfach verschachtelt und indirekt geladene ActiveX-DLLs bzw. -Controls hinweg funktioniert die Lieferung.

Die Prozedur ParentInfo füllt optional in den Parametern CmdLine und AppPath übergeben, zuvor deklarierten Strings mit den beiden Teilen des von GetCommandLine gelieferten Strings. Die beiden weiteren Funktionen ParentCommand und ParentAppPath liefern die beiden Teile der Einfachheit separat.

Private Declare Function GetCommandLine Lib "kernel32" _
 Alias "GetCommandLineA" () As String

Private Const kQuote = """"

Public Sub ParentInfo(Optional CmdLine As String, _
 Optional AppPath As String)

  Dim nCmdLine As String
  Dim nPos As Long
    
  nCmdLine = GetCommandLine()
  nCmdLine = Left$(nCmdLine, _
   InStr(nCmdLine & vbNullChar, vbNullChar) - 1)
  If Left$(nCmdLine, 1) = kQuote Then
    nPos = InStr(2, nCmdLine, kQuote)
    AppPath = Mid$(nCmdLine, 2, nPos - 2)
    CmdLine = LTrim$(Mid$(nCmdLine, nPos + 1))
  Else
    nPos = InStr(nCmdLine, " ")
    AppPath = Left$(nCmdLine, nPos - 1)
    CmdLine = LTrim$(Mid$(nCmdLine, nPos))
  End If
End Sub

Public Function ParentCommand() As String
  Dim nParentCommand As String
  
  ParentInfo nParentCommand
  ParentCommand = nParentCommand
End Function

Public Function ParentAppPath() As String
  Dim nParentAppPath As String
  
  ParentInfo , nParentAppPath
  ParentAppPath = nParentAppPath
End Function

Übrigens können Sie damit auch in einem als ActiveX-DLL kompilierten Add-In zur VB-IDE feststellen, mit welchen Kommandozeilen-Parametern die Entwicklungsumgebung aufgerufen worden ist. Genau so klappt das auch bei COM-AddIns zu den Microsoft Office-Anwendungen.


Modul modDLLParentInfo (modDLLParentInfo.bas - ca. 1,2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer