webForumDet fria alternativet

GetAsyncKeyState asynkront?

7 svar · 354 visningar · startad av yohpops

yohpopsMedlem sedan feb. 20011 198 inlägg
#1

Hej.

Hur gör jag för att detta API anrop ska bli asykront så jag slipper använda en timer?

[DllImport("user32.dll", CharSet=CharSet.Unicode, EntryPoint="GetAsyncKeyState")]
protected static extern int GetAsyncKeyState (int vKey);

private void timer1_Tick(object sender, System.EventArgs e)
{
	
	if (GetAsyncKeyState(1) == -32767)
	{
	MessageBox.Show("Left Mouse Down");
	}
	else if (GetAsyncKeyState(2) == -32767)
	{
	MessageBox.Show("Right Mouse Down");
	}
	else if (GetAsyncKeyState(4) == -32767)
	{
	MessageBox.Show("Middle Mouse Down");
	}
}
GladhMedlem sedan maj 20012 812 inlägg
#2

Titta på methoden Invoke och BeginInvoke så får du säkert tips på hur du gör det asynkront.

- M

yohpopsMedlem sedan feb. 20011 198 inlägg
#3

Ska göra det.

GladhMedlem sedan maj 20012 812 inlägg
#4

Det jag inte förstår är att du vill göra ditt API anrop asynkront, medans det egentligen är timern du vill få bort.

Om jag hade gjort det, så hade jag startat en ny thread, i den tråden hade jag lagt en while-loop och i denna lopp så hade jag väntat på en mustryckning, när denna mustryckning hade skett, så hade jag kollat med din GetAsynkKeyState(). Därefter så hade jag för varje sak som skulle ske, startat en ny tråd och anropat den metod som man vill skall utföras då.

Då har du fått följande:
1. Din huvudtråd är aldrig uppbunden med att vänta på en mustryckning. Det blir även så att den tråd som ligger och känner av mustryckningarn används till så lite som möjligt då den bara starta en ny tråd och kör vad som skall hända i den.

Dock förstår jag inte varför du använder API, finns det inte events i .NET för en mustryckning?

- M

yohpopsMedlem sedan feb. 20011 198 inlägg
#5

Jag vill fånga globala musclick.
Alltså alla, även de som inte sker inom min form.

Och det ska kännas av hela tiden och då tycker jag att det verkar väldigt processor-vidrigt att ha en loop som alltid snurrar.

Jag hade ett smart program på min burk förut som visade en lista med iconer när jag klickade på mittenknappen och eftersom min burk har kraschat och jag inte vet vad det hette, tänkte jag göra ett eget.

GladhMedlem sedan maj 20012 812 inlägg
#6

Och det ska kännas av hela tiden och då tycker jag att det verkar väldigt processor-vidrigt att ha en loop som alltid snurrar.

Ingen fara om du låter loopen sova några millesekunder, samt sätter en lägre prioritet på tråden. Det blir samma sätt som med din timer, bara att det ligger i en egen loop hela tiden.

- M

yohpopsMedlem sedan feb. 20011 198 inlägg
#7

Aha.
Går det också att stoppa att andra program fångar klicket.
Om man klickar på mittenknappen i ex. explorer så får man upp scrollpilarna.

Jag provade att stänga av middle knappen i kontrolpanelen men då blir det inget klick alls.

GladhMedlem sedan maj 20012 812 inlägg
#8

Går det också att stoppa att andra program fångar klicket.

Det har jag ingen anning om....

134 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)