Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel: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
Neaktivní uživatelský účet
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
10.6.2018 7:47
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
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
Neaktivní uživatel:21.6.2018 10:28

Zkusil jsem furt nic :/

Nahoru Odpovědět
21.6.2018 10:28
Neaktivní uživatelský účet
Avatar
Odpovídá na Radek Chalupa
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
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
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.