2009-06-26 5 views

Répondre

1

SetWindowsHookEx n'est pris en charge sur aucune version de WindowsCE (lire: Mobile). Les hameçons en général ne sont pas supportés, en fait. Toutefois, si vous souhaitez utiliser des API sans support/non documentées, vous pouvez extraire SetWindowsHookEx de coredll.dll et l'appeler comme vous le feriez sur Windows. Vous voulez WH_KEYBOARD_LL, qui dit est 20.

un peu googler Vous aurez réellement besoin de sortir des pointeurs vers les méthodes suivantes: SetWindowsHookEx, CallNextHookEx et UnhookWindowsHookEx.

Votre code ressemblera à (ce qui est non testé):

//myHook.dll 
LRESULT myLowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    //You'll need to pull a reference to CallNextHookEx out of coredll as well 
    if(nCode < 0) return CallNextHookEx(nCode, wParam, lParam); 

    KBDLLHOOKSTRUCT data = *((PKBDLLHOOKSTRUCT)lParam); 

    //Do something with data 

    return CallNextHookEx(nCode, wParam, lParam); 
} 

//Main Code, which ignores all the nasty function pointers you'd ACTUALLY have to use to do this 
... 
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, pMyLowLevelKeyboardProc, hMyHookDll, 0); 
... 
//Some point in the future 
UnhookWindowsHookEx(hook); 

Je suggère fortement contre cette cependant. Je doute beaucoup que ce code continuera à fonctionner pour toutes les futures versions de Windows Mobile. Envisager une autre façon de réaliser tout ce que vous êtes réellement après.

Je ne peux pas dire que j'ai des recommandations pour les compilateurs gratuits ou IDE. Tout autre que Visual Studio pour C/C++ me cause toujours beaucoup de frustration. Je pense que c'est plus un reflet de mes habitudes qu'un commentaire sur d'autres outils.

+0

puis-je utiliser ceci avec C# et appel dll natif? – StoneHeart

+0

Sur le bureau, il est possible d'installer des hooks WH_KEYBOARD_LL en utilisant du code managé pur. Vous devrez expérimenter pour voir si la même chose est vraie pour Windows Mobile. Mes exemples sont en C, car ils sont les «plus susceptibles» de travailler; comme indiqué, il s'agit d'une opération non prise en charge. –

+0

je fais un outil sur Windows Mobile, il peut fonctionner en arrière-plan et la clé de capture que l'utilisateur a pressé (dans le monde entier), alors je peux le faire en C#? – StoneHeart

Questions connexes