问题:ICopyHook在Win7中没有起作用。我的使用:
1.接口继承
class ATL_NO_VTABLE CHookUtil :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CHookUtil, &CLSID_HookUtil>,
public ICopyHook, // ICopyHook interface.2.代码实现
//Unicode Version.
STDMETHODIMP_(UINT) CHookUtil::CopyCallback(HWND hwnd, UINT wFunc, UINT wFlags, LPCWSTR pszSrcFile, DWORD dwSrcAttribs,
                                   LPCWSTR pszDestFile, DWORD dwDestAttribs)
{
::MessageBoxA(NULL, "...............!", "提示信息", MB_OK|MB_ICONINFORMATION); return IDYES;
}
3.注册表HKCR
{
PrinterHooker.HookUtil.1 = s 'HookUtil Class'
{
CLSID = s '{A1D1C568-E1FC-4389-B99D-074A11F3B660}'
}
PrinterHooker.HookUtil = s 'HookUtil Class'
{
CLSID = s '{A1D1C568-E1FC-4389-B99D-074A11F3B660}'
CurVer = s 'PrinterHooker.HookUtil.1'
}
NoRemove CLSID
{
ForceRemove {A1D1C568-E1FC-4389-B99D-074A11F3B660} = s 'HookUtil Class'
{
ProgID = s 'PrinterHooker.HookUtil.1'
VersionIndependentProgID = s 'PrinterHooker.HookUtil'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{8BA322D3-2632-4124-A1FF-C0E60B4B4656}'
}
}

Printers
{
ShellEx
{
CopyHookHandlers
{
PrinterHooker = s '{A1D1C568-E1FC-4389-B99D-074A11F3B660}'
}
}
}

}HKLM
{
NoRemove Software
{
NoRemove Microsoft
{
NoRemove Windows
{
NoRemove CurrentVersion
{
NoRemove 'Shell Extensions'
{
NoRemove Approved
{
val '{A1D1C568-E1FC-4389-B99D-074A11F3B660}' = s 'PrinterHooker'
}
}
}
}
}
}
}

解决方案 »

  1.   

    程序在Xp下运行很正常,在Win7中程序没有被加载,不知道如何修改。请高手赐教。
      

  2.   

    我监控的打印机名称修改事件。和IE怎么会有关系呢。
    另外如果是XP系统,在IE6、7、8环境下都运行正常。
      

  3.   

    如何在WIN7中加载我的ICopyHook接口呢。
      

  4.   

    那你自己看看
    HKLM这段注册表到底写进去没有咯看看是不是组件没注册成功
      

  5.   

    控件的注册我使用的管理员权限运行的cmd和regsvr32,所以可以写注册表的。都成功了。PS:WIN7系统是刚安装的。没有安装其他任何软件。是空系统。
      

  6.   

    我感觉可能是WIN7中对于这些插件的加载机制可能变了,有谁了解内情,给解释一下吧。
      

  7.   

    以前写的插件都蛮顺利就加载了
    莫非 ICopyHook 有特别接口要实现?
      

  8.   

    那你能不能把你的步骤说一下。我参考下。或者把你的最简单的DLL给我一个,我在WIN7下测试下。
      

  9.   

    win7 和xp 不同,前者操作组册表是需要权限的,先看下组册表操作是否成功。
      

  10.   

    Previously we've encountered many app compatibility problems regarding this 
    interface, therefore it's currently disabled by default on Vista with a 
    policy control:You can turn it on by enabling POLID_EnableShellExecuteHooks. Set this 
    under 
    [HKLM|HKCU]\Softwaren\Microsoft\Windows\CurrentVersion\Policies\Explorer 
    EnableShellExecuteHooks=<DWORD>1. http://www.codeguru.com/forum/showthread.php?t=485132
      

  11.   

    试了下,还是不可以。这个是控制的IShellExecuteHook这个接口的HOOK吧,ICopyHook也受这个控制码?
      

  12.   

    我知道原因了,WIN7中使用打印机属性中修改的名称,所以没有经过Explorer的HOOK,所以就没有捕获到,那怎么可以捕获到用户在打印机属性窗口修改打印机名称的操作呢。
      

  13.   

    已经证实此问题和WIN7没有关系:“用户按F2修改名称”的方式会走系统HOOK,所以可以控制住。
    “用户在右键属性对话框中修改打印机名称”的方式没有走系统的HOOK,所以没有控制住。高手支招啊。