16,548
社区成员




hwnd = FindWindowByPart("演示");//挂钩子时先通过这个方法得到当前窗口句柄
g_hWriteHook = ::SetWindowsHookEx( WH_CALLWNDPROC , CallWndProc ,(HINSTANCE)g_hInst, GetWindowThreadProcessId(hwnd,NULL));//然后根据窗口句柄返回的线程号挂上线程钩子
BOOL _stdcall Replace_WriteFile( //替换系统的Writefile
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/O
)
{
BOOL res = NULL; //操作成功完成返回非零值
__try
{
if(hFile == g_hFile) //g_hFile是程序中得到的演示.doc的句柄
{
::MessageBox(NULL,"截获保存","成功",NULL);
}
else
{
res=Real_WriteFile( hFile,
lpBuffer,
nNumberOfBytesToWrite,
lpNumberOfBytesWritten,
lpOverlapped );
}
}
__finally
{};
return res;
}