Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: juancaa en 20 Marzo 2013, 13:10 PM

Título: Ayuda con GetWindowText
Publicado por: juancaa en 20 Marzo 2013, 13:10 PM
Buenas, estoy intentando hacer un codigo en c++ para leer el texto de la ventana maximizada pero por algun motivo el texto no se lee apropiadamente...
Aquí les dejo el codigo:

Código (c++) [Seleccionar]
#include "stdafx.h"
#include <iostream>
#include <Windows.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {
TCHAR title[500];
ZeroMemory(title, sizeof(title));
HWND wnd = GetForegroundWindow();

while (true) {
HWND current = GetForegroundWindow();
if (current!=wnd) {
wnd = current;
GetWindowText(wnd, title, 400);
cout << "Text: " << title << endl;
}
Sleep(50);
}
return 0;
}



Estoy haciendo pruebas con el Visual Studio 2012 pero al ejecutar el programa este siempre me devuelve un valor sin sentido EJ: 01AB8D9 lo cual supongo que debe ser basura... Si alguien puede explicarme que estoy haciendo mal estaria muy agradecido!!
Título: Re: Ayuda con GetWindowText
Publicado por: x64core en 20 Marzo 2013, 19:03 PM
Estas usando GetWindowText ( #ifdef UNICODE ) Al parecer version Unicode puedes cambiar a GetWindowTextA explicitamente o usar
otra funcion en lugar de cout como por ejemplo wprintf, además seria buena obtener la longitud del titulo de la ventana antes.
Título: Re: Ayuda con GetWindowText
Publicado por: juancaa en 21 Marzo 2013, 10:13 AM
Gracias x64Core!! Lo logre!! La verdad es que tengo algunos problemas con la gran vairedad de string de c++... que si ansi, unicode... A lo que iba, la solucion:

Código (c++) [Seleccionar]
#include "stdafx.h"
#include <iostream>
#include <Windows.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {
char title[128];
ZeroMemory(title, sizeof(title));
HWND wnd = GetForegroundWindow();

while (true) {
HWND current = GetForegroundWindow();
if (current!=wnd) {
wnd = current;
GetWindowTextA(wnd, (LPSTR)title, 128);
cout << "Text: " << title << endl;
}
Sleep(50);
}

int ans;
cin >> ans;
return 0;
}


Solucion: cambie TCHAR por char, utilize la llamada al metodo GetWindowTextA() como tu dijiste, en formato ansi i como parametro casteo el char a LPSTR...
Gracias por tu ayuda!