Viernes 8 de Noviembre de 2024, 14:50
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
»
C++ Builder
(Moderador:
Eternal Idol
) »
Escribir En Otra Aplicacion
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Escribir En Otra Aplicacion (Leído 1749 veces)
Vatoicc
Miembro activo
Mensajes: 65
Escribir En Otra Aplicacion
«
en:
Miércoles 21 de Marzo de 2007, 01:35 »
0
Estoy tratando de escribir en otra aplicacion, desde mi programa, e intentado usar SendMessage de la API de windows, pero no me funciona, no se si este haciendo lo correcto
Primero habro la aplicacion (Bloc de notas) y guardo el HANDLE
Código: Text
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Programa = "C:\\WINDOWS\\NOTEPAD.EXE";
AnsiString Wname = "Sin título - Bloc de notas";
char WinName[80];
char WinClass[80];
//HandleProg esta declarada dentro de la clase de la forma (HWND HandleProg;)
ShellExecute(HandleProg,"open", Programa.c_str() , NULL ,NULL,SW_SHOWNORMAL );
while(1)
{
HandleProg = FindWindow( 0,Wname.c_str() );
if( HandleProg != NULL )
break;
}
//Esto es solo para ver el nombre de la clase y el titulo del programa
GetWindowTextA( HandleProg ,WinName,sizeof( WinName )-1 );
GetClassNameA( HandleProg ,WinClass,sizeof( WinClass ) - 1 );
Label_WinClass->Caption = WinClass;
Label_WinName->Caption = WinName;
}
//---------------------------------------------------------------------------
Ya que tengo guardado el HANDLE del programa, lo puedo cerrar, por lo que
compruebo que el HANDLE es correcto
Código: Text
void __fastcall TForm1::Button2Click(TObject *Sender)
{
SendMessage( HandleProg,WM_CLOSE,0,0 );
}
//---------------------------------------------------------------------------
Pero no puede escribir un caracter :s
Código: Text
void __fastcall TForm1::Button3Click(TObject *Sender)
{
SendMessage( HandleProg,WM_CHAR,'r',0 );
}
//---------------------------------------------------------------------------
Lo que e logrado hacer con el mensaje WM_CHAR es escribir en un Edit o un Memo, pero solo dentro de mi aplicacion
Código: Text
SendMessage( Edit1->Handle,WM_CHAR,'r',0 );
SendMessage( Memo1->Handle,WM_CHAR,'r',0 );
Por eso creo que el mensaje WM_CHAR es lo que estoy buscando, pero creo que el error esta en el parametro Handle de la funcion SendMessage.
Creo que tendria que poner el Handle del Memo que tiene el Bloc de notas, pero eso si no se como obtenerlo :s
E intentado usar FindWindowEx() pero no e tenido exito.
Si alguien puede darme un norte se los agradeceria muchisimo.
O algun codigo donde manejen este tipo de funciones del APIWin para comunicarce con otras aplicaciones tambien se le agradece
Tweet
La paranoia es una vision mas sutil de la vida
AmelRenier
Nuevo Miembro
Mensajes: 10
Re: Escribir En Otra Aplicacion
«
Respuesta #1 en:
Lunes 30 de Abril de 2007, 22:14 »
0
Yo probe a hacer eso, y lo logré despues de hacer lo siguiente.
Primero busqué el manajador de la ventana de bloc de notas como mismo tu lo hiciste y despues use la funcion GetWindow pasandole como parametro lo necesario para que me devuelva el manejador de la primera ventana hija (child) despues la ventana del bloc de notas.
A ese manejador si le puedes mandar el mensaje WM_CHAR con el codigo de la letra a pasar ...
No tengo ahora el codigo a mano, pero creo que te he puesto aki todo lo que hay que hacer.
Algo asi fue lo que hice:
HWND hWnd = FindWindow(...,"Sin título - Bloc de notas",...)// no recuerdo los parametros
HWND hWndChild = GetWindow(GW_Child)// o algo asi
SendMessage(hWndChild,WM_CHAR,'r',0 );
Espero que te sea de alguna utilidad.
Ah, prueba a mandarle un mensaje de WM_CLOSE para que veas lo k sucede......
Vatoicc
Miembro activo
Mensajes: 65
Re: Escribir En Otra Aplicacion
«
Respuesta #2 en:
Domingo 6 de Mayo de 2007, 04:21 »
0
Te dire que funciono bien, este es el codigo:
Código: Text
HWND P = GetWindow( HandleProg,GW_CHILD );
SendMessage( P,WM_CHAR,'r',0 );
La verdad no se cuanto tiempo estube intentando solucionar el problema, y crei que ya no hiban a responer mi mensaje, asi que te agradesco mucho la atencion que tubiste en hacerlo.
Pero te dire que solucione el problema de una mejor forma, el programa que queria manipular es para grabar audio en mp3, y tenia la intencion de correrlo de manera oculta detras de mi programa para mandar "teclas virtuales" con las hotkeys que maneja el programa para la grabacion de audio, pues queria incluirle un modulo de grabacion de audio a mi programa, para que fuera un sistema integral, que hiciera todo.
Y buscando un poco sobre ese programa de mp3, vi que usa un dll llamado lame, que es un codificador de mp3 de codigo libre. Pero ahi otro problema, no sabia manejar dll
.
Y despues de mucho buscar en este foro y en todo lo que me arrojara google, logre hacer una funcion para convertir wav a mp3.
Y mi programa, ahora es un sistema mas completo.
Pero nuevamente te agradesco la atencion que te tomaste
La paranoia es una vision mas sutil de la vida
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
»
C++ Builder
(Moderador:
Eternal Idol
) »
Escribir En Otra Aplicacion