Solved

Keyboard Hook

Posted on 2000-02-29
6
507 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
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 
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

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

839 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