Hallo,
möchte wenn mein Programm auf einen CE automatisch gestartet wird, das die Taskbar automatisch verschwindet.
Gibt es da eine Möglichkeit?
Beste Grüße
Dennis
Hi
unterm Framework gibts die Property
Form.ShowInTaskbar = false
Allerdings kann ich ned sagen, ob das unter CE genauso aussieht 🙂
greetz
Das größte Misstrauensvotum gegen Gott ist ein Blitzableiter auf dem Kirchturm! 😁
@Syrinx: Ich glaub du hast die Frage falsch verstanden: dgroeser möchte nicht wissen, wie er verhindert, dass das Form in der Taskbar angezeigt wird, sondern möchte die ganze Taskbar ausblenden.
@dgroeser: Das musst du, glaub ich, über die WinAPI machen. Wie das damit auf CE läuft, weiß ich aber nicht.
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Hallo hatte das selbe Problem, allerdings wollte ich den Effekt nur wenn das MDI Container Fenster maximiert wird.
Aber aufgepasst, ich habe die Control Boxen selbst gemalt, auf einer normalen Form sind die nicht mehr sichtbar.
public enum WindowMessages
{
WM_SYSCOMMAND = 0x0112
}
public enum SystemCommands
{
SC_MAXIMIZE = 0xF030
}
protected override void WndProc(ref Message m)
{
if (m.Msg == (int) WindowMessages.WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == (int)SystemCommands.SC_MAXIMIZE)
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
else
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
}
base.WndProc(ref m);
}
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
@Andreas.May: Ich glaube du hast die Frage auch falsch gestanden. Als Taskbar verstehe ich die (Task-)Leiste, die (im Normalfall) unten über die gesamte Desktop-Breite angezeigt wird un in der sich der Start-Button mit dem Windows-Symbol befindet.
Wenn ich mein, alle verstehen die Frage falsch, kann natürlich auch sein, dass ich sie falsch versteh 😉.
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
genau die will ich ausblenden bzw. das Fenster einfach davor damit mehr platz auf der form ist?
Original von dgroeser
genau die will ich ausblenden bzw. das Fenster einfach davor damit mehr platz auf der form ist?
Kopier mal den Code in deine Form.
Klicke dann mal auf den Maximieren Button deines Fensters.
Die Taskleiste wird überblendet und ein Formular ist wie im Vollbildmodus.
Ist einfach ein kleiner Trick. Nur die Controls der Titlebar verschwinden.
/PS
Habe es in VS2005 erstellt und Probiert, evtl. liegt es ja daran das es nicht geht?
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Das mit maximieren funktioniert nicht
Hm, schade.
Ansonsten über Spy++ mal die Taskbar auswählen, schauen wie sich das Ding verhält. Wüde es über Window Subclassing dann versuchen.
Denk nur dran das WINSDK gut anzusehen, wirst statt einen intPtr dafür einen Delegate für den Callback brauchen.
public delegate void HookProcessedHandler(int code,
UIntPtr wparam, IntPtr lparam)
Aber vielleicht hat jemand noch eine etwas einfacherere / schönerere Lösung für das Problem.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Und das ganze auf Deutsch hast du einen Code den ich komplett einbinden kann der auch funktioniert?
Hallo,
Schmeiß einfach das MainMenu aus Deiner Form, dann ist die Taskbar weg.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Also hier die Lösung, geht auch ohne Subclassing sehr einfach.
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, out Rectangle lpRect);
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X,
int Y, int cx, int cy, uint uFlags);
[Flags]
public enum SWP
{
SWP_NOSIZE = 0x0001,
SWP_NOMOVE = 0x0002,
SWP_NOZORDER = 0x0004,
SWP_NOREDRAW = 0x0008,
SWP_NOACTIVATE = 0x0010,
SWP_FRAMECHANGED = 0x0020,
SWP_SHOWWINDOW = 0x0040,
SWP_HIDEWINDOW = 0x0080,
SWP_NOCOPYBITS = 0x0100,
SWP_NOOWNERZORDER = 0x0200,
SWP_NOSENDCHANGING = 0x0400,
SWP_DEFERERASE = 0x2000,
SWP_ASYNCWINDOWPOS = 0x4000
}
public static Rectangle m_oRec;
public static bool HideTaskbar()
{
IntPtr Task = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", "");
// falls der handle der taskbar nicht gefunden wurde
if (Task == IntPtr.Zero)
return false;
// dieses rectangle einfach irgendwo merken damit die höhe später wiederhergestellt werden kann
GetWindowRect(Task, out m_oRec);
// setzt die Windows possition auf null und lässt die Taskbar verschwinden
return SetWindowPos(Task, IntPtr.Zero, 0, 0, 0, 0, (uint)SWP.SWP_HIDEWINDOW);
}
public static bool ShowTaskbar(Rectangle _oRec)
{
// suche taskbar handle
IntPtr Task = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", "");
// falls der handle der taskbar nicht gefunden wurde
if (Task == IntPtr.Zero)
return false;
// zeigt die taskbar wieder an
return SetWindowPos(Task, IntPtr.Zero, _oRec.X, _oRec.Y, _oRec.Height, _oRec.Width, (uint)SWP.SWP_SHOWWINDOW;
}
Brauchst das natürlich nicht static setzen, auch einfach dann beim TaskHide die ClientSize mit Hilfe von PointToScreen über die gesamte Bildschirm-Fläche legen..
Dafür war ich aber etwas zu faul🙂
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Wenn ich den Code einbinde kommt folgender Fehler
Can't find PInvoke DLL 'user32.dll'.
Hmm, habe leider keinen Windows CE/Pocket-PC...
Hab es daher verpennt das es kein 'user32.dll' gibt, aber trotzdem kein Thema.
Ersetzt das einfach durch 'coredll.dll' dann sollte es funktionieren.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Ich bekomme bei diesen Code folgende Fehlermeldung
Can't find an Entry Point 'FindWindowEx' in a PInvoke DLL 'coredll.dl
Original von Andreas.May
Also hier die Lösung, geht auch ohne Subclassing sehr einfach.using System.Runtime.InteropServices; [DllImport("user32.dll")] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll")] private static extern bool GetWindowRect(IntPtr hWnd, out Rectangle lpRect); [DllImport("user32.dll")] static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [Flags] public enum SWP { SWP_NOSIZE = 0x0001, SWP_NOMOVE = 0x0002, SWP_NOZORDER = 0x0004, SWP_NOREDRAW = 0x0008, SWP_NOACTIVATE = 0x0010, SWP_FRAMECHANGED = 0x0020, SWP_SHOWWINDOW = 0x0040, SWP_HIDEWINDOW = 0x0080, SWP_NOCOPYBITS = 0x0100, SWP_NOOWNERZORDER = 0x0200, SWP_NOSENDCHANGING = 0x0400, SWP_DEFERERASE = 0x2000, SWP_ASYNCWINDOWPOS = 0x4000 } public static Rectangle m_oRec; public static bool HideTaskbar() { IntPtr Task = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", ""); // falls der handle der taskbar nicht gefunden wurde if (Task == IntPtr.Zero) return false; // dieses rectangle einfach irgendwo merken damit die höhe später wiederhergestellt werden kann GetWindowRect(Task, out m_oRec); // setzt die Windows possition auf null und lässt die Taskbar verschwinden return SetWindowPos(Task, IntPtr.Zero, 0, 0, 0, 0, (uint)SWP.SWP_HIDEWINDOW); } public static bool ShowTaskbar(Rectangle _oRec) { // suche taskbar handle IntPtr Task = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", ""); // falls der handle der taskbar nicht gefunden wurde if (Task == IntPtr.Zero) return false; // zeigt die taskbar wieder an return SetWindowPos(Task, IntPtr.Zero, _oRec.X, _oRec.Y, _oRec.Height, _oRec.Width, (uint)SWP.SWP_SHOWWINDOW; }
Brauchst das natürlich nicht static setzen, auch einfach dann beim TaskHide die ClientSize mit Hilfe von PointToScreen über die gesamte Bildschirm-Fläche legen..
Dafür war ich aber etwas zu faul🙂
Hrm, habe mal nachgeschaut leider wird FindWindowEx nicht für Windows CE supported 🙁
Fürchte musst dann einen anderen Lösungsansatz versuchen, nur ehrlich gesagt habe keine Ahnung wie es sonst ohne viele Probleme zu erzeugen sonst machbar wäre.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(