Question

Not sure why SendMessage isn't getting the text from the class I need. I have done this before but it was is VisualBasic and I wanted to port it over to c++. I have not tried this code on any other program. I was reading something about it possibly being unicode but I wasn't sure on how to implement that.

#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;
}

The highlighted class is what has the text: mIRC

The program find the class with no problem and does not report not finding it so I don't see a reason why it should not find it. Any help is great!

Was it helpful?

Solution

As you can see on your spy++ output, highlighted control does not contain any text. It should appear on the left of Static in "".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top