Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1772to1776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA und c# Console Applikation

VBA und c# Console Applikation
21.07.2020 14:52:36
Thomas
Hallo zusammen,
ich habe eine c# Applikation geschrieben. Die Exe würde ich gerne via VBA steuern.
Die Applikation benötigt ein Input, direkt in der Console. Dann wird mit Enter bestätigt und nach einiger Zeit Ergebnisse ausgegeben.
Die Console kann ich mit folgendem Code starten:

Public Sub Test()
strProgramName = "C:\Program Files\Test\foobar.exe"
Call Shell(strProgramName, vbNormalFocus)
End Sub

Leider kann ich aber keinen Text in die Console via VBA schicken. Ich möchte nicht mit SendKeys arbeiten, da es fehleranfällig ist.
Außerdem will ich, dass vBA wartet bis die Console fertig ist und dann eben das Ergebnis einer Variable in VBA zuweißt.
Ich habe das hier probiert, klappt aber leider nicht.

Public Sub StartExeWithArgument()
Dim strProgramName As String
Dim strArgument As String
strProgramName = "C:\Program Files\Test\foobar.exe"
strArgument = "Test text"
Call Shell("""" & strProgramName & """ """ & strArgument & """", vbNormalFocus)
End Sub

Da ich kein Admin auf dem PC bin kann ich die C# datei nicht als dll registrieren, daher der umweg über die Console.
Bin für jede Hilfe dankbar!!!
Gruß
Thomas

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA und c# Console Applikation
21.07.2020 15:34:44
EtoPHG
Hallo,
Deine C# exe liest also einen Parameter ein, wenn sie mit einem solchen gestartet wird?
Oder wartet sie mit einem Prompt auf einen Input (via Tastatur)?
Wenn die erste Frage mit ja beantwortet wird, dann müsste der Aufrunf inkl. Parameter funktionieren. Wenn zweiter Frage mit ja, dann bleibt nur Sendkeys, bzw. die Exe so schreiben, das sie mit Parameter aufgerufen werden kann!
Gruess Hansueli
AW: VBA und c# Console Applikation
22.07.2020 16:35:27
Thomas
Hi Hansueli,
danke für deine Antwort.
Ja tatsächlich benötigt die akutelle Version eine Eingabe via tastatur.
Hab die Applikation umgeschrieben, sodass

static void Main(string args)
args als Parameter verwendet wird.
Kann ich denn das Ergebnis ohne Send Key extrahieren? Ist ein String und ein int.
Gruß und danke
Thomas
Anzeige
AW: VBA und c# Console Applikation
22.07.2020 16:59:28
volti
Hallo Thomas,
mal 'ne Frage:
Da ich kein Admin auf dem PC bin kann ich die C# datei nicht als dll registrieren
Ich habe zwar noch nie mit c# eine Exe/DLL erstellt, aber früher (lang ist's her) des öfteren Dlls via PowerBasic erstellt, die enthaltenen Funktionen von Excel aus aufgerufen und entsprechende Rückwerte erhalten.
Da war nie eine Rede von Registierung. Ist das c# anders?
Thread lass ich offen, wegen Deiner Vorfrage an Hansueli.
Viele Grüße
Karl-Heinz
AW: VBA und c# Console Applikation
22.07.2020 17:59:48
EtoPHG
Hallo,
Du scheinst ein Fan von Sendkeys zu sein ;-) Ich gar nicht!
Wie soll den extrahiert werden und dann noch mit dieser Methode. Wohl kaum!
Warum leitest du den Output deiner app nicht in eine Datei um und liest dann von dort? Das sollte standardmässig mit &gtDrive:Verzeichnis\Dateiname möglich sein.
Gruess Hansueli
Anzeige
AW: VBA und c# Console Applikation
22.07.2020 22:05:22
Thomas
Hi Hansueli,
nein ich bin kein fan von SendKeys, ist viel zu anfällig. Bin aber noch ein absoluter Anfänger in C# daher ist die Applikation wahrscheinlich einfach nicht so clever aufgesetzt.
Aber deine Idee via Textdatei ist der Hammer!!
Danke dafür. Nur aus interesse, ist dass der standard Weg auch in professionelleren Applikationen?
Viele Grüße und besten Dank
Thomas
AW: VBA und c# Console Applikation
23.07.2020 17:51:52
EtoPHG
Hallo,
Was ein Standard ist in 'professionellen' Applikationen kann an nix festgemacht werden.
Aber viele Applikationen tauschen Daten über Dateien aus. Darum gibt es seit DOS 1.0 da (Standard) %TMP% Verzeichni. Dort findest du oft 100te von Dateien und Verzeichnissen, die meist ohne Nebenwirkungen gelöscht werden können. Die Dateien werden eben nur temporär zum Datenaustausch zwischen Programmen erstellt/gebraucht.
Gruess Hansueli
Anzeige
AW: VBA und c# Console Applikation
23.07.2020 17:51:52
EtoPHG
Hallo,
Was ein Standard ist in 'professionellen' Applikationen kann an nix festgemacht werden.
Aber viele Applikationen tauschen Daten über Dateien aus. Darum gibt es seit DOS 1.0 da (Standard) %TMP% Verzeichni. Dort findest du oft 100te von Dateien und Verzeichnissen, die meist ohne Nebenwirkungen gelöscht werden können. Die Dateien werden eben nur temporär zum Datenaustausch zwischen Programmen erstellt/gebraucht.
Gruess Hansueli
AW: VBA und c# Console Applikation
22.07.2020 18:32:31
volti
Hallo,
oder setze das Ergebnis in die Zwischenablage. Wenn Du die App schon selbst erstellst, sollte auch das möglich sein.
VG KH
AW: VBA und c# Console Applikation
21.07.2020 21:02:30
volti
Hallo Thomas,
wenn Du die Fragen von Hansueli geklärt hast, also wie erfolgt die Übergabe von Parametern und wo kommt das Ergebnis her bzw. wie wird es geliefert, kann Dir folgender Code als Anregung vielleicht helfen, dass Excel wartet, bis die Anwendung beendet wurde.
[+][-]
Option Explicit Private Declare PtrSafe Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As LongPtr Private Declare PtrSafe Function GetExitCodeProcess Lib "kernel32" ( _ ByVal hProcess As LongPtr, lpExitCode As Long) As Long Private Const PROCESS_QUERY_INFORMATION = &H400 Private Const STILL_ACTIVE = &H103 Dim hProcess As LongPtr Public Sub StartExeWithArgument() Dim strProgramName As String Dim strArgument As String Dim sProg As String, iExitcode As Long strProgramName = "C:\Program Files\Test\foobar.exe" strArgument = "Test text" 'Startparameter ggf. anpassen sProg = """" & strProgramName & """ """ & strArgument & """" hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, _ Shell(sProg, vbNormalFocus)) Do GetExitCodeProcess hProcess, iExitcode DoEvents Loop While iExitcode = STILL_ACTIVE MsgBox strProgramName & " beendet", vbInformation, "Test" End Sub
viele Grüße aus Freigericht
Karl-Heinz

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige