Fenster in Programm anzeigen/starten

Ich will ja nicht das programm was ich gerade schreibe auf High setzen sondern ein anderes. :)

Visual Basic:
        Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start("name des prozesses?")

        hProcess.PriorityClass = System.Diagnostics.ProcessPriorityClass.High

So sollte der code aussehen für ein anderes programm?

Peter86

EDIT: ja so muss er aussehn :p Danke thema erledigt. Deine bewertung haste! Vielen Dank
 
Soweit sogut nun bin ich leider auf ein Problem gestoßen. Wenn ich ein Programm starten will und diese eine Textdatei für verschiende einstellungen nimmt. Und wenn ich nun das Programm in dem Fenster starte, bekomm ich nen error das er die TextFile nicht finden kann.
Und ist es auch möglich ein Programm was schon gestartet ist einzufangen? Es also nicht in dem Fenster starten sondern, wenn es schon gestartet ist in das Fenster einzufangen?
Kennt jemand eine lösung zu dem Problem?

Peter86
 
Zuletzt bearbeitet:
Eigentlich hab ich blos die Frage mit dem bereits gestarteten Programm verstanden.

Du könntest zum Beispiel über die Klasse Process (aus System.Diagnostics, wie oben) das entsprechende Programm suchen.
Schau dir einfach mal die statischen Methoden von Process an.
Hast du ein entsprechenend Process gefunden wieder normal mit MainWindowHandle die API Funktionen aufrufen.

Eine andere Möglichkeit wäre ev. über den Fenstertitel dein gewünschten Fenster zu finden, dafür gibt es glaube eine WinAPI Funktion FindWindow, oder so ähnlich.
 
Ich erkläre es nochmal deutlich. :)

1.Ich möchte ein Programm in eines der TabPages starten. Ok kein problem. Doch ich habe hier ein Programm welches eine textdatei für einstellungen nutzt. Da stehn dann sachen drin wie z.B. eine IP zum server. Wenn ich das Programm normal Starte gibt es kein Problem. Starte ich das Programm aber nun so wie oben beschrieben also in eines der TabPages kommt ein Error in dem Fenster. Genau der gleiche error kommt auch wenn ich die Textfile lösche und das Programm normal starte. Daraus schliess ich das er die Textfile nicht finden kann. Das seltsame ist, manchmal gehts manchmal nicht.




2. Ich habe ein Programm was ich in den TabPages starten will, doch dieses Programm startet erst mit einem Splash screen bevor das eigentliche Programm gestartet wird. Es befindet sich also nur der Splashscreen in der TabPage und nachdem der Splashscreen beendet wurde öffnet sich das Programm in einem eigenen Fenster, also normal. Deswegen wollte ich wissen, ob man ein fenster auch einfangen kann. Es sich also nur in der TabPage befindet.

So hoffe das ist nun verständlich. :)

Peter86
 
Zuletzt bearbeitet:
Ich erkläre es nochmal deutlich. :)

1.Ich möchte ein Programm in eines der TabPages starten. Ok kein problem. Doch ich habe hier ein Programm welches eine textdatei für einstellungen nutzt. Da stehn dann sachen drin wie z.B. eine IP zum server. Wenn ich das Programm normal Starte gibt es kein Problem. Starte ich das Programm aber nun so wie oben beschrieben also in eines der TabPages kommt ein Error in dem Fenster. Genau der gleiche error kommt auch wenn ich die Textfile lösche und das Programm normal starte. Daraus schliess ich das er die Textfile nicht finden kann.
Ich glaube nicht wirklich das du das Problem so einfach umgehen könntest.

Werden nur beim start des Programmes die Einstellungen geladen könntest du vielleicht dein Programm kurz ruhen lassen (Thread.Sleep oder so) und danach dein Programm weiterlaufen lassen und es in deine TabPage aufnehmen.

Werden aber zur Laufzeit weitere Einstellungen geladen wirst du wohl Schwierigkeiten bekommen.

Oder du kopierst die Dateien mit in dein Programmordner (oder laut Ordnerstruktur des anderen programmes) und schaust obs so funktioniert.

2. Ich habe ein Programm was ich in den TabPages starten will, doch dieses Programm startet erst mit einem Splash screen bevor das eigentliche Programm gestartet wird. Es befindet sich also nur der Splashscreen in der TabPage und nachdem der Splashscreen beendet wurde öffnet sich das Programm in einem eigenen Fenster, also normal. Deswegen wollte ich wissen, ob man ein fenster auch einfangen kann. Es sich also nur in der TabPage befindet.

schau dir mal FindWindow Funktion aus der WinAPI an, ist denke mal ungefähr das was du brauchst.
http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx
Einfach mal nach googeln, gibts bestimmt einige Beispiele zu.
 
Ich glaube nicht wirklich das du das Problem so einfach umgehen könntest.

Werden nur beim start des Programmes die Einstellungen geladen könntest du vielleicht dein Programm kurz ruhen lassen (Thread.Sleep oder so) und danach dein Programm weiterlaufen lassen und es in deine TabPage aufnehmen.

Werden aber zur Laufzeit weitere Einstellungen geladen wirst du wohl Schwierigkeiten bekommen.

Oder du kopierst die Dateien mit in dein Programmordner (oder laut Ordnerstruktur des anderen programmes) und schaust obs so funktioniert.
Die einstellungen werden nur bei Start geladen!
Ich habs jetzt mal ausprobiert. Wenn sich die Config Files im gleichen ordner befinden Funktioniert es einwandfrei. Doch es ist nicht gerade passend wenn man alle Config files in den gleichen Ordner packen muss. Kann man da nicht irgentwie einen Pfad angeben und die Configs von da geladen werden? Das sind nämlich schon ein paar files.

schau dir mal FindWindow Funktion aus der WinAPI an, ist denke mal ungefähr das was du brauchst.
http://msdn.microsoft.com/en-us/libr...99(VS.85).aspx
Einfach mal nach googeln, gibts bestimmt einige Beispiele zu.
Werd ich mir mal anschauen.


Kannst du mir sagen wie ich folgendes machen kann? Ich habs irgentwo schonmal benutzt aber leider vergessen wie.
Code:
Warte 5 sekunden dann
Befehl

das als code :D

Wie ich ein Fenster einfange wenn es schon gestartet ist weiß ich nun.
Code:
        Win32Api.SetParent(prozess.MainWindowHandle, Panel1.Handle)
        Win32Api.ShowWindow(prozess.MainWindowHandle, Win32Api.SW_MAXIMIZE)
Bei Prozess muss der Prozess hin den ich einfangen will. Doch wie mach ich es das er weiß welchen prozess er nehmen soll.
Ich muss dafür Dim benutzen aber das hab ich bei prozessen noch nicht richtig verstanden. Kannst du mir helfen?
Normal war es ja
Visual Basic:
    Dim h1Process As System.Diagnostics.Process = _
System.Diagnostics.Process.Start("notepad.exe")
Aber ich möchte den Prozess ja nicht starten sondern lediglich den namen. Hab schon bisschen verändert usw. aber leider ohne erfolg
Peter86
 
Zuletzt bearbeitet:
Die einstellungen werden nur bei Start geladen!
Ich habs jetzt mal ausprobiert. Wenn sich die Config Files im gleichen ordner befinden Funktioniert es einwandfrei. Doch es ist nicht gerade passend wenn man alle Config files in den gleichen Ordner packen muss. Kann man da nicht irgentwie einen Pfad angeben und die Configs von da geladen werden? Das sind nämlich schon ein paar files.
Keine Ahnung, weiß ja noch nicht mal von welchem Programm du redest :rolleyes:
Aber ich bezweifle es das man da was machen kann, vielleicht gibts ja aber auch irgendwelche Startparameter mit dennen du das einstellen könntest.

Kannst du mir sagen wie ich folgendes machen kann? Ich habs irgentwo schonmal benutzt aber leider vergessen wie.
Code:
Warte 5 sekunden dann
Befehl

das als code :D
Code:
System.Threading.Thread.Sleep(5000)
Bei Prozess muss der Prozess hin den ich einfangen will. Doch wie mach ich es das er weiß welchen prozess er nehmen soll.
Ich muss dafür Dim benutzen aber das hab ich bei prozessen noch nicht richtig verstanden. Kannst du mir helfen?
Normal war es ja
Visual Basic:
    Dim h1Process As System.Diagnostics.Process = _
System.Diagnostics.Process.Start("notepad.exe")
Aber ich möchte den Prozess ja nicht starten sondern lediglich den namen. Hab schon bisschen verändert usw. aber leider ohne erfolg
Peter86
Wie schon gesagt bietet Process einige statische Methoden zum finden von Prozessen an.
zum Beispiel:
Code:
System.Diagnostics.Process.GetProcessesByName
welches dir ein Array von gefundenen Prozessen zurückliefert.
C#:
System.Diagnostics.Process[] gefundeneProzesse=System.Diagnostics.Process.GetProcessesByName("meinProzesse");
Code:
Dim gefundeneProzesse As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("meinProzesse")
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank. Ich bekomm bei folgenden code folgende fehlermeldung.

Visual Basic:
Win32Api.SetParent(gefundeneProzesse.MainWindowHandle, Panel1.Handle)

Code:
"MainWindowHandle" ist kein Member von "System.Array".

Benutz ich
Code:
System.Diagnostics.Process.GetProcessesByName
Kommt die Meldung.
Benutz ich
Code:
System.Diagnostics.Process.Start
Kommt sie nicht.

Was muss ich verändern? Da muss ich was mit For each.... machen oder ?

Peter86
 
Zuletzt bearbeitet:
schau dir meinen Code an, schau dir die Hilfe an, du bekommst ein Array zurück.
du könntest jetzt nun zum Beispiel die einzelnen Elemente im Array mit einer foreach Schleife durchlaufen.
C#:
foreach(System.Diagnostics.Process pr in System.Diagnostics.Process.GetProcessesByName("meinProzesse"))
{
   Win32Api.SetParent(pr.MainWindowHandle, Panel1.Handle)
}
Code:
For Each pr As System.Diagnostics.Process In System.Diagnostics.Process.GetProcessesByName("meinProzesse")
    Win32Api.SetParent(pr.MainWindowHandle, Panel1.Handle)
Next

Nachtrag:
du solltest noch genauer Filtern welchen Prozess du haben willst.
Hier bekommen alle als Parent Panel1 und da die Fenster Maximiert angezeigt werden wirst du höchstwahrscheinlich nur den letzten Prozess zu sehen bekommen.
 
Zuletzt bearbeitet von einem Moderator:
Danke, ich habs nun Geschafft ein gestartetes Programm einzufangen. Aber an dem einem Programm wo ich gesagt hatte verzweifle ich. Starte ich das Programm normal also mit Doppeklick. Funktioniert alles. Starte ich das Programm per meinem Tool, per shell oder Process. Kommt wieder die Meldung das er die Config.txt nicht finden kann. Ich denke mal er geht davon aus das die da liegen wo mein Tool gestartet wurde. Kann ich irgentwie den Startpath vortäuschen? Sozusagen setze ich bevor ich das Programm starte den Startpath in den Ordner wo das programm liegt somit würde ich das Problem umgehen. Wäre dies möglich? Also ich klicke Button1. Der Startpath wird z.b. auf C://programm gesetzt und dann Shell("C://programm/programm.exe")

Peter86
 

Neue Beiträge

Zurück