Zamilovat si programování Zamilovat si programování
Pouze tento týden až 80% sleva na SQL jazyky
Zamiluj si programování! Až 80 % bodů na prémiový obsah zdarma. Více informací
Avatar
Prokop Randáček:10.6.2018 1:27

Simulovat držení klávesy na určitou dobu (form aplikace)

V mainu:
int run = Convert.ToInt32(re­peat.Value) * 100;
int x = 0;
int waitint = Convert.ToInt32(wa­it.Value);
int holdint = Convert.ToInt32(hol­d.Value);
MessageBox.Show(wa­itint.ToStrin­g() + " " + holdint.ToString() + " " + run.ToString());
while (x > run)
{
Keyboard.HoldKe­y((byte)Keys.D3, holdint * 1000, waitint * 1000);
x++;
}

Třída keyboard:
public class Keyboard
{
[DllImport("u­ser32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

const int KEY_DOWN_EVENT = 0x0001; //Key down flag
const int KEY_UP_EVENT = 0x0002; //Key up flag

public static void HoldKey(byte key, int duration, int PauseBetweenStro­kes)
{
int totalDuration = 0;
while (totalDuration < duration)
{
keybd_event(key, 0, KEY_DOWN_EVENT, 0);
keybd_event(key, 0, KEY_UP_EVENT, 0);
System.Threadin­g.Thread.Sleep(Pau­seBetweenStro­kes);
totalDuration += PauseBetweenStro­kes;
}
}
}

Zkusil jsem: https://stackoverflow.com/…-application
a asi 4 další tenhle vypadal nejslibněji ale nic to nedělá

Chci docílit: simulovat držení klávesy na určitou dobu (form aplikace)

 
Odpovědět 10.6.2018 1:27
Avatar
Radek Chalupa:10.6.2018 7:47

Co to udělá záleží na tom jaké okno má v tu dobu klávesnicový fokus a jak je v proceduře toho okna zpracována zpráva WM_KEYDOWN/WM_KE­YUP...

 
Nahoru Odpovědět  +1 10.6.2018 7:47
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Prokop Randáček
Martin Dráb:10.6.2018 8:35

V dokumentaci píšou, že keybd_event bys měl nahradit voláním SendInput.

Kód jsem nezkoušel, ale neměl bys mezi posíláním stlačení a uvolnění klávesy provádět ten Sleep? Takhle mi to přijde jako rychlé stisknutí a uvolnění klávesy (key press) a až pak následný spánek.

Nahoru Odpovědět 10.6.2018 8:35
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Prokop Randáček:21.6.2018 10:28

Zkusil jsem furt nic :/

 
Nahoru Odpovědět 21.6.2018 10:28
Avatar
Odpovídá na Radek Chalupa
Prokop Randáček:21.6.2018 10:30

Netuším o čem mluvíš :D Co přesně dělám špatně?

 
Nahoru Odpovědět 21.6.2018 10:30
Avatar
Odpovídá na Prokop Randáček
Radek Chalupa:21.6.2018 10:56

psal jsi "nic to nedělá", ale nenapsal jsi co by to MĚLO DĚLAT?
Např. prázdné okno (form) bez ovládacích prvků nedělá na stisk/držení klávesy nic, pokud sám v aplikaci nemáš nějakou akci v události obsluhující stisk klávesy.
A navíc o stisku klávesy se "dozví" (tj. má možnost něco dělat) pouze to jedno okno které má (klávesnicový) fokus - samozřejmě když neberu v potaz low-level "keyboard windows hooks" a pod.

 
Nahoru Odpovědět  +1 21.6.2018 10:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.