2013-12-07 185 views
-1

我试图从其他窗口动态获取文本(如果我在该窗口的文本字段中写入内容,然后启动我的程序,我必须看看我写了什么)。所以,如果我使用getWindowText ,它给了我一个静态的初始化文本框。所以这就是问题所在。它与间谍++相似。 下面的代码示例中,我做了什么:从文本框动态获取文本

#include <Windows.h> 
#include <vector> 
#include <iostream> 
#include <string> 
#include <conio.h> 
using namespace std; 

int main() 
{ 
HWND hWnd; 
MSG msg; 
vector<HWND> a; 
hWnd = FindWindow(NULL, "SomeList"); 
vector<string> phrases; 
char p[100]; 
if(!hWnd) 
{ 
    cout << "Window hasn't been found " << endl; 
    _getch(); 
    exit(1); 
} 

hWnd = GetWindow(hWnd, GW_CHILD); 
while (hWnd !=0) 
{ 
    hWnd = GetWindow(hWnd, GW_HWNDNEXT); 
    GetClassName(hWnd, p, 10); 
    string k(p); 
    if(k == "Edit") 
     a.push_back(hWnd); 
    GetWindowText(hWnd,p,100); 
     cout << p << endl; 
} 
phrases.resize(a.size()); 

for(auto i = a.begin();i != a.end();i++) 
{ 
    int index = 0; 
    GetWindowText(*i,p, 10); 
    string n(p); 
    if(n.size() != 0) 
    { 
     phrases[index] = n; 
     index++; 
    } 
} 
_getch(); 
return 0; 
} 
+0

有什么实际问题? –

+0

当我启动我的程序时,它不会读取我在文本框中写入的文本,它会读取已静态初始化的文本。我需要从文本框中读取文本,这些文本不是由SetWindowText初始化的,而是从我在窗口中写入的内容中获得的 – Psychoman

+1

您正在为窗口的第一个子项瞄准编辑控件吗?如果是这样,你会直接跳过它。 –

回答

1

GetWindowText文档:

要检索另一个进程中的控件的文本,发送 WM_GETTEXT消息,而不是直接调用GetWindowText函数的。

例子:

HWND hWndEdit; 

[....] 

char szText[ 128 ] = { 0 }; 
int cbCopied = SendMessage(hWndEdit, WM_GETTEXT, (WPARAM)sizeof(szText), 
          (LPARAM)szText); 
+0

这不是我的问题的答案。 – Psychoman

+0

有什么问题吗?要获取窗口的文本,需要使用GetWindowText。你不能指望我们阅读你的想法。有什么问题? – manuell

+0

这是一个测试代码,当我将它全部包装起来时它会发生很大的变化,但问题仍然存在。我有测试程序,其中子窗口是编辑控件。从上面编写的程序中,我想要动态获取写入测试程序的文本。 – Psychoman