FindWindow與SendMessage傳送消息

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

        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章