[?] HWND a String (Otra Cosita)

Iniciado por MeCraniDOS, 26 Julio 2013, 21:07 PM

0 Miembros y 1 Visitante están viendo este tema.

MeCraniDOS

Cita de: aguml en 27 Julio 2013, 19:01 PM
al ejecutarse no sabe cuanto ocupará el array y sqbrá dios que te está reservando.

Yo tampoco lo veo tan claro, pero supongo que al poner esto:

Código (cpp) [Seleccionar]

int nCharacters = GetWindowTextLength(activa); //Calculamos el numero de caracteres del nombre de la ventana activa

char Nombre_Array[nCharacters]; //Creamos un Array con el numero de caracteres calculado anteriormente


Lo que hace es calcular la longitud del nombre de la ventana activa, y si vale 5, el array se crea reservando 5  :-\ :-\

Lo compilo con CodeBlocks y MinGW, como lo puedo hacer standard?  :-\
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Eternal Idol

Código (c++) [Seleccionar]
wchar_t *Nombre_Array = new wchar_t[nCharacters + 1];
//usar
delete[] Nombre_Array;
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MeCraniDOS

#12
Quedaría así?

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
#include <iostream>

using namespace std;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
   HWND activa; //Ventana Activa
   HWND nonactive = NULL; //Ventana a modificar

   string Nombre_Ventana;

   activa = GetForegroundWindow(); //Obtenemos el nombre de la ventana activa

   int nCharacters = GetWindowTextLength(activa); //Calculamos el numero de caracteres del nombre de la ventana activa

   while(1) //Bucle Infinito
       {

           nCharacters = GetWindowTextLength(activa); //Calculamos el numero de caracteres del nombre de la ventana activa

           wchar_t *Nombre_Array = new wchar_t[nCharacters + 1]; //Creamos un Array con el numero de caracteres calculado anteriormente


           GetWindowText(activa, Nombre_Array, nCharacters + 1); //Obtenemos el nombre de la ventana activa y lo almacenamos en el array anterior

           Nombre_Ventana = "";

           Nombre_Ventana = Nombre_Array; // Nombre_Ventana pasa a tener lo que tenia Nombre_Array

           Nombre_Ventana += " - Adios"; //Añadimos una cadena a la ventana activa

           if(activa != nonactive) //Bucle: Si la ventana activa es diferente de la ventana a modificar...
           {
               SetWindowText(activa, Nombre_Ventana.c_str()); //Cambiamos el nombre de la ventana activa

               nonactive = activa; //La ventana a modificar es ahora la ventana activa
           }

           activa = GetForegroundWindow(); //Vovemos a obtener el nombre de la ventana activa

           delete[] Nombre_Array;

           Sleep(1000); //Esperamos...

       }

       return 0;
}


ERRORES

|24|error: cannot convert 'wchar_t*' to 'LPSTR {aka char*}' for argument '2' to 'int GetWindowTextA(HWND, LPSTR, int)'|

|28|error: invalid conversion from 'wchar_t*' to 'char' [-fpermissive]|

*codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\basic_string.h|562|error:   initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]' [-fpermissive]|
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Eternal Idol

Usa char en lugar de wchar_t ya que no estas en Unicode.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MeCraniDOS

#14
Cita de: Eternal Idol en 28 Julio 2013, 15:09 PM
Usa char en lugar de wchar_t ya que no estas en Unicode.
Solucionado, si no hay ningún otro fallo donde la haya cagado..  :silbar: :silbar:

Saludos


EDITO

Lo que quiero implementar ahora es una comprobacion de la ventana activa, es decir, si la ventana no es, por ejemplo, "Hola", que no añada el "- Adios" al final...

Tengo esto:


Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
    HWND activa; //Ventana Activa
    HWND nonactive = NULL; //Ventana a modificar

    string Nombre_Ventana;

    activa = GetForegroundWindow(); //Obtenemos el nombre de la ventana activa

    int nCharacters = GetWindowTextLength(activa); //Calculamos el numero de caracteres del nombre de la ventana activa

    while(1) //Bucle Infinito
        {

            nCharacters = GetWindowTextLength(activa); //Calculamos el numero de caracteres del nombre de la ventana activa

            char *Nombre_Array = new char[nCharacters + 1]; //Creamos un Array con el numero de caracteres calculado anteriormente


            GetWindowText(activa, Nombre_Array, nCharacters + 1); //Obtenemos el nombre de la ventana activa y lo almacenamos en el array anterior

            Nombre_Ventana = "";

            if (Nombre_Array = "Hola")
            {

                Nombre_Ventana = Nombre_Array; // Nombre_Ventana pasa a tener lo que tenia Nombre_Array

                printf("Cambiado Correctamente!");

                Nombre_Ventana += " - Adios!"; //Añadimos una cadena a la ventana activa

                if(activa != nonactive) //Bucle: Si la ventana activa es diferente de la ventana a modificar...
                {
                    SetWindowText(activa, Nombre_Ventana.c_str()); //Cambiamos el nombre de la ventana activa

                    nonactive = activa; //La ventana a modificar es ahora la ventana activa
                }

                activa = GetForegroundWindow(); //Vovemos a obtener el nombre de la ventana activa

                delete[] Nombre_Array;

                Sleep(1000); //Esperamos...

            }

            else
            {
                printf("Fallo al Cambiar!");

return -1;
            }

        }

    return 0;
}
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Eternal Idol

Esto es incorrecto:
Código (c++) [Seleccionar]
if (Nombre_Array = "Hola")

Es una asignacion y no la comparacion que vos queres en realidad, tenes que depurar tus programas para ver que hacen linea por linea.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MeCraniDOS

Cita de: Eternal Idol en 29 Julio 2013, 17:05 PM
Esto es incorrecto:
Código (c++) [Seleccionar]
if (Nombre_Array = "Hola")

Es una asignacion y no la comparacion que vos queres en realidad, tenes que depurar tus programas para ver que hacen linea por linea.

Ya... cuando lo ejecuto me cambia el nombre completo de la ventana a "Hola - Adiós", pero es que no se como compararlo con la que cojo... ya me estoy liando  :huh: :huh:
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Eternal Idol

Una comparacion en C/C++ se hace con ==.

Busca informacion como esta para ir practicando por tu propia cuenta:
http://www.cplusplus.com/reference/string/string/compare/
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MeCraniDOS

Cita de: Eternal Idol en 29 Julio 2013, 18:49 PM
Una comparacion en C/C++ se hace con ==.

Vale... Otra de mis cagadas tontas por ir rápido...  :¬¬ :¬¬

Gracias  :silbar:
"La física es el sistema operativo del Universo"
     -- Steven R Garman