Automatisch toets indrukken

Status
Niet open voor verdere reacties.

rodojo

Gebruiker
Lid geworden
17 mrt 2008
Berichten
110
Hallo,

Weet iemand hoe je met C++ zorgt dat je automatisch een toets kan indrukken bijvoorbeeld de pijltjes?
Alvast bedankt.
 
[CPP]static void tick(unsigned short key)
{
bool capslock = get_capslock();
set_capslock(false);
if(key & 0x100) press(VKEY_SHIFT);
if(key & 0x200) press(VKEY_CONTROL);
if(key & 0x400) press(VKEY_MENU);
press(key);
Sleep(10);
release(key);
if(key & 0x400) release(VKEY_MENU);
if(key & 0x200) release(VKEY_CONTROL);
if(key & 0x100) release(VKEY_SHIFT);
set_capslock(capslock);
}
static void press(unsigned short key)
{
keybd_event(key & 0xFF,MapVirtualKey(key,MAPVK_VK_TO_VSC),0,NULL);
}
static void release(unsigned short key)
{
keybd_event(key & 0xFF,MapVirtualKey(key,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP|0,NULL);
}
static void set_capslock(bool caps)
{
if(get_capslock() != caps) tick(VKEY_CAPITAL);
}
static bool get_capslock()
{
return (1 == GetKeyState(VKEY_CAPITAL));
}[/CPP]
 
Dat is dus een gecompliceerder voorbeeld van keybd_event(). Standaard ziet die functie er zo uit:
[cpp]
keybd_event(<Virtual key code als BYTE,>,
<Hardware scan code als BYTE>,
<Extra parameters als DWORD>,
<Optionele waarde meestal, 0>)
[/cpp]

Een simpel voorbeeld dat de letter a afdrukt:

[cpp]
BYTE letter = VK_KEY_A;
BYTE code = 41;
keybd_event(
letter,
code,
KEYEVENTF_EXTENDEDKEY,
0);
keybd_event(
letter,
code,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
[/cpp]

De corresponderende waarden voor letter (in dit geval VK_KEY_A) en code (41) kun je hier vinden: http://www.kbdedit.com/manual/low_level_vk_list.html
Voor een leuk 'typend' effect kun je een loop gebruiken, bijvoorbeeld:
[cpp]
void sendkeys()
{
BYTE TextToSend[] = {0x44, 0x49, 0x54, 0x20, 0x49, 0x53, 0x20, 0x45, 0x45, 0x4E, 0x20, 0x54, 0x45, 0x53, 0x54, 0x20, 0x4C, 0x41, 0x57, 0x4C, VK_RETURN};
int i;
for(i=0; i<21; i++)
{
keybd_event(
TextToSend,
TextToSend,
KEYEVENTF_EXTENDEDKEY,
0);
keybd_event(
TextToSend,
TextToSend,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
Sleep(30);
}
}
[/cpp]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan