Entwickler-Ecke

Windows API - Fremdprogramm Rechte für SetForegroundWindow entziehen


Delete - Do 04.10.07 19:20
Titel: Fremdprogramm Rechte für SetForegroundWindow entziehen
Hi!

Ich versuche gerade, ein Programm in das ich mich einhooke davon abzuhalten, sich selbst in den Vordergrund zu setzen.

Ich weiß, dass ab WinXP ein Prozess prinzipiell ein spezielles Recht besitzen muss, um SetForeGroundWindow aufzurufen (was aber standardmäßig gesetzt ist). Ich finde nur nicht heraus, wie ich dieses Recht ausschalten kann.

Kann mir da jemand weiterhelfen?

THX

---

Hm... also von diesem Programm bin ich echt entnervt... hab noch nie gesehen, dass sich etwas dermaßen aggressiv in den Vordergrund gesetzt hat. Theoretisch ist bei mir ja schon von TweakUI her ausgeschaltet, dass Anwendungen den Fokus stehlen können.

Moderiert von user profile iconNarses: Doppelposting entfernt.


BenBE - Sa 06.10.07 14:12

Überschreib beim Hooken SetForegroundWindow mit einer leeren Funktion UND MoveWindows so, dass es das TOPMOST-Flag ignorier.

BTW: Um was für eine Anwendung handelt es sich denn?


Delete - Sa 06.10.07 18:26

Hm ja... muss ich mal sehen.

Gibt's eigentlich noch andere Funktionen, mit denen sich ein Fenster in Windows in den Vordergrund zwingen kann? Bei mir sollte theoretisch in der Registry schon ausgeschaltet sein, dass SetForegroundWindow überhaupt benutzt werden kann, um den Fokus zu stehlen. Hab auch bis jetzt kaum gesehen, dass irgendein Programm das so aggressiv durchzieht.

Ist ein Online-Poker Client.


Delete - Di 09.10.07 08:27

user profile iconBenBE hat folgendes geschrieben:
Überschreib beim Hooken SetForegroundWindow mit einer leeren Funktion UND MoveWindows so, dass es das TOPMOST-Flag ignorier.


Ich hab jetzt erstmal noch nach anderen Möglichkeiten gesucht aber erstmal keine Gefunden. Man könnte noch versuchen einen WH_SHELL Hook zu verwenden und die Aktivierungsmessage des Fensters abzufangen. Aber ich bin mir nich so sicher ob das funktionieren würde.

Jetzt muss ich erst nochmal dumm fragen: Wie überschreibe ich denn eine beliebige Funktion für eine Anwendung?
Oder meintest du, ich soll dem Programm irgendwie eine gefakete user32.dll aufzwingen?


EDIT: Ich sollte erwähnen, dass das Zielprogramm alle Zugriffsanfragen über OpenProcess ablehnt. Daher wird DLL-Injection wohl nicht in Frage kommen.