抓vb程式中的TEXTBOX元件的HANDLE抓不到 |
尚未結案
|
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
請問我這樣寫的話TEXTBOX元件的HANDLE抓不到,應該是TextBox的classname
有問題,但是我沒有SPY++...誰可以幫我一下忙
void __fastcall TForm1::BitBtn1Click(TObject *Sender) { HWND hWnd = FindWindow(NULL,"分光儀"); if (hWnd) { EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProc,0); //開始找 AnsiString url="10"; SendMessage(hEditControl,WM_SETTEXT,0,(LPARAM)(LPCTSTR)url.c_str()); PostMessage(hEditControl, WM_KEYDOWN,VK_TAB ,1); } else ShowMessage("ddddd"); } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) // function main body { char classname[128]; ZeroMemory(classname,128); GetClassName(hwnd,classname,128); if (AnsiString(classname)=="TextBox") { hEditControl=hwnd; return false; } else return true; } |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 請問我這樣寫的話TEXTBOX元件的HANDLE抓不到,應該是TextBox的classname 有問題,但是我沒有SPY ...誰可以幫我一下忙iii0628你好: > > >.... 發表人 -void __fastcall TForm1::BitBtn1Click(TObject *Sender) { HWND hWnd = FindWindow(NULL,"分光儀"); if (hWnd) { EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProc,0); //開始找 AnsiString url="10"; SendMessage(hEditControl,WM_SETTEXT,0,(LPARAM)(LPCTSTR)url.c_str()); PostMessage(hEditControl, WM_KEYDOWN,VK_TAB ,1); } else ShowMessage("ddddd"); } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) // function main body { char classname[128]; ZeroMemory(classname,128); GetClassName(hwnd,classname,128); if (AnsiString(classname)=="TextBox") { hEditControl=hwnd; return false; } else return true; } |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: m8815010你好:我剛剛試了一下也是不行,我上傳一下抓到圖請你幫我看看。照圖上的CLASSNAME 做也是找不到勒.... 引言: m8815010你好:我剛剛試了一下也是不行,我上傳一下抓到圖請你幫我看看。照圖上的CLASSNAME 做也是找不到勒...iii0628你好< >: 不好意思,發現前篇回覆是不對的,我也是看了你的回覆才發現的< >!! 就是在VB中,如果你直接在IDE介面下寫完程式然後按 F5 執行的話,那以spy查看執行起來的程式其中的TextBox元件它的classname會是 ThunderTextBox 但如果你先把程式做成一個執行檔,然後再執行它的話,那麼用spy看到的TextBox元件的classname就會是 ThunderRT6TextBox ! 嗯,我昨天用的是法一查看,你應該是用法二查看,所以我們兩者看的結果不同!VB是如此的表現方式,值得注意! 回歸主題,剛才特地又做了一個> > class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { HWND thwnd=FindWindow(NULL,"VBTestForm"); if (thwnd) EnumChildWindows(thwnd,(WNDENUMPROC)EnumChildProc,0); } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) { char classname[256]; ZeroMemory(classname,256); GetClassName(hwnd,classname,256); //ShowMessage(classname); if (AnsiString(classname)=="ThunderRT6TextBox") ShowMessage("Find one..."); return true; } 老話一句,還攔不到的話,就把每個子物件的class name都印出來看看,就可以知道發生什麼問題了,如上面程式中紅色那行! 另外你說是沒攔到是真的沒攔到呢!? 還是有攔到但後面的postmessage沒送達而讓你以為沒攔到呢!? 這你可能要先確認清楚了! |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
m8815010你好:我用你提供的程式抓classname來看,但是都沒有出現任何訊息勒???好奇怪,可以再幫我看看嗎???謝謝
TForm1 *Form1; BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn1Click(TObject *Sender) { HWND thwnd=FindWindow(NULL,"分光儀"); if (thwnd) EnumChildWindows(thwnd,(WNDENUMPROC)EnumChildProc,0); } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam) { char classname[256]; ZeroMemory(classname,256); GetClassName(hwnd,classname,256); ShowMessage(classname); if (AnsiString(classname)=="ThunderRT6TextBox") ShowMessage("Find one..."); return true; } 我上傳的圖檔中TextBox元件是出現GROUP BOX元件裡,還是要再從ThunderRT6Frame裡去找ThunderRT6TextBox???這是我目前的想法 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |