为什么这个功能失败了?

时间:2010-08-05 03:52:32

标签: c hook keyboard-hook

我试图通过编写一些键盘钩来理解Windows钩子。 我有一个功能:

bool WriteToFile(WPARAM keyCode, char * fileName)
{
    ofstream fout("filename");
    if(fout.is_open())
    {
        if(keyCode>=0x030 && keyCode<0x039)
            fout<< (keyCode - 0x030);
            fout.close();
        return true;
    }
    else        fout.close();
        return false;
}

...我试着从这里打电话,但几乎总是失败。为什么呢?

LRESULT CALLBACK KbHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode > 0)
             {
                 WriteToFile(wParam,"log.txt");  //this function always fails . Why 
             }
else return CallNextHookEx(hCurrentHook, nCode, wParam, lParam);
}

1 个答案:

答案 0 :(得分:4)

我认为这是因为你试图打开一个名为“filename”的文件,而不是使用提供的任何文件名。我假设你正在写一个键盘记录器。它应该是:

bool WriteToFile(WPARAM keyCode, char * fileName)
{
    // cause output to go to the end of the file by using ios_base::app
    ofstream fout(fileName, ios_base::app);
    if(fout.is_open())
    {
        if(keyCode>=0x030 && keyCode<0x039)
            fout<< (keyCode - 0x030);
            fout.close();
        return true;
    }
    else        fout.close();
        return false;
}