2014-01-04 1 views
1

SendMessage가 필요한 클래스에서 텍스트를 가져 오지 못하는 이유를 모릅니다. 전에이 작업을했는데 VisualBasic이 였고 C++로 이식하려고했습니다. 다른 프로그램에서이 코드를 시도하지 않았습니다. 나는 그것에 대해 유니 코드 일 가능성이있는 것을 읽고 있었지만 구현 방법에 대해서는 확실하지 않았습니다. 이 프로그램은 문제없이 클래스를 발견하고 그것을 찾을해야하는 이유는 그래서 이유가 표시되지 않습니다 발견하지보고하지 않습니다 mIRCSendMessage가 텍스트를 가져 오지 않습니다.

:

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#include <iostream> 
using namespace std; 

void FindmIRC() 
{ 
    cout << "[mIRC]" << endl; 

cout << "- find mIRC window" << endl; 
HWND hwndmIRC = FindWindow(L"mIRC", NULL); 

if (NULL != hwndmIRC) 
{ 
    cout << " + found mIRC window" << endl; 
    cout << "- find MDIClient window" << endl; 
    HWND hwndMDIClient = FindWindowEx(hwndmIRC, NULL, L"MDIClient", NULL); 

    if (NULL != hwndMDIClient) 
    { 
     cout << " + found MDIClient window" << endl; 
     cout << "- find mIRC_Channel window" << endl; 
     HWND hwndmIRC_Channel = FindWindowEx(hwndMDIClient, NULL, L"mIRC_Channel", NULL); 

     if (NULL != hwndmIRC_Channel) 
     { 
      cout << " + found mIRC_Channel window" << endl; 
      cout << "- find Static window" << endl; 
      HWND hwndStatic = FindWindowEx(hwndmIRC_Channel, NULL, L"Static", NULL); 

      if (NULL != hwndStatic) 
      { 
       cout << " + found Static window" << endl; 

       cout << "- get text length" << endl; 
       int textLen = (int)SendMessage(hwndStatic, WM_GETTEXTLENGTH, 0, 0); 
       if (0 < textLen) 
       { 
        cout << "- getting text" << endl; 
        const int bufferSize = 1024; 
        char textBuffer[bufferSize] = ""; 
        SendMessage(hwndStatic, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer); 

        cout << "[begin text]" << endl; 
        cout << textBuffer << endl; 
        cout << "[end text]" << endl; 
       } 
       else 
       { 
        cerr << "No text." << endl; 
       } 

      } 
      else 
      { 
       cerr << "Static not found." << endl; 
      } 

     } 
     else 
     { 
      cerr << "mIRC_Channel not found." << endl; 
     } 
    } 
    else 
    { 
     cerr << "MDIClient not found." << endl; 
    } 

} 
else 
{ 
    cerr << "mIRC not open." << endl; 
} 
} 
int main() 
{ 

FindmIRC(); 

return 0; 
} 

강조 표시된 클래스는 텍스트가 무엇인가 그것. 어떤 도움도 좋습니다!

+0

텍스트를 다시받지 못했거나 호출에 실패 했습니까? 'GetLastError'는 여기서 무엇을 반환합니까? – templatetypedef

+0

그냥'GetLastError'를 구현했고'GetProcessId가 eror 6으로 실패했습니다 : 핸들이 유효하지 않습니다. ' – justauser

답변

0

spy ++ 출력에서 ​​볼 수 있듯이 강조 표시된 컨트롤에는 텍스트가 없습니다. Static의 왼쪽에 ""이 나타납니다.

+0

나는 Ctrl + f를 spy ++로하고 파인더를 드래그하여 채팅 상자를 강조하고 나 정적 클래스입니다. mIRC는 다음과 같은 miltiple 창을 사용합니다. http://screenshots.en.sftcdn.net/en/scrn/3000/3202/mirc-2.jpg 차이가 있는지 확실하지 않습니다. – justauser

+0

어떤 창을 쿼리하고 싶은지 확실하지 않은 경우, 주된 도구가 간단한 방법을 사용하여 내용을 가져올 수 있을지 의심 스럽다면 고급 렌더링 방법을 사용하고있는 것입니다. – marcinj

+0

그 방법을 사용하는 경우 텍스트를 가져 오는 것은 불가능합니다. – justauser