全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2166
推到 Plurk!
推到 Facebook!

keybd_event如何送出中文字?

尚未結案
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-29 21:58:16 IP:140.113.xxx.xxx 未訂閱
各位好,我寫了一支小程式, 有一個 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-30 12:19:30 IP:61.63.xxx.xxx 未訂閱
引言: 各位好,我寫了一支小程式, 有一個 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 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
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...)的方式比較簡單、可靠! 討論內容有點模糊,所以我也說的模糊,小小淺淺,視需要再補充程式碼吧!
orson
中階會員


發表:5
回覆:135
積分:58
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-31 11:45:07 IP:211.74.xxx.xxx 未訂閱
引言: 各位好,我寫了一支小程式, 有一個 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 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
1. 因為showwindow 2. 請用IMM API 3. 有人回答了,不過這樣不一定會找到你要的視窗 Orson
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-31 12:13:50 IP:140.113.xxx.xxx 未訂閱
引言: 另外模擬鍵盤風險頗高,如果只是要送出一些字串的話,應可考慮用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-31 12:17:51 IP:140.113.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-01 11:37:52 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 2. 請用IMM API Orson
謝問Orson兄, IMM API 是什麼東西呢? 小弟還是第一次聽到哩 ^^a -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
就是模擬輸入法的運作方式 要查MSDN的話,可以用IME查。 你如果用SendMessage的話,要正確的找到目前游標所在的子視窗,也可以參閱findWindow 的相關說明。 Orson
系統時間:2024-04-29 5:01:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!