Страницы

Поиск по вопросам

понедельник, 17 декабря 2018 г.

Отображение нескольких окон на несколько мониторов

При запуске приложения необходимо отобразить на 3 монитора - 3 разных окна. монитор А > окно А монитор Б > окно Б монитор В > окно В Примерно так.
Каким образом это можно реализовать на C# и WPF?


Ответ

Вот вариант БЕЗ WinForms
ScreenInformation.cs
namespace MultiScreen { public class ScreenInformation { [StructLayout(LayoutKind.Sequential)] public struct ScreenRect { public int left; public int top; public int right; public int bottom; }
[DllImport("user32")] private static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lpRect, MonitorEnumProc callback, int dwData);
private delegate bool MonitorEnumProc(IntPtr hDesktop, IntPtr hdc, ref ScreenRect pRect, int dwData);
public class WpfScreen { public WpfScreen(ScreenRect prect) { metrics = prect; }
public ScreenRect metrics; }
static LinkedList allScreens = new LinkedList();
public static LinkedList GetAllScreens() { ScreenInformation.GetMonitorCount(); return allScreens; }
public static int GetMonitorCount() { allScreens.Clear(); int monCount = 0; MonitorEnumProc callback = (IntPtr hDesktop, IntPtr hdc, ref ScreenRect prect, int d) => { Console.WriteLine("Left {0}", prect.left); Console.WriteLine("Right {0}", prect.right); Console.WriteLine("Top {0}", prect.top); Console.WriteLine("Bottom {0}", prect.bottom); allScreens.AddLast(new WpfScreen(prect)); return ++monCount > 0; };
if (EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, callback, 0)) Console.WriteLine("You have {0} monitors", monCount); else Console.WriteLine("An error occured while enumerating monitors");
return monCount; } } }
App.xaml.cs
namespace MultiScreen { ///

/// Interaction logic for App.xaml /// public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); LinkedList screens = ScreenInformation.GetAllScreens(); foreach (var screen in screens) { var window = new MainWindow();
Console.WriteLine("Metrics {0} {1}", screen.metrics.top, screen.metrics.left);
window.Top = screen.metrics.top; window.Left = screen.metrics.left; window.Show(); } } } }

Комментариев нет:

Отправить комментарий