Solved

Keyboard Hook

Posted on 2000-02-29
6
512 Views
Last Modified: 2008-02-01
Please anybody can tell me (or better yet, show me where I can get a sample source code in Visual C++ V6) how to write a keyboard hook that intercepts keyboard data from all threads (global hook). I got the example from MSDN (Hooks32) but I could not compile in VC++ V6, apparently that was written under either VC++ V2 or V4.
0
Comment
Question by:Volga
  • 3
  • 2
6 Comments
 
LVL 8

Expert Comment

by:gelbert
ID: 2570633
You can use SetWindowsHookEx with WH_KEYBOARD.
0
 
LVL 8

Expert Comment

by:gelbert
ID: 2570646
There is a sample by Paul DiLascia
in MSDN. Just look for "SetWindowsHookEx" keyword and scroll results until you see "C++ Q & A" for "Periodicals 1997". He is using this function in his program.
Also there are other samples for the same thing in MSDN
0
 
LVL 8

Expert Comment

by:gelbert
ID: 2570656
Another sample (if you do not have MSDN CD) is source code to "Visual C++ Windows Shell Programming" by Dino Esposito at www.wrox.com. Look around website for book page and there reference to download source code. Search source code for "SetWindowsHook"
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 5

Accepted Solution

by:
Wyn earned 100 total points
ID: 2571361
Here is a easy sample I wrote:
//for *.dll:

#include <windows.h>

#pragma data_seg(".shared")
HHOOK hhook=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:.shared,RWS")

HINSTANCE hdll;

LRESULT CALLBACK ClockClass::KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//do whatever you want here
return CallNextHookEx(hhook,nCode,wParam,lParam);
}
   

int APIENTRY DllMain (HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
{ if ( dwReason == DLL_PROCESS_ATTACH)
hdll = hInstance;
return (int)(DisableThreadLibraryCalls (hdll));
}



_declspec(dllexport) void SetTheHook()
{
hhook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC),KeyBoardProc,hdll,NULL);
);
   
}

_declspec(dllexport) void RemoveTheHook()
{
   UnhookWindowsHookEx(hhook);
}

Now,you can write a .exe and call SetTheHook() and later you call RemoveTheHook.You'v got to link with .lib of that .dll .
Regards
W.Yinan

0
 

Author Comment

by:Volga
ID: 2577429
gelbert,
thanks for your suggestions but I had a hard time finding the right sample at the location.

wyn,
you are the closest who can give me some kind of sample code, even though I had to clean out some syntax error before being able to compile it. You have an extra ');' the line after SetWindowsHookEx.
I wrote an application that call SetTheHook in that dll but it looks like nothing happens. Do I need another hook (like WH_GETMESSAGE) to make it work?

Volga


0
 

Author Comment

by:Volga
ID: 2605697
wyn,

I have to accept your question, since I was able to compile the dll. But I'm still unable to write a program to translate the keyboard.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question