事件
C#
SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;SystemEvents.SessionEnding += SystemEvents_SessionEnding;SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
系统消息轮训
C#
[StructLayout(LayoutKind.Sequential)]private struct MSG { public IntPtr hwnd; public uint message; public IntPtr wParam; public IntPtr lParam; public uint time; public POINT pt; }[StructLayout(LayoutKind.Sequential)]private struct POINT { public int X; public int Y; public POINT(int x, int y) { X = x; Y = y; } }[DllImport("user32.dll")]private static extern bool DispatchMessage([In] ref MSG lpmsg);[DllImport("user32.dll")]private static extern int GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);private Thread messageLoopThread;private void MessageLoop(){ if (messageLoopThread is not null) { return; } messageLoopThread = new Thread(() => { while (true) { try { while (GetMessage(out var msg, IntPtr.Zero, 0, 0) > 0) { DispatchMessage(ref msg); } } catch (Exception ex) { Logger.Instance.Error(ex); } } }); if (OperatingSystem.IsWindows()) { messageLoopThread.SetApartmentState(ApartmentState.STA); } messageLoopThread.Start();}
支付宝微信扫一扫,打赏作者吧~
