123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace GeekDesk.Util
- {
- public class MessageUtil
- {
- public const int WM_COPYDATA = 0x004A;
- public static bool SendMsgByPName(string processName, string msg)
- {
- try
- {
- Process[] processArr = Process.GetProcessesByName(processName);
- if (processArr != null && processArr.Length > 0)
- {
- foreach (Process process in processArr)
- {
- IntPtr windowHandle = process.MainWindowHandle;
- // 发送消息
- CopyDataStruct cds = new CopyDataStruct(IntPtr.Zero, msg);
- SendMessage(
- windowHandle,
- WM_COPYDATA,
- 0, ref cds);
- }
- return true;
- }
- else
- {
- return false;
- }
- } catch (Exception e)
- {
- LogUtil.WriteErrorLog(e, processName + "P发送消息失败!");
- return false;
- }
- }
- public static bool SendMsgByWName(string windowName, string msg)
- {
- try
- {
- IntPtr hwnd = FindWindow(null, windowName);
- if (hwnd != IntPtr.Zero)
- {
- // 发送消息
- CopyDataStruct cds = new CopyDataStruct(IntPtr.Zero, msg);
- SendMessage(
- hwnd,
- WM_COPYDATA,
- 0, ref cds);
- } else
- {
- return false;
- }
- return true;
- }
- catch (Exception e)
- {
- LogUtil.WriteErrorLog(e, windowName + "W发送消息失败!");
- return false;
- }
- }
- public static bool CheckProcessIsRuning(string processName)
- {
- try
- {
- Process[] processArr = Process.GetProcessesByName(processName);
- return (processArr != null && processArr.Length > 0);
- }
- catch (Exception e)
- {
- LogUtil.WriteErrorLog(e, processName + "检查进程名失败!");
- return false;
- }
- }
- public static bool CheckWindowIsRuning(string windowName)
- {
- try
- {
- IntPtr hwnd = FindWindow(null, windowName);
- return (hwnd != IntPtr.Zero);
- } catch(Exception)
- {
- return false;
- }
-
- }
- [DllImport("User32.dll", EntryPoint = "FindWindow")]
- public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
- [DllImport("User32.dll", EntryPoint = "SendMessage")]
- private static extern int SendMessage(
- IntPtr hWnd, //目标窗体句柄
- int Msg, //WM_COPYDATA
- int wParam, //自定义数值
- ref CopyDataStruct lParam //传递消息的结构体,
- );
- [StructLayout(LayoutKind.Sequential)]
- public struct CopyDataStruct
- {
- public CopyDataStruct(IntPtr custom, string msg)
- {
- this.custom = custom;
- this.msg = msg;
- this.msgLength = msg.Length + 1;
- }
- public IntPtr custom;//用户定义数据
- public int msgLength;//字符串长度
- [MarshalAs(UnmanagedType.LPStr)]
- public string msg;//字符串
- }
- [DllImport("user32")]
- public static extern bool ChangeWindowMessageFilter(uint msg, int flags);
- }
- }
|