[VB6/API] Toetsenbord emuleren

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

  • Kuhlie
  • Registratie: December 2002
  • Niet online
Ik heb mbv de MSComm control en een 'home-made' infraroodontvanger mijn oude NetBox-infraroodtoetsenbord aan de gang gekregen. Ik gebruik nu de API:

code:
1
2
3
Private Declare Sub keybd_event Lib "user32.dll" _ 
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

om toetsen te emuleren. Dit werkt best redelijk, behalve dan dat:

* Ctrl+Alt+Delete werkt niet (ik kan niet inloggen in Win2000, maar dat valt nog te overleven)
* ik kan het verschil tussen de linkershift en de rechtershift niet emuleren (zelfde voor alt en ctrl)
* in dosprogramma's werkt het niet (wel in de commandprompt zelf, maar zodra je dan bijv. edit opstart werkt het niet meer)
* directX-spellen werken niet (dat is vervelend)

als ik mijn favoriete remote-control-programma (NetOp Remote Control) gebruik, kan dit alles wel.

Mijn vraag is:
* kan ik (liefst vanuit VB6, maar VC++ is ook OK) ervoor zorgen dat bovenstaande 4 dingen wel werken? Hoe doet NetOp (of elk ander RemoteControl-applicatie) dat?
* zo ja, moet ik dan een keyboarddriver schrijven? Netop heeft geen drivers in Device Manager staan die hierop wijzen.

Opmerking:
NetOp heeft wel een speciale eigen Usergroup (hoewel geen eigen User). Misschien krijgt hij daarmee speciale rechten?

[ Voor 2% gewijzigd door Kuhlie op 08-11-2003 11:15 . Reden: iets leesbaarder gemaakt ]


  • Sheedafi
  • Registratie: Juni 2002
  • Laatst online: 12-12-2024

Sheedafi

..::[::Java::]::..

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Je kunt mss deze is proberen

Ik hoop dat ze werken

Greetz

offtopic:
Ik hem een tijdje trug ook geprobeert van met men infraroodpoort op de laptop data naar men GSM te sturen.
Ik had ergens gelezen dat die poort ook een soort virtuele COM poort was.
Na ff zoeke dacht dat dit COM4 was, maar wanneer ik ze met MScomm wil openen
krijg ik de erro dat de poort al open is.
Heb jij mss raad?

If it jams force it, if it breaks it needed fixing anyway!!


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 21:15

Sponge

Serious Game Developer

DirectX Spellen gebruiken waarschijnlijk DirectInput, die direct op de hardware werkt (naja, dat is het doel van DirectX). Grote kans dat de keyboard "exclusive" is voor DX, en dat je daarom geen toetsen werkend zal krijgen.

Als je toetsen combineert (zoals ctrl-alt), hoe doe je dit? met "+", AND, of OR?

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 22-05 15:35

Tomatoman

Fulltime prutser

Ctrl+Alt+Delete wordt uit veiligheidsoverwegingen door het besturingssysteem afgevangen. Anders zou je namelijk een applicatie kunnen maken die eruit ziet als een inlogscherm en die verschijnt zodra Ctrl+Alt+Delete wordt ingedrukt. Daarmee kun je heel sneaky logingegevens - inclusief wachtwoorden - verzamelen zonder dat iemand het doorheeft.

Een goede grap mag vrienden kosten.


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:56

RayNbow

Kirika <3

Ik zou zeggen, download de source van VNC (een remote control programmaatje zoals NetOp) en bestudeer hoe zij het hebben gedaan.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • Kuhlie
  • Registratie: December 2002
  • Niet online
Sheedafi schreef op 08 november 2003 @ 13:00:
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Je kunt mss deze is proberen
Dat is de andere kant op, namelijk kijken of een toets ingedrukt is. Ik wil toetsen indrukken.
Sheedafi schreef op 08 november 2003 @ 13:00:
offtopic:
maar wanneer ik ze met MScomm wil openen krijg ik de erro dat de poort al open is
offtopic:
Misschien moet je de ingebouwde 'Wireless link' (in mijn Windows XP, Control Panel) helemaal uitzetten, waarschijnlijk luistert die al op die compoort.
tomatoman schreef op 08 november 2003 @ 16:12:
Ctrl+Alt+Delete wordt uit veiligheidsoverwegingen door het besturingssysteem afgevangen. Anders zou je namelijk een applicatie kunnen maken die eruit ziet als een inlogscherm en die verschijnt zodra Ctrl+Alt+Delete wordt ingedrukt. Daarmee kun je heel sneaky logingegevens - inclusief wachtwoorden - verzamelen zonder dat iemand het doorheeft.
Ook dat is de andere kant op. Ik wil geen toetsen ontvangen, maar versturen. NetOp is een programma en kan dat, dus vind ik dat ik dat ook moet kunnen :-)
RayNbow schreef op 09 november 2003 @ 14:10:
Ik zou zeggen, download de source van VNC (een remote control programmaatje zoals NetOp) en bestudeer hoe zij het hebben gedaan.
Goed plan! Jammer dat dat in VC++ is geschreven, dat wordt even pluizen. Overigens werkt Ctrl+Alt+Delete ook niet bij VNC (hoewel de optie 'send Ctrl+Alt+Delete' wel in het menu van de viewer te vinden is...), maar in ieder geval werkt daar het typen in dos-programma's wel. Dat brengt me weer een stapje verder.
Sponge schreef op 08 november 2003 @ 15:35:
DirectX Spellen gebruiken waarschijnlijk DirectInput, die direct op de hardware werkt (naja, dat is het doel van DirectX). Grote kans dat de keyboard "exclusive" is voor DX, en dat je daarom geen toetsen werkend zal krijgen.
Niet helemaal: zowel NetOp als VNC kunnen het wel... overigens merk ik nu dat DirectX-spellen wel werken, behalve de toetsen Shift,Alt,Ctrl (maar dat is logisch: ik kan deze ook niet helemaal goed emuleren omdat ik het verschil tussen de linker- en rechtertoets niet kan aangeven) en de cursortoetsen (heel vervelend).
Sponge schreef op 08 november 2003 @ 15:35:
Als je toetsen combineert (zoals ctrl-alt), hoe doe je dit? met "+", AND, of OR?
Met de API's die ik hierboven heb neergezet gaat dit door eerst een KeyDown-event van de Alt te emuleren, vervolgens de gewenste toets-keydown-event emuleren en dan (in welke volgorde dan ook) de toetsen weer loslaten. Omdat mijn draadloze toetsenbordje precies die signalen in die volgorde stuurt, gaat dit vanzelf goed: mijn programma hoeft ze alleen maar in die API te stoppen.


Bedankt voor jullie reacties, ik ga nu maar eens VNC-source uitpluizen. Als dat lukt ben ik er waarschijnlijk helemaal uit, behalve het Ctrl+Alt+Delete-probleem. Dan maar auto-login ;)
Pagina: 1