首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi2007编译服务引发WIN+E快捷键失效等一系列有关问题

2012-03-03 
Delphi2007编译服务引发WIN+E快捷键失效等一系列问题这里啰嗦了几点,文字比较多,只是想尽力把问题描述清楚

Delphi2007编译服务引发WIN+E快捷键失效等一系列问题
这里啰嗦了几点,文字比较多,只是想尽力把问题描述清楚,以备后用。临时码的子,没有校对,有不清楚的地方请提出。

一、问题的发现:
  自己做的程序,突然接收不到WM_DEVICECHANGE消息,很是纳闷……最近都没有新安装软件,左思右想,前两天自己写了个svchost.exe调用的服务。索性将服务停止,程序能正常接受WM_DEVICECHANGE消息了。

  庆幸的是自己写了的这么一个服务,要不然,还不知道什么时候才能发现问题所在-_-!!!
  【注1】 关于消息问题在这里有记载:获取USB设备插拔消息的备忘
  【注2】 还导致WIN+E等快捷键失效,按了WIN+E之后,任务栏停止响应,必须停止服务后,系统才响应WIN+E打开资源管理器

二、找出元凶
  因为新鲜,以前也玩过svchost.exe调用的服务,但是也没有发现类似的问题。不知哪来的灵光一闪,用Delphi7.0编译,测试一切正常。
  再次用Delphi2007编译,问题依旧。

三、罪魁祸首
  发现这个问题有好些天,在心里一直放不下,陆陆续续几乎每天都要调试一下。
  首先是怀疑自己新添加的代码有问题,将代码一行一行注释、删除,问题依旧存在。
  无奈,只有将uses的单元一个一个去除,最终发现,问题出在Controls单元,如果将uses的Controls单元取消,系统一切正常。

四、结论
  使用Delphi2007编译,而且引用了Controls单元,将引发WIN+E快捷键失效等一系列问

五、进一步研究
  经过哈欠点拨:“你用工具查看一下它载入的DLL们....同D7比较一下”。果然,Delphi2007编译出的dll多载入了两项进程。
  (c:\windows\system32\msctfime.ime、c:\windows\system32\apphelp.dll)
  查看步骤:
  1、启动服务
  2、到DOS提示符状态,运行tasklist.exe /svc,查看服务名称为ServiceDll的进程ID
  3、运行工具查看该进程载入的dll(我这里用的是老妖的Spy4Win->附加工具->进程管理)
   
六、服务程序说明
  该服务框架从网上下载,考虑到方便安装和卸载,加入了DllRegisterServer,DllUnregisterServer两个函数,
  安装服务:regsvr32.exe ServiceDll.dll 
  卸载服务:regsvr32.exe ServiceDll.dll
  【注3】安装之后,应手动运行服务;卸载之前,应手动停止服务。

七、源程序
  因为上传附件失败,这里直接贴出源程序。


[解决办法]
试一下把所有wincontrol继承下来的类的实例的ImeMode都置为imDisable.
[解决办法]
高科技啊,,,
[解决办法]

探讨


但是用Delphi2007创建的非svchost调用的服务没有问题。

[解决办法]
可能出问题的大概是三个方向:
1. IME(输入法),这个在D6/D7都有,应该可能性最小;
2. Desktop Window Manager(DWMAPI.dll)这个只有VISTA以上系统才有,所以也不可能会是问题;
3. Theme,这个出现问题的可能性最大。建议试着[关闭]/[打开]windows的Theme服务,试一下会不会有所改善。
[解决办法]
高科技啊,,,
[解决办法]
我直接使用Delphi 2007编译的,并不会加载那两个文件。
[解决办法]
我这里还是不会加载,我这里只加载下面这几个模块:
BatchFile code
ADVAPI32.dll    Advanced Windows 32 Base API    Microsoft Corporation    5.02.3790.3959comctl32.dll    Common Controls Library    Microsoft Corporation    5.82.3790.3959ctype.nls            GDI32.dll    GDI Client DLL    Microsoft Corporation    5.02.3790.4237IMM32.DLL    Windows IMM32 API Client DLL    Microsoft Corporation    5.02.3790.3959kernel32.dll    Windows NT BASE API Client DLL    Microsoft Corporation    5.02.3790.4062locale.nls            LPK.DLL    Language Pack    Microsoft Corporation    5.02.3790.3959msvcrt.dll    Windows NT CRT DLL    Microsoft Corporation    7.00.3790.3959ntdll.dll    NT Layer DLL    Microsoft Corporation    5.02.3790.3959ole32.dll    Microsoft OLE for Windows    Microsoft Corporation    5.02.3790.3959oleaut32.dll        Microsoft Corporation    5.02.3790.4202RPCRT4.dll    Remote Procedure Call Runtime    Microsoft Corporation    5.02.3790.4115Secur32.dll    Security Support Provider Interface    Microsoft Corporation    5.02.3790.3959servicedll.dll            sortkey.nls            sorttbls.nls            svchost.exe    Generic Host Process for Win32 Services    Microsoft Corporation    5.02.3790.3959unicode.nls            USER32.dll    Windows USER API Client DLL    Microsoft Corporation    5.02.3790.4033USP10.dll    Uniscribe Unicode script processor    Microsoft Corporation    1.422.3790.3959version.dll    Version Checking and File Installation Libraries    Microsoft Corporation    5.02.3790.3959 


[解决办法]

BatchFile code
主机名:           ***OS 名称:          Microsoft(R) Windows(R) Server 2003, Enterprise EditionOS 版本:          5.2.3790 Service Pack 2 Build 3790OS 制造商:        Microsoft CorporationOS 配置:          独立服务器OS 构件类型:      Multiprocessor Free注册的所有人:     ***注册的组织:       ***产品 ID:          69713-640-4203633-45978初始安装日期:     2008-8-17, 22:01:04系统启动时间:     0 天 0 小时 34 分 31 秒系统制造商:       Dell Inc.系统型号:         Latitude D630                   系统类型:         X86-based PC处理器:           安装了 2 个处理器。                  [01]: x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1994 Mhz                  [02]: x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1994 MhzBIOS 版本:        DELL   - 27d8071cWindows 目录:     C:\WINDOWS系统目录:         C:\WINDOWS\system32启动设备:         \Device\HarddiskVolume1系统区域设置:     zh-cn;中文(中国)输入法区域设置:   zh-cn;中文(中国)时区:             (GMT+08:00) 北京,重庆,香港特别行政区,乌鲁木齐物理内存总量:     2,038 MB可用的物理内存:   1,122 MB页面文件: 最大值: 1,891 MB页面文件: 可用:   1,168 MB页面文件: 使用中: 723 MB页面文件位置:     暂缺域:               WORKGROUP登录服务器:       ***修补程序:         安装了 118 个修补程序。网卡:             安装了 4 个 NIC。
[解决办法]
嗯,的确很罗嗦,来围观一下。
[解决办法]
那就是大傻rp问题了。
[解决办法]
Mark一下。
[解决办法]
如果你的服务里的工作跟当前桌面没有关系的话,可以试着将其切换到其它桌面,maybe可以解决这个冲突的问题

[解决办法]
P.S. 当初这个代码是用来作坏事的,没有想到,居然还能有人拿来作好事,咔咔.

[解决办法]
很深,很难懂
[解决办法]
看熱鬧!
[解决办法]
下班了,mark一下吧.
[解决办法]
留个记号
[解决办法]
hoho~~~~~~~
[解决办法]
我好笨啊,都看不懂,先回复一下好了,慢慢学习

PS: 
我的目标是 ---->

^_^

[解决办法]
好多星星。。。。。
[解决办法]
看热闹,顺便学习下》》》》》》》》》》》
[解决办法]
太强悍
[解决办法]
好。。。。。。。。。。。。
[解决办法]
因为新鲜,以前也玩过svchost.exe调用的服务
这是作什么的?
[解决办法]
搬个板凳听讲。

热点排行