我通过修改注册的HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
这样每次点右键时,Exeplorer.exe(不是IE)都会自动载入我在注册表中指定的DLL,但是我每点一次右键Exeplorer.exe都会再一次载入我的那个DLL,这样导致我的DLL在Exeplorer中的Usage数量不断的增加,但是我发现WinRar在Exeplorer.exe中的DLL的Usage却总是只有1。不知道Winrar的DLL是怎么写DLL入口点函数的,我怀疑是我在Dll的入口函数中没做什么处理原因,不知道是不是这样,我的DLL的入口函数如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("SHHOOK.DLL 正在初始化!\n");

if (!AfxInitExtensionModule(SHHOOKDLL, hInstance))
return 0; new CDynLinkLibrary(SHHOOKDLL); g_hInstance = hInstance; if( hTimer == NULL )
{
hTimer = CreateWaitableTimer(NULL, TRUE, NULL); LARGE_INTEGER li = { 0 };
SetWaitableTimer(hTimer, &li, 5000, TimerAPCRoutine, NULL, FALSE);
}
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("SHHOOK.DLL 正在终止!\n"); AfxTermExtensionModule(SHHOOKDLL);
}
return 1;   // 确定
}附加问题是我在上面的CreateWaitableTimer的Timer从来都不运行,不知道是怎么回事