Básicamente hice una aplicación de consola que realiza algunas tareas que dura unos minutos. Me gustaría tenerlo en la barra de tareas para avisarme cuando haya terminado de hacerlo.¿Hay alguna manera de hacer que una ventana de la consola destelle en la barra de tareas programáticamente?
Respuesta
Al usar answer that @Zack posted y another one to find the handle of a console app se me ocurrió esto y funciona muy bien.
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);
}
}
jajaja, supongo que es más fácil que PInvoking obtener el identificador – Davy8
Parece que hay 3 formas diferentes de obtener el identificador de ventana pero me gusta el mejor ya que no funciona t PInvocar para hacerlo así que aceptándolo. – Davy8
Wow. Usé el método P/Invoke para obtener el identificador de la ventana de la consola, lol. http://msdn.microsoft.com/en-us/library/ms683175(VS.85).aspx – Zack
La combinación de la respuesta en la pregunta vinculada en @ comentarios y getting the hwnd of a console window using this de Zack que era capaz de conseguir que funcione. Esta es la clase que he creado:
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);
}
}
No nunca deja de parpadear hasta que se ha cerrado, pero que no era importante para mis propósitos.
Lo leí wasn't possible to get the window handle of a console window a través de cualquier medio directo, pero parece ser bastante simple en .NET en realidad. Por lo tanto, es más o menos lo mismo que 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();
}
}
- 1. ¿Hay alguna manera de hacer que una aplicación de consola de Python se encienda en la barra de tareas en Windows?
- 2. Cómo hacer que una ventana tenga texto en la barra de tareas pero no en la barra de título
- 3. Hacer que la ventana del navegador parpadee en la barra de tareas
- 4. VB.NET ¿Cómo minimizar una ventana a la barra de tareas?
- 5. ¿Hay alguna manera de imprimir en la consola en una aplicación de Android?
- 6. ¿Hay alguna manera de enumerar dependencias de tareas en Gradle?
- 7. ¿Cómo ocultar una entrada en la barra de tareas pero mantener la forma de la ventana?
- 8. ¿Hay alguna manera de establecer el icono de Pygame en la barra de tareas? set_icon() solo parece afectar el icono pequeño en la ventana real
- 9. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 10. ¿Hay alguna manera de hacer que la unión de C# funcione de manera estática?
- 11. Detener el nombre de la aplicación para que destelle en la barra de título
- 12. ¿Hay alguna manera de filtrar la salida en la consola de Google Chrome?
- 13. ¿Hay alguna manera de evitar que UIImagePickerController cambie el estilo de la barra de estado?
- 14. ¿Hay alguna manera de hacer que jqGrid se desplace hasta la parte inferior cuando se agrega una nueva fila?
- 15. ¿Hay alguna manera de establecer programáticamente el ApartmentState en STA?
- 16. ¿Hay alguna manera de hacer que un ExecutorService funcione recursivamente?
- 17. ¿Hay alguna manera de hacer una verificación parcial en TFS?
- 18. ¿Hay alguna manera de hacer que Guice Grapher trabaje?
- 19. ¿Hay alguna manera de hacer una función atómica en C? .
- 20. ¿Hay alguna manera de hacer que UserControl sea inafocable?
- 21. ¿Hay alguna manera de ocultar la barra de pestañas de JTabbedPane si solo existe una pestaña?
- 22. ¿Hay alguna manera de que Ediff no abra su interfaz de navegación en una ventana externa?
- 23. ¿Hay alguna manera de hacer que TFS se pueda enlazar?
- 24. ¿Hay alguna manera de cambiar el contexto a iframe en la consola de JavaScript?
- 25. ¿Hay alguna manera de hacer que la salida de PrintWriter sea en formato UNIX?
- 26. ¿Hay alguna manera de hacer la asignación de servlets en eclipse IDE que no sea manualmente?
- 27. Determinar si una ventana tiene un botón de la barra de tareas
- 28. ¿Hay alguna manera de animar una UITableViewCell para que la fila destelle brevemente en un estado seleccionado y luego vuelva a ser blanco en la selección?
- 29. La pantalla maximizada ignora la barra de tareas
- 30. ¿Hay alguna manera de hacer que la nulabilidad de una columna dependa de la capacidad de anulación de otra columna?
he aquí una solución que pueda ser de alguna ayuda: http://stackoverflow.com/questions/73162/how-to-make-the-taskbar-blink- my-application-like-messenger-does-when-a-new-messa – Zack