Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Näppäimistö

Argus [07.03.2004 10:16:17]

#

Miten onnistuu laittaa ohjelmani taustalle tarkkailemaan näppäimistön painalluksia, jos jokin ohjelma painaa numlock näppäintä? Voin esimerkiksi käyttää wordia ja kun wordissa painan numlockia, niin teen jonkinlaisen macron käyttäjälle.

Olen pähkäillyt asian parissa kaksi päivää ja ratkaisua ei löydy. Ohjelmalle käyttäjä antaa koordinaatit ja sitten painamalla nappia se menisi taustalle ajoon ja tarkkailisi näppäimistöä.. Kun numlockia painettaisiin se tekisi, jotain ja jatkaisi tarkkailua.

Jos ei suoraa koodia löydy, niin mistä löytyisi apua...

Tälläisen olen saanut väkerrettyä, joka ei tosin mene taustalle ajoon eikä kyllä muutenkaan toimi =)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HANDLE       hInput;
    DWORD        Events = 0;
    INPUT_RECORD InputRecord;
    hInput = GetStdHandle(STD_INPUT_HANDLE);
    int bKeyDown = 0;

    bKeyDown = InputRecord.Event.KeyEvent.bKeyDown;


  while(1){

  ReadConsoleInput(hInput, &InputRecord, 1, &Events);

  if(InputRecord.EventType == KEY_EVENT && bKeyDown){
    if(InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_NUMLOCK)  {

        int xb = Xcoord(); // Gets the coordinant of the mouse
        int yb = Ycoord(); // from where the user clicked the button.

        SetCursorPos(xcoord,ycoord); //Sets cursor to stored coord.
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
       // keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
        SetCursorPos(xb,yb); // Sets the mouse back to where they
                             // clicked the button.
      }

    }
   if( InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_NUMLOCK ){
   return(0);
   }

}//while
}//void

thefox [07.03.2004 11:49:40]

#

Esim. GetAsyncKeyState-funktiolla voit tarkkailla näppäinten [ja myös mm. hiiren] painamisia ihan globaalisti. Ks. lisää MSDN:stä.

Argus [07.03.2004 16:42:09]

#

Kiitos vastauksestasi. Ongelmani ratkesi kertaheitolla =)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta