代码之家  ›  专栏  ›  技术社区  ›  Dr Deo

为什么这个函数会失败?

  •  1
  • Dr Deo  · 技术社区  · 14 年前

    我试图通过编写一些键盘挂钩来理解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 回复  |  直到 13 年前
        1
  •  4
  •   dreamlax    14 年前

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

    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;
    }