You Are Here:

Community: Wiki

This page was last modified on 2 May 2009, at 17:27.

How to capture Keyevents in thread or exe

From Forum Nokia Wiki

The code below shows how a thread can capture some keys and react to them, optionally sending them to the top app if it's not interested in them itself. You'll only need a cleanup stack active for this thread, no active scheduler needed.

Headers Required:

#include <W32STD.H> 
#include <APGWGNAM.H>
#include <e32keys.h> //for key codes

Libraries Required:

LIBRARY  ws32.lib
LIBRARY apgrfx.lib

Source:

// connect to window server
RWsSession ws;
User::LeaveIfError(ws.Connect());
CleanupClosePushL(ws);
 
TRequestStatus status;
 
// create a window group for the thread
RWindowGroup wg(ws);
wg.Construct((TUint32)&wg, EFalse);
CleanupClosePushL(wg);
 
// capture a key
User::LeaveIfError(wg.CaptureKey(EKeyLeftArrow, 0, 0));
 
// listen for the key presses
ws.EventReady(&status);
 
// hide this window group from the app switcher
wg.SetOrdinalPosition(-1);
wg.EnableReceiptOfFocus(EFalse);
CApaWindowGroupName* wn=CApaWindowGroupName::NewLC(ws);
wn->SetHidden(ETrue);
wn->SetWindowGroupName(wg);
 
// handle key events
for(;;) {
User::WaitForAnyRequest();
if (status.Int()==KErrNone) {
TWsEvent e;
ws.GetEvent(e);
 
TInt c;
TKeyEvent* aKeyEvent=e.Key();
c=aKeyEvent->iCode;
 
// do something with keypress
 
// if not ours, then send to top window group
// note that this breaks key repeat
TInt wgid=ws.GetFocusWindowGroup();
ws.SendEventToWindowGroup(wgid, e);
}
ws.EventReady(&status);
 
// stop condition
}
 
// clean up
ws.EventReadyCancel();
CleanupStack::PopAndDestroy(3); //ws, wg, wn


Related Links:

Rate This

 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditDiigoTechnocratiTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
京ICP备05048969号    Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
User Rating: qfnZuserE5FratingQNx3E2E5000X