GetProcessId
-
Hallo zusammen,
ich bin auf der Suche nach einer Funktion, die eine bestimmte exe, die mit nicht gehört, in Vordergrund setzt.
In Vordergrundsetzen gibt es verschiedene Möglichkeiten:
SetForegroundWindow()
ShowWindows(..,SW_MAXIME)
AtachThreadInput()Doch dazu brauch ich das Handle der .exe Datei, nun dacht ich mir, mache ich es per
[b]FindWindow()[/b]doch dazu muss man den Window-Title kennen, und wie heißt der bei Firefox? Kann man nicht sagen, da jeder Tab quasi einen eigenen Window-Title hat.
Nun dacht ich mit, kann man sicherlich über die ProcessID das Handle bekommen, und somit dann als Vordergrund setzen.
Doch wie genau bekomm ich die ProcessID einer .exe?
[b]GetProcessID()[/b]mgh supersass1
-
Der Fenstertext ändert sich je nach Website - das siehst du doch?!
Hinten steht aber Mozilla Firefox dran. Dann könntest du es mit EnumWindows probieren.
Der Klassenname ist allerdings MozillaUIWindowClass, vielleicht hilft dir das.
aber vorsicht: auch Thunderbird z.b. hat diesen klassennamen.
Ich würde einen Snapshot machen (CreateToolhelp32Snapshot), um mir alle Prozesse auflisten zu lassen und nach firefox.exe schauen.
Zur sicherheit würde ich dann noch Nach der Fensterklasse (FindWindow) suchen, schauen, ob beim Title hinten Mozilla Firefox dranhängt (GetWindowText glaub ich) und dann noch mit GetWindowThreadProcessId() die ProzessID mit der vergleichen, die du mit dem Snapshot erhalten hast.
-
okay, dankeschön so weit.
Ich bin jetzt soweit, dass is die ProcessID herausfinden kann, mittels:
CreateToolhelp32Snapshot()Doch nun muss ich das zugehörige Handle noch herusfinden. Doch ich hab die Extension zum Taskmanager und der sagt, das es mehrer Handles gibt, ist das richtig?
Naja letztendlich würe mir ja eine reichen, die zuständig für die Oberfläche ist.
Konkret: Meine Frage ist, wie kann ich mit der ProzessID den Thread nach Vorne holen? siehe Post1.
mfg supersass1
-
guck dir mal
'SwitchToThisWindow' an.Meep Meep
-
Meep Meep schrieb:
guck dir mal
'SwitchToThisWindow' an.Meep Meep
Danke dir, das hilft mir nur zum Teil weiter:
http://msdn2.microsoft.com/en-us/library/ms633553.aspxIch benötige dennoch den Handle der ProcessID.
-
supersass1 schrieb:
Doch nun muss ich das zugehörige Handle noch herusfinden. Doch ich hab die Extension zum Taskmanager und der sagt, das es mehrer Handles gibt, ist das richtig?
welches handle? Das Handle vom Prozess oder von seinem Fenster?
Ersteres kriegst du mit OpenProcess(). letzteres würde ich mit EnumWindows() machen und dann mittels GetWindowThreadProcessId() schauen welches Fenster in dem Prozess läuft mit der Prozess ID die du von CreateToolhelp32Snapshot hast.Konkret: Meine Frage ist, wie kann ich mit der ProzessID den Thread nach Vorne holen?[/quote]
Den Thread nach vorne holen?
Oder meinst du das Fenster
s. oben
-
Black Shadow schrieb:
Konkret: Meine Frage ist, wie kann ich mit der ProzessID den Thread nach Vorne holen?
Den Thread nach vorne holen?

Oder meinst du das Fenster
s. obenUpps sorry, ich meinte:
Meine Frage ist, wie kann ich mit der ProzessID des Thread das Window nach Vorne holen?
welches handle? Das Handle vom Prozess oder von seinem Fenster?
Ist da ein Unterscheid? Kannst du mir mal des Zusammenhang zwischen Prozess und Fenster und Handle erklären?
vielen dank
supersass1
-
supersass1 schrieb:
Ist da ein Unterscheid? Kannst du mir mal des Zusammenhang zwischen Prozess und Fenster und Handle erklären?
IMHO sind das einfach zwei völlig verschiedene Dinge. Ein Prozess kann doch 1000e Fenster erzeugen, die alle natürlich ein anderes Handle haben.
Wenn du 2x auf das Firefox-Icon drückst hast du ja auch 2 Fenster, obwohl firefox.exe nur 1x läuft.
Nichst umsonst ist ein Window Handle auch vom Typ HWND und ein Process Handle wohl nur HANDLE (MS hätte dafür natürlich auch noch einen speziellen typ machen können).
Wenn dus genau wissen willst, musst du allerdings cracks wie Martin Richter doer Jochen Kalmbach hier fragen.
Der Rest ist doch schon gesagt wie du das nun angehen kansnt.
-
ahh okay, dankeschön, so habe ich mir das dann auch gedacht, klingt logisch.
Black Shadow schrieb:
supersass1 schrieb:
Doch nun muss ich das zugehörige Handle noch herusfinden. Doch ich hab die Extension zum Taskmanager und der sagt, das es mehrer Handles gibt, ist das richtig?
welches handle? Das Handle vom Prozess oder von seinem Fenster?
Ersteres kriegst du mit OpenProcess(). letzteres würde ich mit EnumWindows() machen und dann mittels GetWindowThreadProcessId() schauen welches Fenster in dem Prozess läuft mit der Prozess ID die du von CreateToolhelp32Snapshot hast.sprich, um nun den Firefox in Vordergrund zu holen, muss ich via
OpenProcessden Handle herausfinden und ihn in Vordergrund holen?
mfg supersass1
-
nein... ich habe es doch ausführlich erklärt
.
Mit dem Prozess Handle, welches du mit OpenProcess() bekommst, kannst du kein Fenster in den Vordergrund bekommen. Dazu brauchst du das Window Handle.1. Hole dir von allen laufenden Prozessen den Namen und die Prozess-ID mit CreateToolhelp32Snapshot.
2. suche in den Prozessnamen nach firefox.exe und merke dir die Prozess-ID.
3. Hole dir Handles zu allen Top-Level Fenster mit EnumWindows().
4. Prüfe mit GetWindowThreadProcessID(), ob das Fenster die Prozess-ID hat die du dir gemerkt hast.
5. Optional: Prüfe, ob der Klassnename MozillaUIWindowClass
6. Optional: Prüfe, ob im Titel "Mozilla Firefox" _vorkommt_ (nicht dass der Titel Mozilla Firefox _ist_!)
7. Setze das/die Fenster in den Vordergrund
Vorteil gegenüber FindWindow() oder nur EnumWindows(): Du bist auf der sicheren Seite dass du wirklcih Firefox erwischst, da auch andere Programme den Klassennamen haben könnten oder Mozilla Firefox im Titel.
Nachteil: wenn jemanden das exe-File umbenennt suchst du natürlich mit der Suche nach firefox.exe fehl.
-
Black Shadow schrieb:
nein... ich habe es doch ausführlich erklärt
.
Mit dem Prozess Handle, welches du mit OpenProcess() bekommst, kannst du kein Fenster in den Vordergrund bekommen. Dazu brauchst du das Window Handle.1. Hole dir von allen laufenden Prozessen den Namen und die Prozess-ID mit CreateToolhelp32Snapshot.
2. suche in den Prozessnamen nach firefox.exe und merke dir die Prozess-ID.
3. Hole dir Handles zu allen Top-Level Fenster mit EnumWindows().
4. Prüfe mit GetWindowThreadProcessID(), ob das Fenster die Prozess-ID hat die du dir gemerkt hast.
5. Optional: Prüfe, ob der Klassnename MozillaUIWindowClass
6. Optional: Prüfe, ob im Titel "Mozilla Firefox" _vorkommt_ (nicht dass der Titel Mozilla Firefox _ist_!)
7. Setze das/die Fenster in den Vordergrund
Vorteil gegenüber FindWindow() oder nur EnumWindows(): Du bist auf der sicheren Seite dass du wirklcih Firefox erwischst, da auch andere Programme den Klassennamen haben könnten oder Mozilla Firefox im Titel.
Nachteil: wenn jemanden das exe-File umbenennt suchst du natürlich mit der Suche nach firefox.exe fehl.Ah, dankeschön. Punkt 3 war mein Fehler
Ich werde nun ein wenig skripten, vielen dank. Bei Problemen melde ich mich wieder 
Viele lieben dank schonmaö

mfg supersass1