Foro de elhacker.net

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
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <Windows.h>
  4.  
  5. using namespace std;
  6.  
  7. int _tmain(int argc, _TCHAR* argv[]) {
  8. TCHAR title[500];
  9. ZeroMemory(title, sizeof(title));
  10. HWND wnd = GetForegroundWindow();
  11.  
  12. while (true) {
  13. HWND current = GetForegroundWindow();
  14. if (current!=wnd) {
  15. wnd = current;
  16. GetWindowText(wnd, title, 400);
  17. cout << "Text: " << title << endl;
  18. }
  19. Sleep(50);
  20. }
  21. return 0;
  22. }
  23.  
  24.  

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
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <Windows.h>
  4.  
  5. using namespace std;
  6.  
  7. int _tmain(int argc, _TCHAR* argv[]) {
  8. char title[128];
  9. ZeroMemory(title, sizeof(title));
  10. HWND wnd = GetForegroundWindow();
  11.  
  12. while (true) {
  13. HWND current = GetForegroundWindow();
  14. if (current!=wnd) {
  15. wnd = current;
  16. GetWindowTextA(wnd, (LPSTR)title, 128);
  17. cout << "Text: " << title << endl;
  18. }
  19. Sleep(50);
  20. }
  21.  
  22. int ans;
  23. cin >> ans;
  24. return 0;
  25. }

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!