有没有可能不调用CreateWindow而能够创建窗体的?
最近在研究miranda IM的代码(纯Win32写的),发现无论如何找不到创建主窗体的语句,也找不到对应的对话框资源,非常奇怪,发现该代码总是在注册Wnd之后调用一个叫CallService的函数,跟进去之后发现也没有CreateWindow
另外发现代码中Hook的使用非常多,请问有没有不用CreateWindow而,只用hook创建窗体的方式?
欢迎共同学习,msn:zo1_zyy@hotmail.com
[解决办法]
没有吧
[解决办法]
是不是插件窗体?
可以创建一个插件窗体,编译成Dll文件,然后通过插件主程序调用。
[解决办法]
那个不是窗口,activex控件?
[解决办法]
up, studying...
[解决办法]
还有这么多函数呢
CreateWindowEx
DialogBox
DialogBoxParam
DialogBoxIndirect
DialogBoxIndirectParam
[解决办法]
user32.dll中转出了API函数CreateWindow, CreateWindowEx , etc.
通过LoadLibrary.dll加载user32.dll得到模块hModule,然后用GetProcAddress(hModule, "CreateWindow ")得到API函数地址,最后调用它!
[解决办法]
也可以自己画个矩形当窗体用滴,如果不怕效率差和麻烦的话
[解决办法]
这样还是一样使用 CreateWindow。
你的程序里面搜索就没有 CreateWindow相关字样吗?
[解决办法]
DialogBox
DialogBoxParam
DialogBoxIndirect
DialogBoxIndirectParam
[解决办法]
我看看源码? 哪里有?q
[解决办法]
你有没有看代码啊,程序一开始就CreateWindowEx创建空的主窗口,然后创建窗口,再创建List窗口。连续用了三个,你怎么说没用呢?
[解决办法]
不可能不调用createwindow的,就算是dialogbox也要调用的。用调试器下端点看看就知道了。
好像菜单也得调用createwindow。
[解决办法]
刚下载了一个看了看,miranda.c的LoadSystemModule()函数里就有啊:
hAPCWindow=CreateWindowEx(0,_T( "STATIC "),NULL,0, 0,0,0,0, NULL,NULL,NULL,NULL); // lame
其它还有几个文件里也有。
[解决办法]
插件窗口也只是把创建窗口的api移到了插件的实现中去了,最终都还是要有的。
其实有个好办法,如果那个代码可以编译通过,你用WindDBG调试一下就知道在哪里了,这支断点在CreateWindowEx和CreateWindow上就可以了。
[解决办法]
高
[解决办法]
有些意思