一.文件查找
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); //卸载钩子
}