 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
seth Cmdr

Registrado: 16 Nov 2003Mensajes: 129
|
Publicado: Dom 30 Nov, 2003 12:44 am Asunto: manejo de hook para el teclado |
|
|
Hola _leo..
ante todo gracias por la ayuda y la atencion prestada...
descarge el archivo y ejecute la aplicacion es muy buena mejor de lo que pense.. el archivo lo diseñaste en Builder 6.0 bueno eso creo...
yo tengo Borland 4.0 y no me permitio abrirlo.. he estado revisando el codigo y lo pase pero siempre me dice que "no se pudo instalar el hook" y revisando el codigo vi en que pate esta este mensaje y por no se por que dice que no lo puede instalar... claro como me mandaste el pueba.exe este si se ejecuto sin ningun problema y la tecla que yo quiero controlar este lo hace no abre el nemu del boton de inicio y no no funciona Win + E, no funciona Win + R, Win + F, en esas las he probado...
pero tengo una duda como tome el codigo el lo he estado pasando a una aplicacion nueva en c++ el que he hecho presenta problemas y he tomado to codigo y lo he pegado en un archivo que tengo sobre namejo de hook que he desarrollado este si permite el uso de dicha tecla mi sistema operativo en xp... no se que hacer por queno tengo Borlan 6.0 para segir la codigo... si me puedes ayudar lo agradeceria....
para las personas que leean este articulo y no comprendar pueden enviar correo a seth_los@yahoo.com para explicar y mandar codigo
Seth
Saludos |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 30 Nov, 2003 4:33 am Asunto: |
|
|
Hola Seth:
Aquí va la versión para BCB4:
http://telefonica.net/web/ljfg/temp/keyhook_ll_ejemplo_bcb4.zip
y la anterior para BCB6 por si le sirve a alguien:
http://telefonica.net/web/ljfg/temp/keyhook_ll_ejemplo.zip
Estos archivos lo que contienen es un pequeño ejemplo de un hook de teclado de bajo nivel para WinNT/2K/XP que modifica el comportamiento de la tecla "WIN" haciendo que suene un pitido.
La mayor parte del código que ves es solo para añadir un icono a la bandeja del sistema, la parte importante es la dll y luego en el ejecutable enlazar el .lib y usar las dos funciones que están en "Dll.h" para habilitar o deshabilitar el hook.
Saludos:
_Leo
[Editado para corregir los enlaces]
Ultima edición por _Leo el Mie 26 May, 2010 5:37 pm, editado 1 vez |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 30 Nov, 2003 2:10 pm Asunto: |
|
|
Gracias, _LEO, te sabes algo para controlar, la impresora, y saber cuantas paginas se imprimen, algo como tipo Hook, encontre este codigo no lo he probado te lo paso, y si puedes decirme, en que se puede mejorar...
| Código: |
//---------------------------------------------------------------------------
UINT APIENTRY PageSetupHook(HWND HDlg, UINT uiMsg, WPARAM WParam,
LPARAM LParam);
//---------------------------------------------------------------------------
void __fastcall TForm1::PageSetupClick(TObject *Sender)
{
PAGESETUPDLG psd;
ZeroMemory(&psd, sizeof(PAGESETUPDLG));
// Инициализируем структуру PAGESETUPDLG
psd.lStructSize = sizeof(PAGESETUPDLG);
psd.hwndOwner = Handle;
psd.Flags = PSD_ENABLEPAGESETUPHOOK;
psd.lpfnPageSetupHook = PageSetupHook;
// Отображаем диалоговое окно
if (PageSetupDlg(&psd))
{
HANDLE HMem;
char device[MAX_PATH], driver[MAX_PATH], port[MAX_PATH];
// use the TPrinter object to invoke the changes
Printer()->PrinterIndex = Printer()->PrinterIndex;
Printer()->GetPrinter(device, driver, port, (int)HMem);
Printer()->SetPrinter(device, driver, port, (int)psd.hDevMode);
GlobalFree(HMem);
GlobalFree(psd.hDevNames);
}
}
//---------------------------------------------------------------------------
UINT APIENTRY PageSetupHook(HWND HDlg, UINT uiMsg, WPARAM WParam,
LPARAM LParam)
{
if (uiMsg == WM_INITDIALOG)
{
// В сообщении WM_INITDIALOG , the LParam
// указатель на вышеуказанную структуру PAGESETUPDLG
RECT FormRect, DialogRect;
LPPAGESETUPDLG lppsd = (LPPAGESETUPDLG)LParam;
::GetWindowRect(lppsd->hwndOwner, &FormRect);
::GetWindowRect(HDlg, &DialogRect);
int cxForm = FormRect.right - FormRect.left;
int cyForm = FormRect.bottom - FormRect.top;
int cxDialog = DialogRect.right - DialogRect.left;
int cyDialog = DialogRect.bottom - DialogRect.top;
MoveWindow(HDlg,
(cxForm - cxDialog) / 2 + FormRect.left,
(cyForm - cyDialog) / 2 + FormRect.top,
cxDialog, cyDialog,
true);
}
return 0L;
|
encontrado en una pagina, griega, pero como casi no hablo español, y menos el ingles, que de menos voy a saber griego.. je , es broma, te la mando y haber que puedes hacer con ello... _________________
 |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 30 Nov, 2003 9:25 pm Asunto: |
|
|
Eso solo sirve para recibir los mensajes que se producen en el dialogo de impresión estándar, pero dentro de nuestra aplicación.
Para hacerlo a nivel del sistema tendrías que usar el mensaje de Windows WM_SPOOLERSTATUS en Win95/98/ME (en la referencia del API se especifica que es solo un mensaje informativo y que no se garantiza que siempre se vaya a recibir). Y para WinNT/2000/XP las funciones FindFirstPrinterChangeNotification y FindNextPrinterChangeNotification.
Un ejemplo de estas funciones para BCB lo puedes encontrar en el siguiente enlace en francés (aunque no lo entiendas al menos tienes el código):
http://djmsoftware.developpez.com/PrintMonitor/
(anteriormente el articulo tenia capturas de pantalla y un archivo .zip con el ejemplo, pero el autor ha modificado el articulo, no se si aun seguirá el .zip en algún lugar de la pagina) |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 01 Dic, 2003 2:45 am Asunto: |
|
|
| gracias _LEO, voy a checar.. |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Jue 15 Abr, 2004 8:00 pm Asunto: |
|
|
Leo, disculpa la molestia, pero los links con los ejemplos para BCB6 ya no funcionan.
Me los podrias pasar a mi correo y me comprometo a publicarlos, asi evito la avalancha de "para mi tambien" que se suele desencadenar. |
|
| 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.
|