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

抓vb程式中的TEXTBOX元件的HANDLE抓不到

尚未結案
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-27 15:51:33 IP:220.130.xxx.xxx 未訂閱
請問我這樣寫的話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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-27 22:43:16 IP:203.73.xxx.xxx 未訂閱
引言: 請問我這樣寫的話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;
}
iii0628你好: > > >.... 發表人 -
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-28 10:04:03 IP:220.130.xxx.xxx 未訂閱
m8815010你好:我剛剛試了一下也是不行,我上傳一下抓到圖請你幫我看看。照圖上的CLASSNAME 做也是找不到勒....
m8815010
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-28 18:11:30 IP:61.63.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-03 14:18:59 IP:220.130.xxx.xxx 未訂閱
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???這是我目前的想法
系統時間:2024-05-03 17:24:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!