System.Windows.Forms.Screen.WorkingArea ändern?
-
hi,
das Mitglied WorkingArea der Klasse System.Windows.Forms ist Read Only, gibt es trotzdem eine Möglichkeit es zu ändern? (Methode? anderes Objekt? o.ä.)
Ich brauch das weil ich eine Anwendung programmieren möchte, die immer im Hintergrund läuft und deren Fenster, ähnlich wie das von ICQ oder miranda ständig sichtbar ist (andee Fenster sparen den Bildschirmbereich einfach aus). Derzeit lässt mein Fenster sich zwar nicht verbergen, verdeckt aber andere Fenster.
Danke schonmal,
campino
-
so, ich habe eine Lösung gefunden. Und zwar binde ich die coredll.dll ein. Über diese wird SystemParameterInfo eingebunden, mit dieser Funktion kann man dann die WorkArea ändern. Leider erwartet die Funktion einen PVOID mit einem Zeiger auf eine RECT-Struktur als Übergabewert. Wie erzeuge ich diesen zeiger. Hier mein bisheriger Code, das einbinden der MessageBox-Funktion dient nur testzweken, funktioniert aber:
using System; using System.Runtime.InteropServices; using System.Drawing; class Test { [DllImport("user32.dll")] public static extern int MessageBoxA(int h, string m, string c, int type); [DllImport("coredll.dll")] public static extern bool SystemParametersInfoA(int uiAction, int uiParam, int pvParam, int fWinIni); public static int SPI_SETWORKAREA=47; public static void Main(string[] args) { string bef=args[0].ToUpper(); if(bef.Equals("MESSAGEBOX")){ int retval = MessageBoxA(0, args[1], args[2], 0); }else if(bef.Equals("WORKINGAREA")){ int param1=Convert.ToInt32(args[1]); //uiParam int rectx=Convert.ToInt32(args[2]); int recty=Convert.ToInt32(args[3]); int rectwidth=Convert.ToInt32(args[4]); int rectheight=Convert.ToInt32(args[5]); Rectangle r=new Rectangle(rectx, recty, rectwidth, rectheight); int param2=Convert.ToInt32(r); int fwinini=Convert.ToInt32(args[6]); SystemParametersInfoA(SPI_SETWORKAREA, param1, param2, fwinini); } } }