132 lines
4.0 KiB
C#
132 lines
4.0 KiB
C#
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);
|
|
|
|
}
|
|
}
|