Im Grunde habe ich Konsolen-App, die eine Aufgabe ausführt, die ein paar Minuten dauert. Ich möchte es in der Taskleiste blinken lassen, um mich wissen zu lassen, wenn es fertig ist.Gibt es eine Möglichkeit, ein Konsolenfenster in der Taskleiste programmatisch blinken zu lassen
Antwort
Mit den answer that @Zack posted und another one to find the handle of a console app kam ich auf diese und es funktioniert super.
class Program
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public Int32 dwTimeout;
}
public const UInt32 FLASHW_ALL = 3;
static void Main(string[] args)
{
Console.WriteLine("Flashing NOW");
FlashWindow(Process.GetCurrentProcess().MainWindowHandle);
Console.WriteLine("Press any key to continue");
Console.ReadKey();
}
private static void FlashWindow(IntPtr hWnd)
{
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;
fInfo.dwFlags = FLASHW_ALL;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
FlashWindowEx(ref fInfo);
}
}
lol, ich denke, das ist einfacher als PInvoking, um den Griff zu bekommen – Davy8
Sieht aus wie 3 verschiedene Möglichkeiten, den Fenstergriff zu bekommen, aber ich mag deine besten, da es nicht ' tPInvozieren, es so zu tun, es zu akzeptieren. – Davy8
Wow. Ich habe die P/Invoke-Methode verwendet, um den Fenster-Handle des Konsolenfensters abzurufen, lol. http://msdn.microsoft.com/en-us/library/ms683175(VS.85).aspx – Zack
die Antwort in der Frage Kombination @ Zacks Kommentar verknüpft in und getting the hwnd of a console window using this konnte ich es zum Laufen bringen. Dies ist die Klasse I erstellt:
public static class FlashWindow
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public const UInt32 FLASHW_ALL = 3;
public static void Flash()
{
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = GetConsoleWindow();
fInfo.dwFlags = FLASHW_ALL;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
FlashWindowEx(ref fInfo);
}
}
Es ist immer blinkt nicht aufhören, bis es geschlossen ist, aber das war für meine Zwecke nicht wichtig.
Ich lese, dass es wasn't possible to get the window handle of a console window durch irgendwelche direkte Mittel, aber es scheint in .NET tatsächlich ziemlich einfach zu sein. Also, es ist so ziemlich das gleiche wie this question:
class Program
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public const UInt32 FLASHW_STOP = 0;
public const UInt32 FLASHW_CAPTION = 1;
public const UInt32 FLASHW_TRAY = 2;
public const UInt32 FLASHW_ALL = 3;
public const UInt32 FLASHW_TIMER = 4;
public const UInt32 FLASHW_TIMERNOFG = 12;
static void Main(string[] args)
{
// Give you a few seconds to alt-tab away :)
Thread.Sleep(2000);
// Flash on the task bar, until the window becomes the foreground window.
// Constants for other behaviors are defined above.
FLASHWINFO fInfo = new FLASHWINFO();
fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = Process.GetCurrentProcess().MainWindowHandle;
fInfo.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;
FlashWindowEx(ref fInfo);
// Wait for input so the app doesn't finish right away.
Console.ReadLine();
}
}
Hier eine Lösung ist, die eine Hilfe sein kann: http://stackoverflow.com/questions/73162/how-to-make-the-taskbar-blink- my-application-like-messenger-does-when-a-new-messa – Zack