Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

manejo de hook para el teclado

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: manejo de hook para el teclado Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

gracias _LEO, voy a checar..
Volver arriba
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.