ICopyHook在Win7中使用问题

fengrx 2011-01-25 11:02:58
问题: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'
}
}
}
}
}
}
}
...全文
275 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengrx 2011-01-26
  • 打赏
  • 举报
回复
我知道原因了,WIN7中使用打印机属性中修改的名称,所以没有经过Explorer的HOOK,所以就没有捕获到,那怎么可以捕获到用户在打印机属性窗口修改打印机名称的操作呢。
fengrx 2011-01-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 oyljerry 的回复:]
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 enablin……
[/Quote]


试了下,还是不可以。

这个是控制的IShellExecuteHook这个接口的HOOK吧,ICopyHook也受这个控制码?
fengrx 2011-01-26
  • 打赏
  • 举报
回复
已经证实此问题和WIN7没有关系:

“用户按F2修改名称”的方式会走系统HOOK,所以可以控制住。
“用户在右键属性对话框中修改打印机名称”的方式没有走系统的HOOK,所以没有控制住。

高手支招啊。
covsno 2011-01-25
  • 打赏
  • 举报
回复
以前写的插件都蛮顺利就加载了
莫非 ICopyHook 有特别接口要实现?
fengrx 2011-01-25
  • 打赏
  • 举报
回复
我感觉可能是WIN7中对于这些插件的加载机制可能变了,有谁了解内情,给解释一下吧。
fengrx 2011-01-25
  • 打赏
  • 举报
回复
控件的注册我使用的管理员权限运行的cmd和regsvr32,所以可以写注册表的。都成功了。

PS:WIN7系统是刚安装的。没有安装其他任何软件。是空系统。
fengrx 2011-01-25
  • 打赏
  • 举报
回复
组件注册成功了。

注册表每一项我都对过了。都写入了。
covsno 2011-01-25
  • 打赏
  • 举报
回复
那你自己看看
HKLM这段注册表到底写进去没有咯

看看是不是组件没注册成功
fengrx 2011-01-25
  • 打赏
  • 举报
回复
如何在WIN7中加载我的ICopyHook接口呢。

fengrx 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 covsno 的回复:]
这个是不是和IE版本有关系啊
[/Quote]


我监控的打印机名称修改事件。

和IE怎么会有关系呢。
另外如果是XP系统,在IE6、7、8环境下都运行正常。
covsno 2011-01-25
  • 打赏
  • 举报
回复
这个是不是和IE版本有关系啊
fengrx 2011-01-25
  • 打赏
  • 举报
回复
高手在哪里啊???????
fengrx 2011-01-25
  • 打赏
  • 举报
回复
程序在Xp下运行很正常,在Win7中程序没有被加载,不知道如何修改。请高手赐教。
oyljerry 2011-01-25
  • 打赏
  • 举报
回复
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
欣客 2011-01-25
  • 打赏
  • 举报
回复
win7 和xp 不同,前者操作组册表是需要权限的,先看下组册表操作是否成功。
TandyT 2011-01-25
  • 打赏
  • 举报
回复
没弄过这个,帮楼主顶起来
fengrx 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 covsno 的回复:]
以前写的插件都蛮顺利就加载了
莫非 ICopyHook 有特别接口要实现?
[/Quote]


那你能不能把你的步骤说一下。我参考下。

或者把你的最简单的DLL给我一个,我在WIN7下测试下。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧