Mam pewną aplikację działającą w tle, aby wyłączyć aplikację chcĘ uzyć kombinacji klawiszy Alt+T (lub dowolna inna litera alfabetu). Wywołanie robię tak:
[DllImport("user32.dll")]
private static extern int GetKeyState(byte Klawisz);
[DllImport("user32.dll")]
private static extern bool SetKeyboardState(byte[] Klawisze);
private bool Wywolanie()
{
bool Sprawdz = false;
if ((GetKeyState(Convert.ToByte(Keys.Alt)) > 0) && (GetKeyState(Convert.ToByte(Keys.T)) > 0))
{
//wcisnieto klawisz
Sprawdz = true;
//zwalniam klawiature
byte[] status = new byte[256];
status[Convert.ToByte(Keys.Alt)] = 0x00;
status[Convert.ToByte(Keys.T)] = 0x00;
SetKeyboardState(status);
}
return Sprawdz;
}
//timer sprawdza czy wciśnięto klawisz co 10 setnych sekundy
private timer1_Tick(object sender, EventArgs e)
{
if (Wywolanie())
Application.Exit();
}
Wywołanie mi działa, ale nie zwalnia mi klawiszy i ciągle klawisze są włączone (np. w notatniku ciągle powtarza mi literę "T"), dlaczego?
Wiem że można do tego użyć zdarzenia keybd_event(); ale z min są jeszcze większe problemy (jak piszę coś np. w notatkinu to po wciśnięciu kombinacji klawiszy w notatniku pisze mi tą kombinację).