Entfernen Sie den Rahmen / das Fenster / den Rahmen eines anderen Programms (das Aero-Bit) mit VB.NET

8

Gibt es eine Möglichkeit, den Rahmen (das Aero-Bit) des Fensters einer anderen Anwendung (z. B. Notepad) aus einem VB.NET-Programm zu entfernen?

    
Jonathan. 15.02.2010, 19:49
quelle

1 Antwort

14

Sie können das mit P-Invoke tun. Unten ist ein Code, der SetWindowLong (in User32.dll) verwendet Ändern Sie den Rand des Hauptfensters von Notepad. (Bei diesem Code wird davon ausgegangen, dass eine Notepad-Instanz ausgeführt wird.) Sie können mit verschiedenen Fensterstilen experimentieren, um das gewünschte Ergebnis zu erzielen.

GWL_STYLE ist für grundlegende Fensterstile. Sie können über hier nachlesen.
GWL_EXSTYLE ist für erweiterte Fensterstile. Sie können über hier nachlesen.

%Vor%

Erläuterung des Codes

Ich bin mir nicht sicher, wie viel Erfahrung Sie bei der Entwicklung von GUI-Anwendungen haben, also werde ich ein wenig Hintergrundwissen darüber geben, wie ein Fenster funktioniert. Ein Fenster hat eine eindeutig identifizierende Nummer, die als Handle bezeichnet wird. Dem Fenster ist auch eine Fensterprozedur zugeordnet, die Nachrichten (ganze Zahlen, die Ereignisse und Befehle identifizieren) für dieses Fenster behandelt. Wenn ein Fenster erstellt wird, geben Sie an, welche Stile das Fenster haben soll usw. Es gibt eine viel größere Komplexität für Windows-Anwendungen, aber um nicht in den Details stecken zu bleiben, werden wir weitermachen.

Glücklicherweise isoliert .NET Winforms uns davon, mit der Windows-API interagieren zu müssen und Nachrichten direkt (größtenteils) zu handhaben, und macht es sehr einfach, funktionale GUI-Anwendungen zu erstellen. In der Windows-API gibt es viel mehr Power unter der Haube, über die sich die meisten .NET-Entwickler normalerweise keine Gedanken machen müssen.

Jetzt mit diesem Hintergrund sollte der Code ein wenig leichter zu verstehen sein.

Zunächst müssen wir den ersten Prozess namens "notepad" aufrufen.

%Vor%

Dann definieren wir zwei Ganzzahlen GWL_STYLE und GWL_EXSTYLE . Diese beiden Ganzzahlen haben im Zusammenhang mit der Funktion SetWindowLong eine spezifische Bedeutung. Ihr Wert (und der Wert vieler anderer Konstanten) kann in Winuser.h und dem Rest der Header-Dateien im Windows SDK gefunden werden.

%Vor%

Als nächstes bekommen wir den Griff des Hauptfensters des Notizblocks.

%Vor%

Danach stoßen wir auf die Funktion GetWindowLong . Von MSDN:

  

Die GetWindowLong-Funktion ruft Informationen über das angegebene Fenster ab.

GetWindowLong verwendet das Fensterhandle und einen Wert, der angibt, welche Informationen abgerufen werden sollen, und gibt die angegebenen Informationen zurück.

%Vor%

Diese wurden eingefügt, damit Sie sehen konnten, welche Stile auf das Fenster angewendet wurden, damit Sie festlegen können, welche Stile weggelassen werden sollen.

Als nächstes definieren wir, welche Stile wir auf das Fenster anwenden wollen. Sie können über die verschiedenen Stile und ihre Bedeutungen hier nachlesen.

%Vor%

Dann wenden wir diese Stile mit SetWindowLong auf das Fenster an. Von MSDN:

  

Die Funktion SetWindowLong ändert ein Attribut des angegebenen Fensters.

SetWindowLong verwendet das Fensterhandle, einen Wert, der angibt, welches Attribut geändert werden soll, und den neuen Wert des Attributs, und ändert das Attribut.

%Vor%

Das ist im Grunde, was der Code tut. Um Wiederholungen zu vermeiden, gehe ich nicht auf GWL_EXSTYLE , da es genauso verwendet wird wie GWL_STYLE . Der Rest des Codes ist nur Logistik, damit wir SetWindowLong und GetWindowLong verwenden können.

    
Zach Johnson 17.02.2010, 23:13
quelle

Tags und Links