29. oktober 2004 - 17:04Der er
17 kommentarer og 2 løsninger
Navigation med mus skal emulere tryk på piletaster
Hej Eksperter.
Jeg er ny i C#, men har brug for noget hjælpe-kode til et projekt, hvor musen skal emulere tryk på piletasterne. Dvs. når jeg rykker til venstre, så skal det svare til at venstre piletast trykkes ned - det samme gør sig gældende i alle andre retninger. Og hvis jeg rykker musen skråt op, skal der ske en kombination i brugen af piletast til siden og op.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
igennem MouseMove-eventen kan du aflæse musens koordinater. Ved at gemme dem og sammenligne når musen har rykket sig et stykke kan du beregne i hvilken retning musen har bevæget sig. Når det er beregnet er det bare at simulere det pågældende tastetryk.
Er det globalt (i hele windows) eller kun i dit program at det her skal køre?
Der er tale om et vindue, så bevægelsen skal gælde for dette vindue. Men musen må ikke kunne komme uden for vinduet - så jeg vil gætte på at det skal være lokalt.
Nej, den må endelig ikke blive holdt tilbage. Men hvis jeg bliver ved med at trække min mus mod venstre, så skal jeg blive ved med at få udført en handling, der svare til, at piletasten (til venstre) bliver ved med at blive trykket ned. Og så må handlingen ikke høre op, hvis jeg pludselig når vinduets ramme.
jeg mener at så længe vinduet er aktivt (man ikke har valgt et andet) så vil ens mouse-messages blive routet til det vindue, også selvom musen har forladt selve vinduet... så det skulle ikke være noget problem.
Er det selve matematikken du har problemer med, MouseMove-eventen eller... hvor langt er du?
Jeg er slet ikke begyndt endnu. I første omgang mangler jeg en ide til, hvordan jeg kan få gjort min mus usynlig i vinduet - og samtidig må den ikke ryge ud fra vinduet - så den pludselig bliver synlig på fx desktoppen. Det skal fungere som et ganske alm. spil - blot i et vindue.
Så skal man lave en form for virtuelt rum hvori musen kan bevæge sig. Deri kan man så aflæse musens bevægelse. Men det tror jeg ikke umiddelbart, jeg har begreb om hvordan skal løses.
Endelig bliver der også problematikken med, at få omsat muse-klik til taste-slag.
at få omsat museklik og bevægelser til tasteslag er det mindste problem. Der kan man bruge SendKey()-funktionen eller benytte sig af af native Windows Messages.
Hvordan det rent matematisk skal løses er jeg lidt på bar bund. Et point består jo af en x og en y-værdi. Ved at gemme det point ved en given tid, og aflæse musens placering f.eks. 20 ms senere kan man vel trække de to points fra hinanden, og se i hvilken retning musen har bevæget sig (ud fra størrelserne på x og y).
lad os sige at musen befinder sig i punktet 10,10. 20 ms senere befinder den sig i 10,20
10,20 - 10,10 = 0,10
da x-koordinaten er nul har den ikke bevæget sig i den horisontale retning (højre/venstre). y-koordinaten er blevet mindre, alså har musen bevæget sig ned af. Havde det nye punkt været 20,20:
20,20 - 10,10 = 10,10 - musen har bevæget sig både til højre og nedaf. Og da x og y er lige store har musen flyttet sig lige langt ned som til højre, altså skråt ned til højre.
Det var noget i den retning jeg havde forestillet mig at det kunne løses på. Men det er da rigtigt, at musens koordinatsæt er begrænset af formens størrelse - altså befinder punktet 0,0 sig i formens øverste venstre hjørne, og ikke i selve skærmens øvreste venstre hjørne.
Jeg siger tak for hjælpen. Jeg foreslår, at vi deler de 100 stærke. Jeg har lagt projektet på hylden et stykke tid, da jeg ikke kan løse opgaven før jeg finder en løsning på problemet med begrænset plads musen kan løbe på.
Cursor.Position.X / Cursor.Position.Y aflæser musens position på HELE skærmen.
husk
using System.Windows.Forms;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.