Laden...

Form "allways on top" - ggf. API SetWindowPos, ABER innerhalb einer Funktion

Letzter Beitrag vor 20 Tagen 6 Posts 315 Views
Form "allways on top" - ggf. API SetWindowPos, ABER innerhalb einer Funktion

Hallo,

ich entwickle ein Makro innerhalb einer bestehenden Anwendung.

Die Einschränkungen sind, dass ich mich innerhalb einer Funktion bewege.

Daher wäre ein DLL-Import, so wie ich ihn kenne nicht möglich, da er nach meinem Wissen immer außerhalb einer Funktion passieren muss?!

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

Mit "Funktionen" innerhalb einer Funktion behelfe ich mir mit anonymen Lamda ausdrücken:

Func<bool,bool> Test = (dummy) ⇒

{ .. hier die Funktion .. };

Hat jemand eine Idee oder gibt es eine Möglichkeit auf dies API-Funktion zuzugreifen oder gibt es eine Alternative?
Das Fenster soll IMMER im Vordergrund und über ALLE ANDEREN Fenster stehen...

LG

Byte

Das Fenster soll IMMER im Vordergrund und über ALLE ANDEREN Fenster stehen...

Aus Sicherheitsgründen geht sowas bei modernen Betriebssystemen nur noch per sogenanntem Kioskmodus. Bei allen anderen Varianten (zB Windows API) kann der User das aushebeln - eben aus Sicherheitsgründen (zB Ransomware Splashscreens)

Bei "Always On Top" muss man entweder periodisch oder eventbasiert (so machen das die PowerToys) immer wieder überprüfen, ob das was "Always On Top" sein soll auch immer noch "On Top" ist und wenn nicht, dann eben wieder dort hinbringen.

Hat die Blume einen Knick, war der Schmetterling zu dick.

Danke.

So habe ich es aktuell gelöst.

Das Hauptprogramm legt einen dunklen „Schleier“ über das Programm beim ausführen der Makros, damit der Benutzer nicht mit der Maus dazwischen klickt. Das verhindert aber auch die Kommunikation mit dem Benutzer, da die Forms auch hinter diesem Schleier verschwinden. Ich setzte im Sekunden Intervall die BringToFront Funktion. Das funktioniert meistens, manchmal halt nicht. Und das Fenster sollte sich vor andere Fenster anderer Programme.

Von früher machte ich die SetWindowPos, SetForegroundWindow wusste aber nicht, dass die aus Sicherheitsgründen nicht mehr geht.

Zitat von Bytechanger

Von früher machte ich die SetWindowPos, SetForegroundWindow wusste aber nicht, dass die aus Sicherheitsgründen nicht mehr geht.

Von "geht nicht" war nicht die Rede; man kanns halt aushebeln.