Hook de enter sur dialogbox (win32)

Description

Le hook interdit l'emploi de touche ENTER.
Il annonce interdiction par MessageBox.
Le MessageBox est egalement sujet au hook.
Faites essai de fermeture du message par ENTER.

Source / Exemple :


#include <windows.h>
#include "resource.h"

HHOOK hhk = 0;

// HOOK LOCAL de ENTER sur boite type dialogbox ou MessageBox
LRESULT CALLBACK MsgFilterProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  MSG *lpmsg;
  lpmsg = (MSG*) lParam;
  if(nCode != MSGF_DIALOGBOX) goto defRet;
  if(lpmsg->message == WM_KEYDOWN) {
    if(lpmsg->wParam == VK_RETURN) {
      MessageBox(lpmsg->hwnd, "Touche INTERDITE", "VK_RETURN", 0);
      return 1;
    }
  }
defRet:
  return (CallNextHookEx(hhk, nCode, wParam, lParam));
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, (LPCTSTR)IDI_APPLICATION));
      hhk = SetWindowsHookEx(WH_MSGFILTER, MsgFilterProc, 0, GetCurrentThreadId());
      return 1;
    case WM_COMMAND:
      switch(wParam) {
        case IDOK:
          MessageBox(hdlg, "Salut", "IDOK", 0);
          return 0;
        case IDCANCEL:
          if(hhk) UnhookWindowsHookEx(hhk);
          EndDialog(hdlg, 0);
      }
  }
  return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
  DialogBoxParam(hInstance, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);
  return 0;
}

Conclusion :


Tout dans zip.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.