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;
}
}
}