最近在論壇上看到一個文章,讀取輸入框中的內容,我也正在做這方面東西,於是就動手做了一下,原本以為很簡單的東西,實際著手去做的時候倒是遇到了不小的麻煩。
首先想要獲得一個未知的對話方塊的EDIT控制項的內容無非就是幾個步驟:
1,獲得所要獲得內容的控制代碼
2,獲得控制項控制代碼
3,獲得控制項內容
第一步沒什麼好說的關鍵在於第二步和第三步,我上網查了好多資料,可就是不能得到重要的結果,網上還有好多朋友和我有一樣的困惑,如何獲得一個控制項的控制代碼?網上的很多朋友說控制項是視窗的子視窗,可以枚舉所有視窗的子視窗,但可以想象不光是枚舉比較麻煩,枚舉出來之後判斷是否是你要找的控制項的控制代碼也是相當麻煩,你需要一個一個去測試。我們就是想得到一個EDIT控制項的控制代碼有這麼麻煩嗎?或者說有沒有現成的工具?當然有!spy++
看到沒有Control ID 0000044F,說明控制項的ID就是0000044F,但是注意這個十六進位的數,程式中應該這樣寫0x0000044F,控制項的ID一般是不會變化的,那麼獲得控制項的控制代碼也就是輕而易舉事h1=GetDlgItem(h,0x0000450) ;一個函數就搞定,(h是這個視窗的控制代碼)。
有了EDIT控制項控制代碼如何擷取裡面的內容呢?這又是個麻煩的事,於是我又上網看了好多資料,有人說用GetWindowText,可是我試了好多次發現GetWindowText調用總是失敗返回的錯誤碼是126。這是怎麼回事呢?於是上MSDN上查了一下,MSDN上是這麼說的GetWindowText:To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.大概意思就是取edit control的文字發訊息WM_GETTEXT,而不用GetWindowText。這下知道了吧,你要想得到一個按鈕的文本GetWindowText是可以得到的,但是你想要得到一個EDIT控制項的文本,就不能用這個辦法了,那我們就SendMessage吧,是不是有點神奇?要取他的訊息,就要給他發訊息。
最終的程式如下:
#include "windows.h"#include "stdio.h"void main(){int k=0;char temp[255]={0};HWND h=NULL,h1=NULL,h2=NULL;h=::FindWindow(NULL,"串連 校園網"); h1=GetDlgItem(h,0x0000450) ;if(h1==NULL)printf("GetDlgItem fail!");SendMessage(h1,WM_GETTEXT,255,(LPARAM)temp);printf("%s\n",temp);h2=GetDlgItem(h,0x000044F) ; if(h2==NULL)printf("GetDlgItem fail again!");SendMessage(h2,WM_GETTEXT,255,(LPARAM)temp);printf("%s\n",temp);}
最終效果如下:
做最後的申明:菜鳥言論僅供娛樂。