Autor
|
Tema: Duda pasar de LPWSTR a char * (Leído 5,906 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Tema muy muy frustrante, érase un keylogger: HWND ventana; LPWSTR cadena; char ventanika[500]; while(1) { GetWindowText(ventana, cadena, 500); //metemos en ventanika lo de cadena fprintf(log, "[-] [ Ventana: %s ]", ventanika); }
He probado todo, todo. Luego como se inicializa ese demonio, ni un ejemplo. Vale si pones: LPWSTR cadena=L"***** de cadena"; Luego usas GETWINDOWTEXT y sigue teniendo ***** de cadena XD Luego me hizo gracia el visual studio hice un programa fuí a ejecutarlo en otro ordenador y me dió eror que faltaba una dll me decía MVS... .dll wtf? Edito: LOL no se puede escribir mir..a en el foro. Edito: No se trata de convertir el tema realmente sino de porque no funciona GETWINDOWTEXT y no me carga la cadena. Otra prueba más: HWND ventana; char ventanika[500]; while(1) { GetWindowText(ventana, (LPWSTR)ventanika, 500); for (int i = 0; ventanika[i] != '\0'; i++) { printf("%c", ventanika[i]); } system("pause"); }
Creo que por aquí avanzamos más pero así solo me muestra el primer caracter, debe de ser un puntero pero aun así debería de sacar todos los caracteres no? x`p xD
|
|
« Última modificación: 13 Noviembre 2014, 14:43 pm por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
MCKSys Argentina
|
Luego me hizo gracia el visual studio hice un programa fuí a ejecutarlo en otro ordenador y me dió eror que faltaba una dll me decía MVS... .dll wtf?
Puedes hacer que MSVC++ compile sin dependencias. Con eso no pedirá más el runtime... Saludos!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Luego me hizo gracia el visual studio hice un programa fuí a ejecutarlo en otro ordenador y me dió eror que faltaba una dll me decía MVS... .dll wtf?
Una cosa es desarrollar una aplicación y otra "desplegarla". Una aplicación, por norma general, no es autocontenida, es decir, no tiene todo el código necesario para su ejecución. Dependiendo del compilador suele ser necesario arrastrar junto con el ejecutable una serie de librerías. Por ejemplo, para el compilador de windows, suelen hacer falta las librerías: "msvcrXX.dll" (si compilas C) y "msvcpXX.dll" (si compilas C++), donde XX es la versión del compilador. Sin embargo, si compilas con mingw es posible que tengas que copiar las librerías "mingwmXX.dll", "libgcc_s_dwX-Y.dll" y "libstdc++-X.dll" Lo mejor muchas veces es usar una aplicación tipo "dependency walker" para saber las dependencias exactas de una aplicación o dll y así asegurarnos de que nos llevamos todo lo necesario para poder ejecutar nuestros proyectos. Como te comentaron, se puede configurar el compilador para que compile sin dependencias, todo es cuestión de mirar la documentación y trastear. Un saludo.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Asi como lo pones tenes un puntero indefinido llamado cadena, puede apuntar a cualquier lado. El VC++ lo indica claramente: x.cpp (?) : warning C4700: uninitialized local variable 'cadena' used Supongo que buscas esto: wchar_t cadena[500];
Y si, enlaza la RTL estaticamente.
|
|
|
En línea
|
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
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Gracias no esperaba unas respuestas tan rapidas, respecto a lo de la dll ya mirare algo para que compile sin dependencias uso MVS13. Por lo del programa he probado lo que dijo etternal idol sustituyendo la deficinion de cadena anterior por la suya y nada sigue mostrandome un caracter el puntero o lo que sea porque el LWSTR es algo raro de c*****s. xD Creo que el camino más facil estará por aquí (por si no lo leístes cuando edite): HWND ventana; char ventanika[500]; while(1) { GetWindowText(ventana, (LPWSTR)ventanika, 500); for (int i = 0; ventanika[i] != '\0'; i++) { printf("%c", ventanika[i]); } system("pause"); fprintf(log, "[-] [ Ventana: %s ]", ventanika); }
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ese casting es erroneo, LPWSTR significa Long Pointer Wide String, por eso como te mostre tenes que usar wchar_t (Wide char) y no char. Y deberias usar %ws no %s por la misma razon.
|
|
« Última modificación: 13 Noviembre 2014, 14:55 pm por Eternal Idol »
|
En línea
|
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
|
|
|
daryo
|
|
|
« Última modificación: 13 Noviembre 2014, 15:36 pm por daryo »
|
En línea
|
buenas
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
OH! MAGIA, te quiero, ahora solo falla que strlen() funcione, pero eso ya es mal mucho menor <3<3 Codigo por si alguien le pasa (no se fien mucho) HWND ventana; char ventanika[500]; while(1) { GetWindowText(ventana, (LPWSTR)ventanika, 500); fprintf(log, "[-] [ Ventana: %s ]", ventanika); }
PD: el unicornio de daryo me hace la competencia, probare lo de daryo de toda formas Edito: Lo de daryo no me funciono el strcpy.. ademas usas otro puntero, lo probe tal cual y me dio error xp Edito: Me ha encantado la ***** que hice para suplantar el strlen() if(strlen(vetanika)>0) ---> if(ventanika[0]!='\0') jajaja
|
|
« Última modificación: 13 Noviembre 2014, 15:18 pm por Kaxperday »
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Esto es un problema de enfoque, hay que leer sobre ANSI vs Unicode antes de continuar sin entender lo que se esta haciendo ... si estan en Unicode tienen que usar las funciones de cadena para Wide char (wcslen por ejemplo). daryo si eso te compila es por una razon: estas en ANSI; igual tiene el mismo problema que el codigo original, cadena es un puntero indefinido (a char en tu caso, a wchar_t si se definiera Unicode en el proyecto y ahi ya no compilaria mas).
MSDN: Unicode and ANSI names GetWindowTextW (Unicode) and GetWindowTextA (ANSI)
Kaxperday: te repito, ese casting es un error logico, si estas en Unicode y por eso usas GetWindowTextW le estas diciendo a la funcion que tu buffer tiene 500 caracteres y no es cierto si usas char[500] y ese casting, tenes 250 caracteres.
|
|
« Última modificación: 13 Noviembre 2014, 15:33 pm por Eternal Idol »
|
En línea
|
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
|
|
|
daryo
|
pues si toda la razon uso ansi. entonces mejor especificar GetWindowTextA
PD: prueba char n[60]; GetWindowTextA(hwnd,(LPTSTR)n,60);
|
|
« Última modificación: 13 Noviembre 2014, 15:43 pm por daryo »
|
En línea
|
buenas
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
pasar int to char y Viceversa
Programación C/C++
|
rembolso
|
3
|
4,387
|
29 Enero 2011, 19:03 pm
por The Swash
|
|
|
duda doble puntero char a matriz de char
Programación C/C++
|
neo_from_cs_matrix
|
3
|
6,256
|
5 Septiembre 2011, 03:53 am
por rir3760
|
|
|
Como pasar una cadena char a hexadecimal por argumento a un constant char?
Programación C/C++
|
ahaugas
|
3
|
5,650
|
13 Enero 2013, 14:09 pm
por ahaugas
|
|
|
Pasar tipo const char* a char
« 1 2 »
Programación C/C++
|
jorge_hura
|
15
|
11,461
|
25 Julio 2013, 09:50 am
por Eternal Idol
|
|
|
Convertir LPWSTR a char **
Programación C/C++
|
patilanz
|
3
|
2,113
|
12 Agosto 2015, 14:10 pm
por Eternal Idol
|
|