最近自己在写个工具,功能是启动一个*.lnk连接,给该连接传送一个消息,然后执行,比如执行"Cd \"命令。因为ps.StandardInput.Write 不能将命令传送给*.lnk连接,所以考虑到适用API函数来完成这个功能。关于FindWindow与SendMessage的方法详细签名,可以在google中查询,再次不在赘述。实现该功能主要一个问题在于调用SendMessage方法时 wMsg 的分类,可以网上查到,因为当前是将一个字符串要传送到*.lnk连接,所以 wMsg 应该设为0x102。
下面是代码的详细部分,已经过测试,可以正常使用。对API函数不是很熟,希望大家不吝赐教。
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
int WM_CHAR = 0x102;
using (Process ps = new Process())
{
ps.StartInfo.FileName = "cmd.lnk"
ps.Start();
System.Threading.Thread.Sleep(10000);
IntPtr cur= FindWindow("ConsoleWindowClass",@"C:\WINDOWS\system32\cmd.exe"); //找窗体
byte[] chars = (new System.Text.ASCIIEncoding()).GetBytes(@"Cd \"); //要写的信息
for (int i = 0; i < chars.Length; i++)
{
SendMessage(cur, WM_CHAR, (int)chars[i], 0); //以字符发送
}
SendMessage(cur, WM_CHAR, 13, 0); //发送回车执行代码
}
本文转自lidup 51CTO博客,原文链接:http://blog.51cto.com/lidup/437943,如需转载请自行联系原作者