您的位置:首页 > 职场人生

FindWindow与SendMessage传送消息

2010-11-30 23:01 344 查看
最近自己在写个工具,功能是启动一个*.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); //发送回车执行代码

}

附件:http://down.51cto.com/data/2357218
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息