Как прошить весь экран в C #? - PullRequest
2 голосов
/ 07 октября 2011

Требуется некоторое время, чтобы моя программа завершила вычисления, поэтому я хотел бы запустить ее, читать некоторые веб-страницы, а когда мигает экран (уведомление о завершении вычислений), я возвращаюсь к своей программе.

Единственная недостающая часть - как прошить весь экран в C #? Я использую WPF, если это имеет значение.

Обратите внимание - моя программа не видна, другая программа (например, веб-браузер) занимает весь экран (в этом и заключается проблема, потому что в противном случае мне не понадобилось бы никакого уведомления на все).

Вспышка = мигает.

Ответы [ 4 ]

4 голосов
/ 07 октября 2011

Мой первый подход будет следующим: по завершении вычислений ваша программа откроет новое самое верхнее окно с прозрачным фоном и задает для него некоторый цвет (белый) на несколько коротких интервалов и снова закройте окно.имейте в виду, что пока окно находится сверху, вы не сможете взаимодействовать с нижележащими окнами во время перепрошивки, потому что окно будет использовать эти события.В качестве альтернативы вы можете сделать то, что делает большинство других приложений для Windows (например, outlook или messenger): отобразить окно с кратким уведомлением, которое можно щелкнуть, чтобы перейти к связанному приложению (вашей программе).

4 голосов
/ 07 октября 2011

Я думаю, что более «нормальной» практикой было бы установить приложение в виде значка в системном трее - тогда вы можете изменить это при любом изменении статуса.

2 голосов
/ 07 октября 2011
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern Int16 FlashWindowEx(ref FLASHWINFO pwfi);

[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.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 void Flash() {

    FLASHWINFO flashInfo = new FLASHWINFO();
    flashInfo.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(flashInfo);
    flashInfo.hwnd = this.Handle; // get the window handle
    flashInfo.dwFlags = FLASHW_TIMERNOFG | FLASHW_ALL;
    flashInfo.uCount = UInt32.MaxValue;
    flashInfo.dwTimeout = 0;

    FlashWindowEx(ref flashInfo);
}
1 голос
/ 07 октября 2011

Я не думаю, что вы можете технически прошить свой экран с помощью WPF. Возможно с функцией Win32. Но будет ли возможность сделать скриншот и показать Windows, которая показывает модифицированную версию этого скриншота? Это окно должно быть объявлено как TopMost и закрывать ваш экран, и ваше изображение может быть изменено путем увеличения альфа-канала с течением времени.

Редактировать: ОК, я думаю, что неправильно понял "вспышка". Если вы просто хотите показать мигающий прямоугольник одного цвета, взгляните на ветку, которую опубликовал Мамта Далал.

...