Re: [問題] 有辦法做到將字串輸入到其他程式嗎?

看板C_Sharp (C#)作者 (躂躂..)時間18年前 (2007/05/26 16:45), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/9 (看更多)
※ 引述《LCDbest (怒!恨!殺!吼吼吼~~)》之銘言: : 請問各位前輩們.... : 想請問一下. : 有辦法寫一個程式 此程式內容為 "將此程式輸入的字串 輸入到記事本" : 例如: 這個程式有一個TextBox 和一個Button,在TextBox輸入的字串 : 按下Button後,可以將在TextBox裡面的字串,直接輸出至記事本的 : 編輯框裡. : ( 不是輸出成一個txt喔,而是輸出至記事本的編輯框裡 <--假設只開一個記事本 ) : 有辦法做到嗎@@??.... : 謝謝 .NET 本身無法這樣做, 這要用 p/invoke呼叫windows api來做WM_CHAR訊息 (模擬按鍵盤輸入) 以notepad為例, 1. 先用 Visual Studio附的 Spy++工具去看notepad編輯框的資訊 會發現他們是 class: "Notepad" Window: "Untitled - Notepad" └ class: "Edit" Window: "" 要知道這個資訊是因為要取得編輯框的window handle並送訊息過去 2. 用FindWindow與FindWindowEx來取得編輯框的window handle (該怎麼在C#宣告使用windows api, 請到 http://www.pinvoke.net/ 去查) IntPtr npWnd = FindWindow("Notepad", null); IntPtr editWnd = FindWindowEx(npWnd, IntPtr.Zero, "Edit", IntPtr.Zero); 黃色部份是用Spy++看來的class名稱, 因為他們編輯框是隸屬於Notepad下面, 所以第二次要用 FindWindowEx .. 3. 接著用 SendMessage 以 WM_CHAR 的方式, 把字元一個一個送過去.. for(int i=0; i<textBox1.Text.Length; i++) SendMessage( editWnd, // 用FindWindow找出的window handle 0x0102, // 這個值代表 WM_CHAR 訊息 TextBox1.Text[i], // 要被送過去的字元 0 ); 完整程式如下.. [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("User32.dll", CharSet = CharSet.Auto)] static extern uint SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); private void button1_Click_1(object sender, EventArgs e) { IntPtr npWnd = FindWindow("Notepad", null); IntPtr editWnd = FindWindowEx(npWnd, IntPtr.Zero, "Edit", IntPtr.Zero); for(int i=0;i<textBox1.Text.Length;i++) Win32.User32.User32API.SendMessage( editWnd, 0x0102, (in)textBox1.Text[i], 0); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.143.230

05/26 20:33, , 1F
大大你太利害了XDD 小弟拜讀一下~@@~
05/26 20:33, 1F

05/29 00:55, , 2F
一個完整的 win32 <-> .NET 範例,值得推薦!
05/29 00:55, 2F
文章代碼(AID): #16L_ETrB (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #16L_ETrB (C_Sharp)