GSI Helmholtzzentrum für Schwerionenforschung
Hallo zusammen, dies ist meine erste Anfrage, und gleich zum Thema ActiveX. Gibt es eine Möglichkeit, innerhalb einer LabVIEW-Exe (als ActiveX-Server erstellt) festzustellen, ob diese Anwendung über einen ActiveX-Aufruf gestartet wurde, oder ganz normal (also Shortcut)? Ich muß in dieser Anwendung abhängig von der Art des Aufrufs verschiedene Sachen machen. Hat da vielleicht jemand eine Idee oder einen Tip? Besten Dank im voraus Heinrich (der Neue)
Re: LabVIEW Anwendung als ActiveX Server
Hi Heinrich, Du könntest Dein Problem über Kommandozeilen Parameter lösen. Wenn Du Deine LabVIEW Applikation lokal startest, gibst Du die Paramter an. Wenn Du die Applikation als AxtiveX-Objekt startest, fehlen diese halt und daran erkennst Du es. DOS Prompt> ApplicationKind.exe -- /number:2,000000 "/string:local" /boolean:1 Ein Beispiel findest Du mit Hilfe des Example Finders->Index, Suchbegriff: Command; VIs: CommandLine.vi und Description.vi Über die Eigenschaft Application.Kind findest Du darüber hinaus heraus ob Du das VI in der Entwicklungsumgebung oder als Executable gestartet hast. Ich habe ein kleines LV8-Projekt und das Blockdiagramm als Bitmap angehängt. Für LV7 musst Du es halt selbst implementieren. Ich hoffe, dieser Lösungsansatz hilft Dir. Gruß Holger
Hallo Holger, danke erst mal für die schnelle Antwort. Geht's irgendwie auch ohne Kommandozeile? Daran hatte ich auch schon gedacht. Mich stört allerdings daran, daß diese Art editierbar ist. Wenn jetzt jemand (sei es aus Versehen oder Absicht) den Parameter löscht oder sonstwie verändert, kann er die Anwendung u.U. nur noch über den Task-Manager beenden. Und dieses möchte ich ganz gerne vermeiden. Heinrich
Hi Heinrich, ich dachte zuerst, dass es mit der App.Kind Eigenschaft herauszubekommen ist. Aber ich habe das damit leider nicht geschafft und eine andere Möglichkeit ist mir auch nicht eingefallen. Vielleicht hat ja noch ein anderer LVUG-Fan eine gute Idee. Gruß Holger
Hallo Heinrich, Versuch doch den Ansatz von Holger anders herum: Übergib bei einem ActiveX-Aufruf einen Parameter/Setze ein Frontpanelwert o.ä. und tue das beim Kommandozeilenaufruf eben nicht. Dann kann der Aufruf nicht so leicht versehentlich verändert werden. Im Programmcode spielt man nicht so schnell rum wie mit einem Shortcut. ... aber wenn ich mir so das datum ansehe ist das Problem vermutlich ohnehin schon gelöst. Gruß, Sören
Hallo Heinrich, ich weiß ja nicht, ob Dein Problem schon gelöst ist, aber es gibt eine ganz einfache Möglichkeit zu erkennen, ob deine Applikation über Shortcut oder über ActiveX-Aufruf gestartet wurde. Wenn dein Programm über ActiveX gestartet wurde, dann wird vom System der Kommandozeilen-Parameter "Automation" übergeben. Ich verwende LabVIEW 7.0 und 8.0. Habe Dir ein Beispiel-VI angehängt, mit dem ich teste, ob ein Parameter übergeben wurde. Gruß Christian
Hallo Christian, danke für deine Antwort Habe ich das richtig gelesen? Wenn ich die Anwendung via ActiveX starte, kriege ich automatisch diesen Kommandozeilenparamter übergeben? Das ist genau das, was ich brauche Momentan setze ich ein Frontpanelelement. Das geht zwar auch, aber auf deine Art ist es wesentlich besser. Danke Heinrich
Hallo Heinrich, ja, wenn Du über ActiveX die Applikation startest, dann bekommst Du den Kommandozeilenparamter "Automation" übergeben. Die LabVIEW-Applikation trägt sich beim ersten Start selbst in die Registry ein und bildet dabei unter LocalServer und LocalServer32 folgenden Programmaufruf: z.B. "C:\Programme\Ordner\Appl.exe /Automation" Denke, das müsste bei Dir genauso sein. Falls nicht, dann brauchst Du nur den Aufruf mit dem Parameter so zu ändern. Gruß Christian
Hallo, das mit dem Registry-Eintrag funktioniert bestens. Nun möchte ich das Ganze modifizieren. Dazu brauche ich allerdings die Clsid meines Servers. Über die Clsid finde ich in der Registry dann die Kommandozeile, der ich dann weitere Parameter anhängen kann. Mein Problem ist, daß ich mit dem Registry-Editor unter HKEY_LOCAL_ROOT\<app.name>.Application zwar einen Key "Clsid" mit einem Schlüssel "(Standard)" finde, welcher die Clsid enthält. Ich kann aber diesen Schlüssel mit den LAbVIEW-VIs für Registryzugriffe nicht lesen. Hat da vielleicht einer eine Idee, oder noch besser eine Lösung? Gruß Heinrich