 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Lun 08 May, 2006 11:35 pm Asunto: Problema de Ejecución |
|
|
Hola Amigos del Foro:
Estoy haciendo una aplicacion que me permita leer la informacion que proveen varios Ratones conectados en Windows XP, lo que es botones pulsados, distancia X, Y, si se movio la rueda del Mouse (raton Wheel), esto usando , el RAW INPUT mediante el mensaje de Win XP WM_INPUT
que me permite claro, antes mediante otras funciones que se encuentran en USER32.DLL saber que dispositivos HID estan conectado. Ver:
Leyendo ratones con WM_INPUT
https://cppbuilder.es/viewtopic.php?t=11305
la aplicacion funciona correctamente, solo teniendo instalados las RTL, (donde esta instalado el BCB 6) esto es cuando enlaza el ejecutable de forma nomal.
Pero cuando lo enlazo, utilizando las siguientes opciones,
Project->options.
i) Linker: Desmarcar la checkbox 'Use dynamic RTL'
ii) Packages: Desmarcar la checkbox 'Build with runtime packages'.
para que me cree un ejecutable que corra en cualquier PC.
Me emite el siguiente error. al ejecutarlo.
El proyecto completo lo pueden descargar si lo desean en:
http://mx.geocities.com/mverastegui/descarga/ratonvcl7.zip
la intención obtener la informacion de manera separada de cada raton conectado a la PC, ya que como sabemos si tenemos dos ratones Windows solo le hace caso a "UNO" esto es de forma ficticia, ya que tambien lee la informacion de otro ratones, pero solo refleja el estado de un. Es decir si el raton 1.
En el topico 11305 citado anteriormente realiza dicha funcion , pero enlazado de manera normal, y con el BCB 6 instalado pero enlazado para que corra en cualquier PC, "no funciona".
Como resuelvo, este problema.
Alguna Sugerencia por favor.
Muchas Gracias. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Mar 09 May, 2006 2:19 am Asunto: no se si te pueda servir |
|
|
| a mi me han pasado problemas similares cuando hago lo de "que corra en cualquier pc" y me salen letreros por el estilo. la manera q yo he encontrado para que me corra bien es añadiendo en la misma carpeta de mi proyecto los .dll's que uso para el programa, uno de esos el "cc3260mt.dll" q es el de Run Time Library y es muy necesario casi en todas las aplicaciones que yo he usado para poderlo llevar a otro pc, repito "en las aplicaciones que yo he realizado, no en todas". espero te sirva eso de ayuda y si algo me comentas como te fue, suerte........... |
|
| Volver arriba |
|
 |
rayder Master

Registrado: 03 Mar 2004Mensajes: 207
|
Publicado: Mar 09 May, 2006 11:20 am Asunto: |
|
|
Habeis instaldo las actualizaciones del builder6? _________________ Un saludo
Rayder |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Jue 18 May, 2006 6:30 pm Asunto: Solucionado |
|
|
Hola amigos del foro:
Gracias, ya solucione el problema de ejecución, el error, aparace porque quiere abrir un archivo, lo curioso es que aparece solo cuando esta construido como ejecutable completo.
Agrego lo lugares donde hice la modificación.
| Código: |
...
#pragma resource "*.dfm"
int iFileHandle;//ofstream Archivo;
...
int TForm1::HandleWMInput(HWND hwnd, HRAWINPUT hRawInput)
{
...
// Archivo << cad.c_str();
FileWrite(iFileHandle,cad.c_str(),cad.Length());
Memo1->Lines->Add(cad);
....
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// Archivo.open("log.txt");
if (FileExists("log.txt"))
{
/* fnsplit(SaveDialog1->FileName.c_str(), 0, 0, szFileName, 0);
strcat(szFileName, ".BAK");*/
RenameFile("log.txt", "log.bak");
}
iFileHandle = FileCreate("log.txt");
...
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
// Archivo.close();
FileClose(iFileHandle);
...
}
|
Estas modificaciones se encuentran el archivo. principal.cpp
por razones de tiempo, luego les pongo el enlace del programa que funciona, correctamente, para que lo puedan descargar si lo desea.
Muchas gracias. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Sab 27 May, 2006 9:56 pm Asunto: Solucionado enfoque de teclado |
|
|
Hola Amigos del Foro:
Ya resolvi el problema del enfoque del teclado, resulta que cuando
vas a registrar el tipo de dispositivos que va a leer tu aplicación, se tiene
que especificar el manejador de Ventana (HADLER [HWND]) que va a detectar los mensajes WM_INPUT, en este caso es el HANDLER de la Aplicacion principal.
| Código: |
....
RAWINPUTDEVICE Rid[1];
...
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = 0;
Rid[0].hwndTarget = (HWND)this->Handle; //Form1->Handle;
if(rid.RegisterRawInputDevices_f(Rid, 1, sizeof (Rid [0])) == FALSE)
....
|
Esta manera se resuelve el problema del enfoque de teclado.
Ya que cuando hwndTarget es 0, esta pendiente del teclado y los datos de los ratones no los lee.
Les doy la dirección para que descarguen el proyecto.
http://mx.geocities.com/mverastegui/descarga/ratonvcl11.zip
La aplicación, muestra los dispositivos de entrada, que estan conectados a la PC.
El unico detalle que me falta, es que realizé la lectura de los ratones cuando no este activa la aplicacion (minimizada, sin el enfoque),
y cuando quitas, o añades un raton, ya que si lo corres por ejemplo
tienes 1 raton, y te sales, agregas un segundo y ejecutas la aplicacion, el
2do, no lo detecta, mas sin embargo windows, si lo hace.
El programa te lo detecta, solo cuando has reiniciado la PC y tienes los 2 ratones conectados.
Pregunta ¿Tendra que ver con la deteccion poner y quitar dispositivos?
o ¿de que manera actualizo dicha lista?
Alguna sugerencia?
Muchas gracias, seguire intentando.
Los mantendré informados. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Lun 05 Jun, 2006 5:42 pm Asunto: Ya detecto en segundo plano, los ratones. |
|
|
Hola Amigos.
Hasta ahora tuve oportunidad de decirles, que ya
puede leer los ratones en segundo plano, pensé que era dificil, era
cuestion de leer bien la documentación, de Microsoft.
Bueno, modificación es donde antes de registrar los dispositivos que vas a leer, el valor de rid.dwFlags debe tener el siguiente valor RIDEV_INPUTSINK. de la siguiente forma se muestra el extracto.
| Código: |
...
#define RIDEV_INPUTSINK 0x00000100
....
RAWINPUTDEVICE Rid[1];
...
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags =RIDEV_INPUTSINK;
Rid[0].hwndTarget = (HWND)this->Handle; //Form1->Handle;
if(rid.RegisterRawInputDevices_f(Rid, 1, sizeof (Rid [0])) == FALSE)
....
|
Este parametro te permite recibir los mensaje de los ratones, aun que se encuentre en segundo plano tu aplicación.
Claro, como se muestra en el extracto de código tenemos que definir
RIDEV_INPUTSINK en nuestro programa.
pueden probar, con el proyecto que se encuentra en el penultimo mensaje que he enviado RatonVCL11.zip
Muchas gracias. Seguimos en contacto. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|