2013-12-07 5 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 문서 :

다른 프로세스에서 컨트롤의 텍스트를 검색하려면, et Wi ndow Te xt는 전화로 직접 대신 WM_GETTEXT 메시지를 보냅니다.

예 :

HWND hWndEdit; 

[....] 

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

그건 내 질문에 대한 대답이 아니야. – Psychoman

+0

무슨 질문입니까? 윈도우의 텍스트를 얻으려면 GetWindowText를 사용합니다. 당신은 우리가 당신의 마음 속에 읽을 것을 기대할 수 없습니다. 뭐가 문제 야? – manuell

+0

이것은 테스트 코드입니다. 모든 것을 다 감쌌다면 크게 바뀔 것입니다.하지만 질문은 여전히 ​​남아 있습니다. 나는 자식 창이 편집 컨트롤 인 테스트 프로그램을 가지고 있습니다. 위에서 작성한 프로그램에서 테스트 프로그램에 작성된 텍스트를 동적으로 가져 오려고합니다. – Psychoman

관련 문제