BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);BOOL EnumChildWindows(
HWND hWndParent, // handle to parent window
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);HWND FindWindow(
LPCTSTR lpClassName, // class name
LPCTSTR lpWindowName // window name
);
HWND FindWindowEx(
HWND hwndParent, // handle to parent window
HWND hwndChildAfter, // handle to child window
LPCTSTR lpszClass, // class name
LPCTSTR lpszWindow // window name
);int GetClassName(
HWND hWnd, // handle to window
LPTSTR lpClassName, // class name
int nMaxCount // size of class name buffer
);//用来判断窗口类型,是edit还是comboboxLRESULT SendMessageTimeout(
HWND hWnd, // handle to window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam, // second message parameter
UINT fuFlags, // send options
UINT uTimeout, // time-out duration
PDWORD_PTR lpdwResult // return value for synchronous call
);//用来发送下面两个消息WM_CLOSEWM_GETTEXT
基本上就是这些了
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);BOOL EnumChildWindows(
HWND hWndParent, // handle to parent window
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);HWND FindWindow(
LPCTSTR lpClassName, // class name
LPCTSTR lpWindowName // window name
);
HWND FindWindowEx(
HWND hwndParent, // handle to parent window
HWND hwndChildAfter, // handle to child window
LPCTSTR lpszClass, // class name
LPCTSTR lpszWindow // window name
);int GetClassName(
HWND hWnd, // handle to window
LPTSTR lpClassName, // class name
int nMaxCount // size of class name buffer
);//用来判断窗口类型,是edit还是comboboxLRESULT SendMessageTimeout(
HWND hWnd, // handle to window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam, // second message parameter
UINT fuFlags, // send options
UINT uTimeout, // time-out duration
PDWORD_PTR lpdwResult // return value for synchronous call
);//用来发送下面两个消息WM_CLOSEWM_GETTEXT
基本上就是这些了
每个文本框都有一个hwnd,找到它,再GetWindowText.
(windows 把文本框也作为一个window)
可以告诉我详细的方法吗?
谢谢
我知道了这些函数,可是我不知道怎么用,麻烦你告诉我详细的方法好吗?谢谢~~~mmhhj()
可以告诉我详细方法吗?谢谢大家辛苦了
[email protected]
Email:[email protected]
http://www.vckbase.com/code/downcode.asp?id=511
http://www.vckbase.com/code/downcode.asp?id=526
[email protected] 我就是要在98下用
TEdit中的内容可以通过GetWindowText来得到,有的确无法得到。后然经过本人分析,结果是,不能通过GetWindowText的内容,可以通过Clipboard来得到。TStoringComboBox中的内容基本和CComboBox类似。BORLAND中TEdit,TStoringComboBox中的控件ID和VC中的控件ID不同,它是程序中生成的,每次启动后是不一样的,所以不能通过普通的方法来找的该控件,只好采用枚举的方法来实现。这样,就会有个问题,就是变量与控件的值不好对应,我现以做了一部分,代码如下:(在WIN2000下测试通过)CString strEMail,strOS,strSound,strVideo,strCD,strFlop,strMem,strMB,strBios,strComp;BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lParam)
{
CString str,str1,strComboList;
CTestFindSysInfoAsBorlandDlg *pdlg = (CTestFindSysInfoAsBorlandDlg *)lParam; char szText[256] = "",szClassName[256]="",szLine[256] = "";
GetWindowText(hwnd,szText,sizeof(szText)-1);
GetClassName(hwnd,szClassName,sizeof(szClassName) -1);
str = szClassName; if(str != "TStoringComboBox" && str != "TEdit")
return true;
if(str == "TStoringComboBox")
{
strComboList = "";
CComboBox *pComb = (CComboBox *)CComboBox::FromHandle(hwnd);
if(pComb != NULL)
{
long n = pComb->GetCount();
for(int i = 0;i<n;i++)
{
pComb->GetLBText(i,str);
strComboList += str;
strComboList += "\r\n";
}
MessageBox(NULL,strComboList ,"TStoringComboBox",MB_OK);
}
} if(strcmp(szClassName,"TEdit") != -1)
{
CEdit *pEdit = (CEdit *)CEdit::FromHandle(hwnd);
pEdit->SetSel(0,100);
pEdit->Copy();
pEdit->GetWindowText(str);
pdlg->OpenClipboard(); str1 = (char *)GetClipboardData(CF_TEXT);
if(str == "edEMail") strEMail = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edOS") strOS = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edSound") strSound = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edVideo") strVideo = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edCD") strCD = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edFlop") strFlop = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edMem") strMem = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edMB") strMB = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edOS") strOS = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edBios") strBios = (char *)::GetClipboardData(CF_TEXT);
else if(str == "edComp") strComp = (char *)::GetClipboardData(CF_TEXT);
else
{
if(!str1.IsEmpty())
MessageBox(NULL,str1,"TEdit",MB_OK);
} if(!str.IsEmpty())
{
MessageBox(NULL,str1,str,MB_OK);
}
EmptyClipboard();
CloseClipboard();
}
return true;
}
void CTestDlg::OnFindSysInfo()
{
OpenClipboard();
EmptyClipboard();
CloseClipboard();
CWnd *pWindow = FindWindow(NULL,"PC information for Windows 9x/NT/2000/Me (CRACKED)");
if(pWindow)
EnumChildWindows(pWindow->GetSafeHwnd(),EnumChildProc,(long)this);
}
----------------------------------------
--------------WIN2000下测试通过--------------------
#define TOTAL_TEDIT_EDIT_COUNT 19 //文本框,和复合框总共有19个
CString strList[TOTAL_TEDIT_EDIT_COUNT]; //存放结果
long nCurrentIndex; //循环变量BOOL CALLBACK EnumChildProcFirstPageContent( HWND hwnd, LPARAM lParam)
{
CString strClassName,strResult;
char szClassName[256]="",szLine[256] = "";
GetClassName(hwnd,szClassName,sizeof(szClassName) -1);
strClassName = szClassName;
//由于第一页只有文本框,和复合框,只需要TEdit,Edit就可以了
if(strClassName == "TEdit" || strClassName == "Edit")
{
//把它转化为VC++下面的CEdit的类型指针
CEdit *pEdit = (CEdit *)CEdit::FromHandle(hwnd);
pEdit->SetSel(0,255); //最多选者的内容,其中255可以修改成别的数
pEdit->Copy(); //把内容拷贝到剪贴板中 OpenClipboard(NULL); //打开剪贴板
strResult = (char *)GetClipboardData(CF_TEXT); //获取内容
strList[--nCurrentIndex] = strResult; //结果存入数组中 EmptyClipboard(); //清空剪贴板
CloseClipboard(); //关闭剪贴板
} return true;
}
void CTestFindSysInfoAsBorlandDlg::OnFindSysInfo()
{
nCurrentIndex = TOTAL_TEDIT_EDIT_COUNT;
//为了清空程序运行之前,剪贴板的内容
OpenClipboard();
EmptyClipboard();
CloseClipboard(); //找到该窗口
CWnd *pWindow = FindWindow(NULL,"PC information for Windows 9x/NT/2000/Me (CRACKED)"); if(pWindow) //枚举子窗口
{
EnumChildWindows(pWindow->GetSafeHwnd(),EnumChildProcFirstPageContent,(long)this); //需要的结果已经在strList中,
//显示结果
for(int i=0;i<17;i++)
{
::MessageBox(NULL,strList[i],"信息",MB_OK);
}
}else
::MessageBox(NULL,"该软件未运行","信息",MB_OK); }