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
Esim. GetAsyncKeyState-funktiolla voit tarkkailla näppäinten [ja myös mm. hiiren] painamisia ihan globaalisti. Ks. lisää MSDN:stä.
Kiitos vastauksestasi. Ongelmani ratkesi kertaheitolla =)
Aihe on jo aika vanha, joten et voi enää vastata siihen.