Avatar
Prokop Randáček:10. června 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. června 1:27
Avatar
Radek Chalupa:10. června 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. června 7:47
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Prokop Randáček
Martin Dráb:10. června 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. června 8:35
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Prokop Randáček:21. června 10:28

Zkusil jsem furt nic :/

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

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

 
Nahoru Odpovědět 21. června 10:30
Avatar
Odpovídá na Prokop Randáček
Radek Chalupa:21. června 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. června 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.