alielie
2025-11-25 006c98e5650b530e5220f279c1e803fefe69d40d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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;
        }
 
 
    }
}