怎么在C中使用DLL

zhan1094 zhan1094 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#pragma data_seg("sharehook")
HHOOK sharedata;
#pragma data_seg()

#pragma comment (linker,"/SECTION:sharehook,RWS")

LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam);
void SaveLog(char *n);
HINSTANCE hInce;
HHOOK myhook;

/*DLLIMPORT void ShellHook ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}*/


BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
// sethook();
//sharedata=(HHOOK)SetWindowsHookEx(WH_SHELL,ShellHookProc,hInce,0);
break;

case DLL_PROCESS_DETACH:
//unsethook();
//if( UnhookWindowsHookEx(sharedata))
//sharedata=NULL;
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;
}

/* Returns TRUE on success, FALSE on failure */
return TRUE;
}


DLLIMPORT int sethook()
{

if(myhook=(HHOOK)SetWindowsHookEx(WH_SHELL,ShellHookProc,hInce,0))
{
sharedata=myhook;
return 1;
}
return 0;
}


DLLIMPORT int unsethook()
{
if( UnhookWindowsHookEx(sharedata))
{
myhook=NULL;
return 1;
}
else
return 0;
}


LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(sharedata)
{
if (nCode==HSHELL_WINDOWCREATED)
{
HWND hwm=(HWND)wParam;
char *strName;
strName=(char*)malloc(256);
GetWindowText(hwm,strName,256);
SaveLog(strName);
/*if (strName=="扫雷")
{
GetSafeHwnd(WM_CLOSE,0,0);
}*/
}
}
return CallNextHookEx(myhook,nCode,wParam,lParam ) ;
}


void SaveLog(char *n)
{
//char *name=n;
FILE *log;
struct tm *systime;
time_t t;
t=time(NULL);
systime=localtime(&t);
if((log=fopen("syslog.log","a+"))==NULL)
exit(1);
else
fprintf(log,"open %s at %5d%5d%5d%5d%5d%5d",n,systime->tm_year,systime->tm_mon,systime->tm_mday,systime->tm_hour,systime->tm_min,systime->tm_sec);
fclose(log);
}


这是编译生成DLL的源程序,目的是设置全局的shell钩子
但不知道在其它的程序中怎么用编译连接好的DLL
有哪位可以帮帮我啊!!!!!!!!
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
zhan1094
C语言 70,040 成员 243,237 内容