C#给其他程序发消息

摘要:
IntPtrpanel1=查找WindowEx;IntPtrpanel2=查找WindowEx;如果有多个相同类型的子窗口,FindWindowEx的第二个参数控制从哪个子窗口开始以及从哪里开始。IntPtredit1=FindWindowEx;IntPtredit2=FindWindowEx;逐个发送消息SendMessage;在循环中发送字符串end=“hello”;用于发送消息;发送字符串SendMessage;选择7个文本SendMessage;

1、相关声明函数,SendMessage可定义两种格式。


[DllImport("User32.DLL", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("User32.DLL")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
[DllImport("User32.DLL")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);

[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);


2、相关消息

public const uint WM_SETTEXT = 0x000C;


public const uint WM_CHAR = 0x0102;


public const uint EM_SETSEL = 0x00B1;


3、
用spy++观察是哪个窗口处理消息,然后用FindWindow找到窗口句柄
IntPtr main = FindWindow("TFrmMain", null);


自己启动,比如记事本
Process vProcess = Process.Start("notepad.exe");
while (vProcess.MainWindowHandle == IntPtr.Zero) vProcess.Refresh();
注:启动之后可以直接发键值
SendKeys.Send("01234/n");SendKeys.Send("56789/n");


枚举所有进程
Process[] vP2 = Process.GetProcesses();

用FindWindowEx找子窗口句柄,一层层找下去。
IntPtr panel1 = FindWindowEx(main, IntPtr.Zero, "TPanel", null);
IntPtr panel2 = FindWindowEx(panel1, IntPtr.Zero, "TPanel", null);

如果有多个同类子窗口,FindWindowEx第二个参数,控制从哪个子窗口开始找何开始找。
IntPtr edit1 = FindWindowEx(panel2, (IntPtr)null, "TEdit", null);
IntPtr edit2 = FindWindowEx(panel2, edit1, "TEdit", null);

逐个发消息
SendMessage(edit1, WM_CHAR, (uint)Keys.F3, 0);

用循环发
string end="hello";
for(int i=0;i<5;i++)
  SendMessage(edit1, WM_CHAR, (uint)end[i], 0);

发字符串
SendMessage(vHandle, WM_SETTEXT, IntPtr.Zero, "测试/r/n换行");

选中7个文本
SendMessage(vHandle, EM_SETSEL, 0, 7);

免责声明:文章转载自《C#给其他程序发消息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据库测试数据自动生成工具iOS开发UI篇—UIPickerView控件简单介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unity中Invoke函数基础用法

public voidInvoke(stringmethodName, floattime); methodName是方法名,time 是具体几秒 在具体事件以后调用这个方法 也就是说,Invoke("SendMessage",5) ,表示的是在“5s”以后执行“SendMessage”方法。 使用Invoke方法需要注意以下三点: 1、它应该在Start...

C# 弹出层移动

 groupPrint.MouseDown += GroupBox1_MouseDown; #region 弹出层移动        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "ReleaseCapture")]        public static ext...

SendMessage()鼠标软模拟

//鼠标软模拟:好处就是不会真的移动鼠标 开始按钮 坐标 x=386y=387 SendMessage(hookHwnd,messages.WM_LBUTTONDOWN ,0,$0180017A); //按下鼠标左键 SendMessage(hookHwnd,messages.WM_LBUTTONUP ,0, $0180017A); //抬起鼠标左键...

Android sendMessage 与 obtainMessage (sendToTarget)比较

话说在工作中第一次接触android 的Handler 的时候,不知道怎么去关注性能。 记得当时这么写的: Message msg = new Message() msg.what = xxx; msg.arg1 = xxx; msg.arg2 = xxx; handler.sendMessage(msg); 这样写也没有绝得不好,反正当时项目...

SendMessage模拟按键所需的虚拟键码

Virtual-Key Codes The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The c...

控制Windows音量

public partial class AdjustVolume { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern IntPtr SendMessage(IntPtr hWnd, uint M...