初次接觸DLL和HOOK,從網上復制別人的代碼想試試,DllMain似乎沒有運行但找不到問題在哪,求指教
DLL專案中的notepadbook.cpp:
#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define DLL_EXPORT extern "C" __declspec(dllexport)
HHOOK hooker;
HWND notepadhandle;
BOOL handled;
extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam);
char* ConvertInttoChar(int i);
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){
printf("Notepad Not Found.\n");
if(ul_reason_for_call==DLL_PROCESS_ATTACH){
handled=FALSE;
notepadhandle=FindWindow("Notepad",NULL);
if(notepadhandle==NULL){
printf("Notepad Not Found.\n");
return TRUE;
}
hooker=SetWindowsHookEx(WH_GETMESSAGE,HookProc,(HINSTANCE)hModule,GetWindowThreadProcessId(notepadhandle,NULL));
if(hooker){
printf("Hook Successfully.\nHookID:%d\n",hooker);
}
else{
printf("Hook Failed.\nError:%d\n",GetLastError());
return TRUE;
}
PostMessage(notepadhandle,WM_CLOSE,0,0);
}
return TRUE;
}
extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam){
if(nCode<0)
return CallNextHookEx(hooker,nCode,wParam,lParam);
tagMSG* msg;
msg=(tagMSG*)lParam;
if(nCode==HC_ACTION && (msg->message==WM_CLOSE)){
if(handled==FALSE)
handled=TRUE;
UnhookWindowsHookEx(hooker);
msg->message=WM_NULL;
return CallNextHookEx(hooker,nCode,wParam,(LPARAM)msg);
}
return CallNextHookEx(hooker,nCode,wParam,lParam);
}
hook專案中的hook.cpp:
#include <stdio.h>
#include <windows.h>
int main(){
LoadLibrary("C:\\notepadbook.dll");
DWORD a = GetLastError();
printf("%d",a);
getchar();//這里getchar是為了防止程式退出,若程式過快退出,鉤子可能沒有效果
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/72224.html
標籤:進程/線程/DLL
上一篇:MFC訊息回圈
