ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
1074
1074
EMPFEHLEN
-
hallo,
ich suche schon seit tagen nach einer möglichkeit eine externe .exe datei innerhalb einer .net anwendung aufzurufen.
dabei mein ich nicht per konsole die .exe in ihrem eigenen fenster zu starten, sondern ist es möglich ein bereich innerhalb eines projects zu definieren in dem die .exe dann ausgeführt wird?
meine suche hatte bis immer nur die variante ausgespuckt, welche die .exe einfach startet als würde ich sie normal starten.
danke schonmal
-
Hi
Erstmal möchte ich dich auf die Netiquette aufmerksam machen. Vorallem auf Punkt 15
Zum Problem:
Zitat von Netiquette
Was verstehst du unter einen Bereich definieren?
Willst du die zu startende Anwendung in deine einbetten oder wie ist das zu verstehen?
Prinzipiell lässt sich eine andere Anwendung über die Prozess-Klasse starten. Mit der statischen Start-Methode losgelöst der startenden Anwendung. mit den Instanzmethoden kannst du dir eine Referenz auf die neue Anwendung halten.Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Ich glaube londo will eine externe Window-Application starten und dann sozusagen dessen Form als Kind-Element von, sagen wir, einem Panel, in die eigene Anwendungen einbauen.
Keine Ahnung ob das geht. Stellt unter WinXP/Vista bestimmt eine Zugriffsverletzung da, wenn man versucht im Speicher so zumzuschreiben, dass das Fenster dann plötzlich einer anderen Anwendung gehört.hihi = -h²
-
Ok, wenn es dass ist, wäre eine Variante, die zweite Exe als Referenz oder dynamisch zu laden und diese per Code zu Instanzieren und auszuführen. Dafür muss die zweite Anwendung aber entsprechend geschrieben sein.
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
hallo,
versteh den hinweis auf die netikette nicht...wenns nicht mehr zu schreiben gibt:-/
ok, also problem ist folgendes ich habe 2 programme. einmal nen c++ programm und einmal ne access lösung.
das c++ tool wird über die access anwendung mit parameterübergabe gestartet und und führt dann paar berechnung aus und stellt die visuell dar.
jetzt soll das alles geändert werden, dass nicht mehr 2 seperate programme gestartet werden müssen sondern alles über ein programm läuft.
hatte mir jetzt überlegt die access geschichten in vb.net nochmal aufzubereiten und zu verbessern und das Berechnungtool dann in vb laden z lassen.
quasi so, man hat an der seite eine steuerleiste wo man die ganzen importsachen etc. durchklicken kann und daneben wird aufn panel oder datagrid...alles dar gestellt.
wenn man nun auf den button klickt der das berechnungstool starten soll, dann sollte auch dieses tool auf dem panel, oder was auch immer dann benutzt wird, dar gestellt werden.
aber ich habe bis jetzt nur die möglichkeit gefunden es in einem neuen fenster starten zu lassen.
eine weitere überlegung war das projekt in das bestehende vb projekt zu importieren, und dann als programmbestandteil laufen zu lassen.
der import hat auch ohne probleme geklappt, jetzt sitz ich daran das importierte projekt über das main projekt zu starten.
beste grüße
-
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Guten Morgen,
So hab die Netiquette nochmal gelesen, also da es kein ein Satz geklatsche ist muss es wohl an mein Ost-Deutsch liegen, aber glaub mir das ist schon deutsch
nu aber wieder zum Problem,
hab da noch eine Frage.
Habe gestern noch einmal über den Import nachgedacht.
Dabei kam mir folgender Gedanke, wenn ich das Projekt importiere und kompiliere erstellt der mir ja wieder ne .exe aus dem Berechnungstool weil es ja so Programmiert wurde. also habe ich doch im Endeffekt den selben Stand wie vorher?
also müsste ich den code so anpassen das daraus keine .exe erstellt wird?
Seh ich das so richtig oder bin ich falsch abgebogen irgendwo?
danke
-
Du musst bei deinem C++-Tool als Projekttyp Class Library (Klassenbibliothek) einstellen und dann im Haupt-Projekt eine Referenz auf deine Klassenbibliothek setzen. Es wird dir dann eine DLL anstatt einer exe-Datei erstellt.
Ist hier alles erklärt: http://www.dotnetheaven.com/Uploadfi...01AM/pr12.aspxhihi = -h²
-
hallo skakie, Nico,
nachdem ich nun eure Tipps beherzigt habe und dann bei der Umsetzung noch etwas rum gespielt habe, bin ich auf eine Lösung gestoßen, die wunderbar funktioniert.
*thumbsup* für die Tipps
Ich hab es jetzt so gelöst:
Ich schaue nach aus welchem Fenster heraus der Aufruf kam.
dann wird das Programm auf gerufen und in dem aufrufendem Form dar gestellt.
funktioniert alles ohne Probleme.
bei bedarf kann ich den Code posten.
thema kann als erledigt betrachtet werden.
danke
-
Hallo londo,
ich denke das es immer angebracht ist die Lösung zu posten.
Damit auch andere User die Möglichkeit haben deine Lösung anzuschauen und evtl. für eigene Bedürfnisse zu verwenden...
Ich würde mich sehr freuen, da ich auch gerade an einem ähnlichen Problem arbeite.
Danke schon mal im Voraus!
Grüße,
Ardro
-
hallo ardro,
ja konnt ich mir beinahe denke, war aber schon unterwegs als ich das schrieb.
werde gleich morgen früh wenn ich auf arbeit bin die lösung posten.
kannst so gegen 08.00 Uhr mit rechnen
schönen abend noch
-
Guten Morgen,
hier nun meine Lösung für das oben beschriebene Problem.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
Imports System.Runtime.InteropServices Public Class FormEins Public Class Win32Api <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Public Shared Function ShowWindow( _ ByVal hWnd As IntPtr, _ ByVal nCmdShow As Integer) As Boolean End Function <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr End Function Public Const SW_MAXIMIZE As Int32 = 3 End Class Private Sub SetApplicationAsChild(ByVal CallingApplication As String, _ ByVal p As System.Windows.Forms.Panel) Try Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start(CallingApplication) hProcess.WaitForInputIdle() Win32Api.SetParent(hProcess.MainWindowHandle, p.Handle) Win32Api.ShowWindow(hProcess.MainWindowHandle, Win32Api.SW_MAXIMIZE) Catch ex As Exception MessageBox.Show(ex.Message.ToString(), "Info") End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Const APP_NAME As String = "notepad.exe" SetApplicationAsChild(APP_NAME, Panel1) End Sub End Class
Also Funktion ShowWindow fragt ab ob das Fenster vor dem Aufruf sichtbar war.
rückgabewert ungleich 0 wenn sichtbar ansonsten 0.
Funktion SetParent setzt ein neues Elternfenster für ein bestimmtes Kindfenster.
Rückgabewert Handle des Elternfensters ansonsten 0.
Die Prozedur SetApplicationAsChild startet das gewünschte Programm und stellt es in der aufrufenden Form dar.
naja und Button1_Click sollte wohl klar sein, löst das ganze aus.
kleine Anmerkung, steht das zu öffnende tool im syspath brauch man nur den namen des tools eingeben wie hier "notepad.exe" ansonsten muss der komplette Pfad angegeben werden, damit vb weiss wo es suchen muss.
beste grüße
Ähnliche Themen
-
window.open dann das window.close
Von kinsh im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 05.10.05, 16:28 -
window.open und .close + refrech nachfolgendes window
Von Tetsuo im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 21.02.05, 00:13 -
Makro automatisch starten beim Starten von Word
Von zoltan im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 17.11.04, 14:30 -
window.open() ereignis wird nicht ausgeführt, window.history.back() aber schon
Von SeeKing im Forum Javascript & AjaxAntworten: 8Letzter Beitrag: 11.11.04, 09:53 -
mama window von cromeless window schließen
Von Husky im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 19.10.01, 20:53





Zitieren


Login





