C++ 一個程序獲取另一個程序Edit控件的內容


//一個程序獲取另一個程序Edit控件的內容

//根據指定程序的標題名獲取改程序窗口的句柄
HWND hWnd=::FindWindow(NULL,"zhang001");
if(hWnd)
{
MessageBox("get windows");
//根據窗口句柄獲取EDIT控件的ID,但是這個ID是通過VS工具spy++獲取的
HWND h = ::GetDlgItem(hWnd,0x3E9);
if (h!=NULL)
{
CString str0;
//要知道SendMessage用法,特別是第三個參數
//根據EDIT控件的ID獲取控件內容,存放到str0中
::SendMessage(h,WM_GETTEXT,20,(LPARAM)(LPCTSTR)str0);
//將獲得的內容放到本程序指定的EDIT控件中進行顯示
GetDlgItem(IDC_EDIT1)->SetWindowText(str0);
MessageBox(str0);
}
}
else
{
MessageBox("fail!");
}
 
運行結果如下:
2014年07月08日 - 月圓花青 - 玉佩
2014年07月08日 - 月圓花青 - 玉佩
采用以上程序由於采用CString,獲取的內容大小不定,當制定的緩存和制定的大小不一樣時就會產生一下的錯誤
2014年07月08日 - 月圓花青 - 玉佩
整個程序改為一下代碼,就好了:
 
//一個程序獲取另一個程序Edit控件的內容

 //根據指定程序的標題名獲取改程序窗口的句柄

 CString str;

 GetDlgItemText(IDC_TITLE,str);

 HWND hWnd=::FindWindow(NULL,str);//"zhang001"

 if(hWnd)

 {

 MessageBox("get windows");

 //根據窗口句柄獲取EDIT控件的ID,但是這個ID是通過VS工具spy++獲取的

 HWND h = ::GetDlgItem(hWnd,0x3E9);

 if (h!=NULL)

 {

 //CString str0;

 char temp[50];

 //要知道SendMessage用法,特別是第三個參數

 //根據EDIT控件的ID獲取控件內容,存放到str0中

 ::SendMessage(h,WM_GETTEXT,sizeof(temp)/sizeof(char),(LPARAM)temp);//第三個和第四個參數是緩存大小和緩存指針

 //將獲得的內容放到本程序指定的EDIT控件中進行顯示

 GetDlgItem(IDC_EDIT1)->SetWindowText(temp);

 //MessageBox(str0);

 }

 }

 else

 {

 MessageBox("fail!");

 }

 注:要想獲取某控件的位置 可以使用下面的方法

GetDlgItem(控件ID)->GetWindowRect(&rect);//獲取控件基於全頻的位置
 ScreenToClient(rect);//轉換為對話框上的相對位置

 如何獲取控件的ID

 

MFC::
CWnd *pWnd = GetFocus(); 
if(pWnd == NULL)
;//no focus
else
UINT nID = pWnd->GetDlgCtrlID();

SDK:
HWND hWnd = ::GetFocus();
if(hWnd == NULL)
;//no focus 
else
UINT nID = ::GetDlgCtrlID(hWnd);

GetFocus: The return value is the handle to the window with the keyboard focus. 
If the calling thread's message queue does not have an associated window with the keyboard focus, the return value is NULL.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM