AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programmfokus setzen per Process-ID
Thema durchsuchen
Ansicht
Themen-Optionen

Programmfokus setzen per Process-ID

Ein Thema von 64Jabor · begonnen am 24. Jan 2009 · letzter Beitrag vom 25. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#1

Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 17:52
Hallo DP,

ich möchte aus meinem Programm Werte in ein externes Programm eintragen.
Dazu rufe ich es mit ShellExecute auf, falls es nicht bereits läuft.
Wenn es allerdings läuft, soll das Programm den Fokus erhalten.

Das versuche ich hier mit SetForegroundWindow.

Wie bekomme ich mit dieser Prozedur den Fokus auf dieses Program
Ich meine ich könnte ja CreateProcess verwenden und damit die Process-ID in eine Variable schreiben - die passende Funktion habe ich hier schon rumfliegen gesehen, von Luckie, aber ich finde keine Prozedur mit der ich die Process-ID in ein Handle o.ä. umwandeln kann...

Mein Problem ist auch dass meine Delphi-Hilfe nicht funktioniert, 64-BIT Vista sei Dank
Kann mir da jemand auf die Sprünge helfen?

Danke schonmal,
greetZ 64Jabor
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 18:08
Ich weiß nicht, ob es so funktioniert, aber mir fällt spontan folgende Vorgehensweise ein:
mit EnumWindows (oder EnumThreadWindows, wenn Du die ThreadID hast) die Fenster durchgehen, mit GetWindowThreadProcessID die ProzessID ermitteln und mit Deiner vergleichen. Wenn gleich, mit SetForegroundWindow nach vorne holen. Das Problem hierbei ist, dass das Programm ja mehrere Fenster haben kann.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#3

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 18:13
Hey DeddyH,

da ich selbst ja verhindere dass das Programm mehrmals ausgeführt wird zur Laufzeit MEINES Programmes und ich nicht davon ausgehe, dass dieses Programm jemand von selbst öfter startet, werde ich dieses Problem vorerst nicht beachten.
Ich werde mir besagte Funktionen mal ansehn und hoffe zu einem Ergebnis zu kommen

Vielen Dank!

greetZ
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 20:21
Wenn wir grad bei Spontan sind

Mir fällt spontan SEND_MESSAGE ein.
Sende dem Process ein WM_ACTIVATE.
Oder du importierst direkt die SetActiveWindow Prozedur aus der User32.
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 20:29
Das Problem ist doch, überhaupt ein Fensterhandle zu erhalten.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 21:06
Zitat von ryLIX:
Wenn wir grad bei Spontan sind

Mir fällt spontan SEND_MESSAGE ein.
Sende dem Process ein WM_ACTIVATE.
Oder du importierst direkt die SetActiveWindow Prozedur aus der User32.
Aber auch dafür braucht er das Fensterhandle, da man Nachrichten nur an Fenster senden kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 21:47
Hmm irre ich mich da oder lässt sich das nicht über die ProcessID holen?
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#8

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 22:37
Joa ich versuche ja per Process-ID das Fensterhandle zu bekommen, so wie DeddyH es vorgeschlagen hat.

Leider komme ich nicht wirklich weiter...
Ich hab mir jetzt eine Unit runtergeladen:
EnumWindowUtil

Die habe ich eingebunden und sie ist auch fähig jedes Fenster aufzulisten sowie das Handle zu bekommen, aber leider weiß ich nicht wie ich nun die Process-ID aus Luckies Funktion function RunProcess(...) mit den Process-IDs der TWindowList-Objekte vergleichen kann.

Ich dachte ja egtl an etwas wie:
Delphi-Quellcode:
i:=0;
while ( (i < MyWNDList.Count-1) AND (ProcID <> MyWNDList.Objects[i].ProcessID) ) do i:=i+1;
SetForegroundWindow(MyWNDList.GetHandle(i));
Nur leider existiert nichts deartiges wie Objects[].ProcessID...
Oder habe ich etwas übersehen?
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 22:48
Zitat von ryLIX:
Hmm irre ich mich da oder lässt sich das nicht über die ProcessID holen?
Richtig, und wie man das Fensterhandle zu einer ProzessID bekommen kann, hat DeddyH schon beschrieben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#10

Re: Programmfokus setzen per Process-ID

  Alt 24. Jan 2009, 23:12
Zitat von Apollonius:
Das Problem ist doch, überhaupt ein Fensterhandle zu erhalten.
man könnte auch eine Thread-Nachricht an den Hauptthread senden.

OK, diese müßte dann in diesem Programm ausgewertet weden und das Programm holt sich dann z.B. selbst in den Vordergrund.

(aber man muß es ja nicht übertreiben )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz