keybd_event如何送出中文字? |
尚未結案
|
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
各位好,我寫了一支小程式,
有一個 ListBox,裡頭有一些中英數參雜的字串。
我要做的事就是把選取到的字串送到上一個視窗裡。
以下是我的程式碼:
void __fastcall TForm1::ListBox1Click(TObject *Sender) { AnsiString s = ListBox1->Items->Strings[ListBox1->ItemIndex]; HWND HWnd = Handle; do { if(!(HWnd=GetWindow(HWnd, GW_HWNDNEXT))) break; } while(!(GetWindowLong(HWnd,GWL_STYLE) & WS_BORDER) || !IsWindowVisible(HWnd)); ShowWindow(HWnd, SW_SHOW); BringWindowToTop(HWnd); for( int x = 1; x <= s.Length(); x ) { keybd_event(s[x],0,0,0); keybd_event(s[x],0,KEYEVENTF_KEYUP,0); } }我的問題如下: 1.大部分的時候送到目的視窗時,該視窗都會變小,有可能是什麼原因呢? (視窗右上角不都有 縮到最小, 放大/縮小, 關閉視窗 三個按鈕嗎? 像是按了第二個的效果) 2.當字串有中文在裡頭時就不能正常送出,要如何解決呢 ? 3.請問綠色的那兩行程式碼是什麼意思呢? -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 各位好,我寫了一支小程式, 有一個 ListBox,裡頭有一些中英數參雜的字串。 我要做的事就是把選取到的字串送到上一個視窗裡。 以下是我的程式碼:chtai你好: 你的綠色那兩行程式碼的意思大概是:首先先用 >! 不太明白你字串要送到上一個視窗是什麼樣的視窗?但我想綠色那兩行應該是不可能抓到正確的>> 問題應該還不會發生吧?因為綠色那兩行抓到的> href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53820">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53820 硬要用keybd_event方式去送中文也行,就是先將視窗的輸入法切為中文輸入法,然後就可以用keybd_event去模擬輸入了! 另外模擬鍵盤風險頗高,如果只是要送出一些字串的話,應可考慮用SendMessage(Hwnd,WM_SETTEXT...)或SendMessage(Hwnd,WM_CHAR...)的方式比較簡單、可靠! 討論內容有點模糊,所以我也說的模糊,小小淺淺,視需要再補充程式碼吧!void __fastcall TForm1::ListBox1Click(TObject *Sender) { AnsiString s = ListBox1->Items->Strings[ListBox1->ItemIndex]; HWND HWnd = Handle; do { if(!(HWnd=GetWindow(HWnd, GW_HWNDNEXT))) break; } while(!(GetWindowLong(HWnd,GWL_STYLE) & WS_BORDER) || !IsWindowVisible(HWnd)); ShowWindow(HWnd, SW_SHOW); BringWindowToTop(HWnd); for( int x = 1; x <= s.Length(); x ) { keybd_event(s[x],0,0,0); keybd_event(s[x],0,KEYEVENTF_KEYUP,0); } }我的問題如下: 1.大部分的時候送到目的視窗時,該視窗都會變小,有可能是什麼原因呢? (視窗右上角不都有 縮到最小, 放大/縮小, 關閉視窗 三個按鈕嗎? 像是按了第二個的效果) 2.當字串有中文在裡頭時就不能正常送出,要如何解決呢 ? 3.請問綠色的那兩行程式碼是什麼意思呢? -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :) |
orson
中階會員 發表:5 回覆:135 積分:58 註冊:2002-07-11 發送簡訊給我 |
引言: 各位好,我寫了一支小程式, 有一個 ListBox,裡頭有一些中英數參雜的字串。 我要做的事就是把選取到的字串送到上一個視窗裡。 以下是我的程式碼:1. 因為showwindow 2. 請用IMM API 3. 有人回答了,不過這樣不一定會找到你要的視窗 Orsonvoid __fastcall TForm1::ListBox1Click(TObject *Sender) { AnsiString s = ListBox1->Items->Strings[ListBox1->ItemIndex]; HWND HWnd = Handle; do { if(!(HWnd=GetWindow(HWnd, GW_HWNDNEXT))) break; } while(!(GetWindowLong(HWnd,GWL_STYLE) & WS_BORDER) || !IsWindowVisible(HWnd)); ShowWindow(HWnd, SW_SHOW); BringWindowToTop(HWnd); for( int x = 1; x <= s.Length(); x ) { keybd_event(s[x],0,0,0); keybd_event(s[x],0,KEYEVENTF_KEYUP,0); } }我的問題如下: 1.大部分的時候送到目的視窗時,該視窗都會變小,有可能是什麼原因呢? (視窗右上角不都有 縮到最小, 放大/縮小, 關閉視窗 三個按鈕嗎? 像是按了第二個的效果) 2.當字串有中文在裡頭時就不能正常送出,要如何解決呢 ? 3.請問綠色的那兩行程式碼是什麼意思呢? -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :) |
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
引言: 另外模擬鍵盤風險頗高,如果只是要送出一些字串的話,應可考慮用SendMessage(Hwnd,WM_SETTEXT...)或SendMessage(Hwnd,WM_CHAR...)的方式比較簡單、可靠!謝謝m8815010兄, 我原本也想過用 SendMessage,可是後來我試的結果發現 我把它送到 Notepad 去,卻是 Notepad 的 Caption 變了, 而不是我想要的 "寫入一個字串到文件裡頭"。 我猜測的原因是,我得到的是 Notepad 的 Handle 而不是輸入文字區域的 Handle。 如果真如我猜的一般,那我要怎樣得到輸入文字區域的 Handle 呢? (應該也就是游標,不是滑鼠鼠標喔,所在區域的 Handle 吧?) 若不是的話,那這問題又要怎麼解呢? (我看過有解法是先把字串CopyToClipboard,再用keybd_event送出Ctrl V, 可是不是每個程式都是用Ctrl V 做為貼上的熱鍵阿) -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
引言: 2. 請用IMM API Orson謝問Orson兄, IMM API 是什麼東西呢? 小弟還是第一次聽到哩 ^^a -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
orson
中階會員 發表:5 回覆:135 積分:58 註冊:2002-07-11 發送簡訊給我 |
引言:就是模擬輸入法的運作方式 要查MSDN的話,可以用IME查。 你如果用SendMessage的話,要正確的找到目前游標所在的子視窗,也可以參閱findWindow 的相關說明。 Orson引言: 2. 請用IMM API Orson謝問Orson兄, IMM API 是什麼東西呢? 小弟還是第一次聽到哩 ^^a -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |