線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1761
推到 Plurk!
推到 Facebook!

keybd_event 的小問題

尚未結案
ccobj
一般會員


發表:6
回覆:27
積分:21
註冊:2003-12-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-14 04:04:27 IP:220.142.xxx.xxx 未訂閱
各位前輩 我在討論區內找到一些keybd_event的文章 並依樣畫葫蘆的寫了下面這段程式 工作是將字串a模擬按鍵到切換的視窗 不過為何記事本接收到的按鍵會是 a11 呢 似乎會變成 A->a B->b a->1 b->2 要如何解決呢 先說聲謝謝... AnsiString a="Aa1"; HWND hWnd = FindWindow(NULL,"未命名 - 記事本"); if (hWnd) { ShowWindow(hWnd,SW_SHOWNORMAL); SetForegroundWindow(hWnd); SetActiveWindow(hWnd); for( int x = 1; x <= a.Length(); x ) { keybd_event(a[x], MapVirtualKey(a[x],0), 0, 0); keybd_event(a[x], MapVirtualKey(a[x],0), KEYEVENTF_KEYUP, 0); Sleep(10); } keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); }else{ ShowMessage("未開啟"); }
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-15 00:18:40 IP:211.74.xxx.xxx 未訂閱
引言: 各位前輩 我在討論區內找到一些keybd_event的文章 並依樣畫葫蘆的寫了下面這段程式 工作是將字串a模擬按鍵到切換的視窗 不過為何記事本接收到的按鍵會是 a11 呢 似乎會變成 A->a B->b a->1 b->2 要如何解決呢 先說聲謝謝... AnsiString a="Aa1"; HWND hWnd = FindWindow(NULL,"未命名 - 記事本"); if (hWnd) { ShowWindow(hWnd,SW_SHOWNORMAL); SetForegroundWindow(hWnd); SetActiveWindow(hWnd); for( int x = 1; x <= a.Length(); x ) { keybd_event(a[x], MapVirtualKey(a[x],0), 0, 0); keybd_event(a[x], MapVirtualKey(a[x],0), KEYEVENTF_KEYUP, 0); Sleep(10); } keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); }else{ ShowMessage("未開啟"); }
ccobj你好: 之前研究過的,結論就是這個 class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString a="A1a"; char c; HWND hWnd = FindWindow(NULL,"未命名 - 記事本"); if (hWnd) { ShowWindow(hWnd,SW_SHOWNORMAL); SetForegroundWindow(hWnd); SetActiveWindow(hWnd); for (int i=1;i<=a.Length();i ) { c=a[i]; if (c>=65 && c<=90) { keybd_event(VK_SHIFT,0,0,0); keybd_event(c,0,0,0); keybd_event(c,0,KEYEVENTF_KEYUP,0); keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); } else if (c>=97 && c<=122) { c-=32; keybd_event(c,0,0,0); keybd_event(c,0,KEYEVENTF_KEYUP,0); } else { keybd_event(c,0,0,0); keybd_event(c,0,KEYEVENTF_KEYUP,0); } } keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } else { ShowMessage("未開啟"); } } 嗯,大概是這樣,之前研究的,但沒研究什麼亂是亂成你那樣的結果!
ccobj
一般會員


發表:6
回覆:27
積分:21
註冊:2003-12-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-15 19:04:38 IP:220.142.xxx.xxx 未訂閱
謝謝m8815010的建議 我已經將程式改好了 不過我最主要的功能是要能夠輸入一排網址 網址用到的字元 不外乎 : / @ ? = & - _ 這樣寫下來 幾乎有一半的程式碼都在判斷這些特殊符號 不知是否有更完美的解決方案
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-15 21:09:59 IP:59.104.xxx.xxx 未訂閱
引言: 謝謝m8815010的建議 我已經將程式改好了 不過我最主要的功能是要能夠輸入一排網址 網址用到的字元 不外乎 : / @ ? = & - _ 這樣寫下來 幾乎有一半的程式碼都在判斷這些特殊符號 不知是否有更完美的解決方案
ccobj你好: 當然有比較好的方式,這類的討論文章站上相當的豊富,你可以自行 class="code"> ~~ TForm1 *Form1; BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam); //找出NotePad裏面的那個Edit元件的handle值的function HWND hEditControl; 那個Edit元件的handle值 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hWnd = FindWindow(NULL,"未命名 - 記事本"); if (hWnd) { EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProc,0); //開始找 AnsiString url="http:\\www.cpbl.com.tw"; //方法一,一個字元一個字元將url字串送給那Edit //for (int i=1;i<=url.Length();i ) // SendMessage(hEditControl,WM_CHAR,url[i],0); //方法二,直接把整個url字串設成Edit元件的Text值(也就是覆蓋) //SendMessage(hEditControl,WM_SETTEXT,0,(LPARAM)(LPCTSTR)url.c_str()); //方法三,直接把整個url字串加在Edit元件原來的Text值後面(不覆蓋) char buf[2048]; ZeroMemory(buf,2048); SendMessage(hEditControl,WM_GETTEXT,2048,(LPARAM)buf); AnsiString str=AnsiString(buf) url; SendMessage(hEditControl,WM_SETTEXT,0,(LPARAM)(LPCTSTR)str.c_str()); } } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) // function main body { char classname[128]; ZeroMemory(classname,128); GetClassName(hwnd,classname,128); if (AnsiString(classname)=="Edit") { hEditControl=hwnd; return false; } else return true; }
系統時間:2024-05-05 23:00:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!