using System; using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Interop; namespace HMI.Util.Base { public interface AlarmBase { bool? Alarm(string message); } public class AlarmUtil { [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern IntPtr GetModuleHandle(string lpModuleName); [DllImport("user32.dll")] private static extern bool IsWindow(IntPtr hWnd); [DllImport("user32.dll")] private static extern int GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount); [DllImport("user32.dll")] private static extern bool SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); /// /// 根据窗口标题获取WPF窗口对象 /// /// 窗口标题 /// WPF窗口对象,如果未找到则返回null public static IntPtr GetProcessIdByName(string windowTitle) { Process[] processes = Process.GetProcesses(); foreach (Process process in processes) { if (process.ProcessName == windowTitle) { var handle = process.MainWindowHandle; Console.WriteLine(process.MainWindowHandle.ToString()); Console.WriteLine(IsWindow(process.MainWindowHandle)); var className = new System.Text.StringBuilder(256); GetClassName(handle, className, className.Capacity); Console.WriteLine(className.ToString()); Console.WriteLine(SendMessage(handle, 0x12, IntPtr.Zero, IntPtr.Zero)); var source = HwndSource.FromHwnd(process.MainWindowHandle); var v = source?.RootVisual; if (v is AlarmBase ab) Console.WriteLine(ab.Alarm("123").ToString()); return process.MainWindowHandle; } } return IntPtr.Zero; } } }