Solved

Keyboard Hook

Posted on 2000-02-29
6
503 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
Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

 
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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Suggested Solutions

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

776 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