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);
|
|
|
/// <summary>
|
/// 根据窗口标题获取WPF窗口对象
|
/// </summary>
|
/// <param name="windowTitle">窗口标题</param>
|
/// <returns>WPF窗口对象,如果未找到则返回null</returns>
|
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;
|
}
|
|
|
}
|
}
|