最近自己在寫個工具,功能是啓動一個*.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); //發送回車執行代碼
}