Emulator klawiatury

dział ogólny

Emulator klawiatury

Nowy postprzez Corvis » piÄ…tek, 10 lipca 2009, 11:06

Witam,

Mam takie pytanie :

Jak napisać program który po naciśnięciu przycisku zachowa się tak jak bym nacisnął przycisk jakiś na klawiaturze dajmy na to 'a'

Pozdrawiam i dzięki za podpowiedzi
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Emulator klawiatury

Nowy postprzez Witold » piÄ…tek, 10 lipca 2009, 11:53

Właśnie piszę coś w tym rodzaju i używam: keybd_event.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Emulator klawiatury

Nowy postprzez Corvis » piÄ…tek, 10 lipca 2009, 12:00

działa :) dzięki wielkie
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Emulator klawiatury

Nowy postprzez Cyfrowy Baron » piÄ…tek, 10 lipca 2009, 12:05

Jak napisać program który po naciśnięciu przycisku zachowa się tak jak bym nacisnął przycisk jakiś na klawiaturze dajmy na to 'a'


po naciśnięciu jakiego przycisku? Bo jeżeli chodzi o Button, to zależy jeszcze co ma zrobić z tym 'a', gdzie je wysłać.

Jeżeli na ekranie monitora widzisz tylko pusty pulpit z ikonami i naciśniesz na klawiaturze 'a', to nic się nie wydarzy, chyba, że masz na pulpicie jakiś skrót którego nazwa zaczyna się na 'a' wtedy taki skrót zostanie zaznaczony. Jeżeli natomiast będziesz widział na ekranie np. Notatnik i to okno notatnika będzie aktywne i wciśniesz na klawiaturze 'a' to taka litera zostanie wpisana do okna notatnika.

Cała rzecz polega na tym, że wciskając na klawiaturze przyciski, klawiatura wysyła do systemu komunikaty, które on przechwytuje i wysyła je gdzie trzeba - system tym zarządza.

Jeżeli chcesz wysłać do innego programu komunikat o np. symulowanym wciśnięciu litery 'a', to po pierwsze musisz pobrać uchwyt do okna tego programu, potem zdecydować jakiego rodzaju to ma być komunikat, gdyż wciśnięcie 'a' wcale nie musi oznaczać napisani tej litery, może to być przecież element klawisza skrótu, dlatego trzeba ustalić jaki to ma być rodzaj komunikatu. Kolejną rzeczą to trzeba ustalić, gdzie dokładnie ten komunikat ma dotrzeć, czy do okna programu, a może tylko do belki tytułowej programu, a może do jakiegoś obiektu w oknie programu. Gdy już będziesz to wiedział, wtedy wysyłasz odpowiedni komunikat do okna programu, a przeczytasz o tym w serwisie Cyfrowy Baron w dziale: teoria -> Sterowanie obcym programem z poziomu własnego poprzez wysyłanie komunikatów.

Inny mniej skuteczny sposób, ale dużo prostszy i w pewnych sytuacjach praktyczniejszy to posłużenie się funkcją:

VOID keybd_event(BYTE bVk,
BYTE bScan,
DWORD dwFlags,
PTR dwExtraInfo
);




i prosty przykład:

Kod: Zaznacz cały
#include <windows.h>

   void SetNumLock( BOOL bState )
   {
      BYTE keyState[256];

      GetKeyboardState((LPBYTE)&keyState);
      if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
          (!bState && (keyState[VK_NUMLOCK] & 1)) )
      {
      // Simulate a key press
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );

      // Simulate a key release
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
      }
   }

   void main()
   {
      SetNumLock( TRUE );
   }


po więcej zajrzyj do pliku pomocy.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Emulator klawiatury

Nowy postprzez Corvis » piÄ…tek, 10 lipca 2009, 12:44

Chodziło mi że mam sobie program prosty z 2 przyciskami i po naciśnięciu przycisku emuluje sobie w systemie naciśnięcie np A

to zdarzenie łapie inny program i coś robi :)


dzięki wielkie za odpowiedzi
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości