De centrale vraag is of je vanuit de pc een toetsaanslag kunt sturen naar het toetsenbord, net zoals je vanuit de pc het lampje bij de NumLock toets kunt laten branden. Het antwoord kun je zien in het plaatje hieronder.
Zoals je ziet stuurt het toetsenbord scan codes van de ingedrukte toetsen naar de keyboard driver. Windowsfuncties zoals keybd_event, GetAsyncKeyState en SetKeyboardState communiceren nooit direct met het toetsenbord, maar communiceren met de keyboard driver. En de keyboard driver kent alleen eenrichtingsverkeer van keyboard naar software.
Nu is er een uitzondering, namelijk die paar toetsen met een lampje erboven (Num lock, Caps lock, Scroll lock). Volgens de
documentatie van Windows kun je die lampjes laten branden met bijvoorbeeld de keybd_event functie. Er is dus toch tweerichtingsverkeer mogelijk, zij het
slechts voor de lampjes bij deze drie toetsen. De keyboard driver onthoudt simpelweg de toestand van de betreffende toets. Num lock aan betekent niets meer dan dat de keyboard driver heeft onthouden dat die toets 'aan' is en dat de keyboard driver het overeenkomstige lampje heeft aangezet. Drukt de gebruiker daarna op Num lock, dan onthoudt de keyboard driver dat Num lock 'uit' is en geeft het toetsenbord het commando om het lampje uit te doen.
Dat dit ook daadwerkelijk zo zit, weet ik uit de praktijk. Op mijn werk hang ik altijd een extern toetsenbord aan mijn laptop. Zodra Windows opstart gaat het Scroll lock lampje branden. Mijn laptop reageert echter alsof Scroll lock uit is. Als ik Scroll lock eenmaal indruk, blijft het lampje branden en reageert Windows daadwerkelijk alsof Scroll lock aan is. Nogmaals drukken op Scroll lock werkt zoals verwacht: lampje uit, Windows reageert alsof Scroll lock uit is. Blijkbaar zit er een bugje in de keyboard driver voor dat specifieke toetsenbord, waardoor direct als Windows start het lampje en de toets niet in overeenstemming zijn met elkaar (toets 'uit', lampje aan). Zodra ik op het toetsenbord op Scroll lock druk, gaat in de keyboard driver het vlaggetje voor Scroll lock 'aan' omhoog en doet de driver het Scroll lock lampje aan.
Het lampje wordt dus door de keyboard driver gestuurd, niet door de toets.
Wat is nu de conclusie voor de topicstarter? De KVM-switch hangt tussen het toetsenbord en de keyboard driver. Er is dan ook alleen verkeer van toetsaanslagen van het toetsenbord naar de keyboard driver en van het aan- en uitzetten van lampjes de andere kant op. Het is dus NIET mogelijk om het toetsenbord een commando te sturen dat hij een bepaalde toetsaanslag (via de KVM-switch) naar de keyboard driver moet sturen. Aansturen van de KVM-switch door een toetsaanslag te simuleren is dus fysiek onmogelijk. En dat is ongeacht het besturingssysteem, want het is een hardwarematige beperking van toetsenboarden. Vanuit de keyboard driver een toetsaanslag richting het toetsenboard sturen is ook niet mogelijk. En als het wel mogelijk zou zijn, zou de KVM-switch er waarschijnlijk niet eens op reageren, want hij verwacht alleen signalen vanaf het toetsenbord, niet vanaf de andere kant. Sorry, het is niet anders
[
Voor 6% gewijzigd door
Tomatoman op 18-04-2006 15:07
]
Een goede grap mag vrienden kosten.