代码改变世界

Visual C++ 2011-4-17

2011-04-17 22:26  Clingingboy  阅读(424)  评论(0编辑  收藏  举报

 

一.文件查找

1.FindFirstFile

Searches a directory for a file or subdirectory with a name that matches a specific name.
即查找当前目录的子目录或者文件,查找完毕后调用FindClose

WIN32_FIND_DATA FindFileData;
HANDLE hFind;
printf ("Target file is %s.\n", "");
hFind = FindFirstFile(TEXT("D:\\develop\\win*2"), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) 
{
  printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
} else
{
  wprintf (L"The first file found is %s\n", FindFileData.cFileName);
  FindClose(hFind);
}

2.FindNextFile

通过FindNextFile的配合,可以找出一个目录下的所有文件和目录,通过此方法就可以递归找出所有的文件和目录(得到文件时要判断文件是目录还是文件)了

WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(TEXT("D:\\*"), &FindFileData);
bool bResult = false;
int i = 0;

 while(!bResult)
 {
     if (!FindNextFile(hFind, &FindFileData)) 
     {
         bResult = true;
         return;
     }
     wprintf(FindFileData.cFileName);
     i++;
 }

参考:http://hi.baidu.com/%B0%D7%BF%AA%CB%AE%D2%B2%BA%C8%D7%ED/blog/item/e457b9a8502d25f51e17a24e.html

二.钩子的概念

通过外部DLL,对其他的进行进程监听和拦截,在DllMain函数中获取句柄

DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{

    if (dwReason == DLL_PROCESS_ATTACH)
    {
        TRACE0("CHAP16EXA3.DLL Initializing!\n");
pinstance=hInstance;//取得钩子函数的模块句柄
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
}
    return 1;   // ok
}

然后SetWindowsHookEx安装钩子,UnhookWindowsHookEx卸载钩子,钩子必须一个一个的注册,所以要用

CallNextHookEx方法来调用下一个钩子

extern "C" LRESULT CALLBACK MousePro(int code,WPARAM wparam,LPARAM lparam)
{
    if (code<0)//当code<0时,直接返回下一个钩子
        return CallNextHookEx(hhook, code, wparam, lparam);
    if(wparam==WM_LBUTTONDOWN)
        m_LClick++;
    if(wparam==WM_RBUTTONDOWN)
        m_RClick++;
    return CallNextHookEx(hhook, code, wparam,lparam);
}

extern "C" bool WINAPI InstallHook()
{
    hhook=SetWindowsHookEx(WH_MOUSE,MousePro,pinstance,0);//安装钩子
    if(hhook!=NULL)
        return true;
    else
        return false;
}

extern "C" int WINAPI UninstallHook()
{
    return UnhookWindowsHookEx(hhook); //卸载钩子
}