请教postMessage 发送隐藏消息的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/18 10:33:59
客户要求是自动隐藏安装文件,比如自动隐藏安装flashget.. 迅雷等!。自动安装,我可以直接发送N次回车消息就搞定,但隐藏文件的时候,发送一次回车消息.安装界面就又跑出来了,虽然可以用定时器加postMessage定时发送隐藏消息。但会看到安装界面闪了一下。。我就想问下各位大哥有没更好的方法..除了把把界面移动到屏幕外的另外方法.
能解决我问题,积分全送!
1 有些软件我必须安装,根本没打算用文件提取在封装,使用SW_HIDE属性.虽然行,但是postMessage 后,还是会显示界面!
2 keybd_event和mouse_event,这2个消息会移动鼠标,造成用户界面鼠标移动现象,达不到隐藏安装的目的
3 360自动更新补丁,是调用了微软补丁公开的参数 /bg ,
4 采取HOOK隐藏界面的方式,且麻烦,我试了一下,可行性不高.
5 楼下所说方式,都试过,是不行的,用HOOK的方式,将WM_CREATE消息HOOK掉 然后 分发一条隐藏消息,这中间有个很小的时间差,所以不行!

求可解决方案啊,积分全送啊。期待重量级高手的出现,朋友多了路好走....

CreateProcess的时候,可以选择创建方式的,LPSECURITY_ATTRIBUTES lpProcessAttributes这个参数。加上隐藏属性即可。具体的忘了,可以参阅一下资料。

然后Postmessage即可。但是窗口是隐藏的。

------------------------------------------------

那我就告诉你一个绝对可行的办法:

1、首先运行监控软件。然后安装迅雷,在监控软件中监视迅雷的安装程序都是干了什么,比如写了什么注册表,注册了什么服务?往系统目录里写了什么文件?
2、将已经安装好的迅雷的安装目录打包。
3、自己写一个程序,首先将第二步中的包解开,放到你自己想装的目录。然后,模拟第一步中监控到的操作。

事实上,这种方法就是模拟了迅雷的安装过程,不仅界面可以隐藏,而且可以实现你自己想要的界面。

不过,这个方法对于安装未知的软件,是无能为例的。还是建议用上面说的CreateProcess中的隐藏属性解决。POSTMESSAGE不会直接导致画面显示的,一定是有其他原因导致了界面重现。找到它,解决它。

我认为导致画面重现的原因是:由于多数软件的安装程序界面是一个Sheet,而且是向导模式的。当你按下“下一步”的时候,系统会隐藏当前的对话框然后显示下一步的对话框。由于有“显示”操作,因此,会导致界面重现。

因此,还有一种方法:
1、首先进行注入,注入的方法很多,自己可以去查,或者看《核心编程》。
2、挂钩。不要下全局挂钩,下一个局部挂钩即可,挂钩的目标线程是安装软件的界面处理线程。不要挂钩CreateWindow,而是挂钩ShowWindow,如果发现ShowWindow的参数是SW_SHOW,那就改成SW_HIDE,然后再调用NextHook。此种方法绝对可以。

呃。。。其实最保险的办法还是HOOK,但是不要HOOK WM_CREATE,要HOOK HWND CreateWindow()这个函数,HOOK到以后把其中DWORD dwStyle参数设置为隐藏。但是该方法很麻烦,你也说了可行