• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

怎么利用wm_creat来获得其他程序新产生窗口的句柄??

skylove 2001-07-27 12:05:10
今天查到了原来还有个wm_creat函数,可惜不知道该怎么用它。。。
有谁可以告诉我,该怎么用它做出一个dll,然后可以当windows系统中产生一个新窗口(或者是我指定的某个程序新产生了一个窗口时),获得该窗口的句柄么?谢谢!

分数全部奉上,186分。。但是要求写出程序来
...全文
73 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
skylove 2001-08-07
新消息,电子书又新做了chm版本的,最近病毒流行,所以下载exe大家还是有点恐惧吧。。。
http://myhome.humen.com/meetbeauty/meetbeauty.chm 200多k
本书的exe版本已经被《e类出版物》收录。。。可以去看看哦。。。
回复
skylove 2001-08-05
啦啦啦。。。这个问题暂时休息。。。
http://myhome.humen.com/meetbeauty/meetbeauty.exe 来这里看我做的电子书吧。。。是情感散文类的。。。529k,用瑞星12.35杀毒了的,绝对精彩哦!!
回复
prometheusphinx 2001-08-03
做一个ShellProc的Hook,下面给一小段代码,

function ShellProcHookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
if iCode = HSHELL_WINDOWCREATED then
begin
//wParam 就是被创建窗口的句柄。
end;
end;
回复
BigBen 2001-08-03
为什么不自己搜索一下。打字很费力的。再说,写dll和钩子是常用的手段,非得学习的。
回复
trainbox 2001-07-31
UP
回复
skylove 2001-07-31
顶一顶~不好意思。。。各位
回复
skylove 2001-07-28
补充一句,可以留下oicq么??我的oicq是354887,请联系,谢谢~!
回复
BigBen 2001-07-27
消息拦截,hook。请看问题:
http://www.csdn.net/expert/topic/115/115353.shtm
回复
skylove 2001-07-27
library cmphk;
uses
windows, messages, dialogs;//我喜欢用showmessage来测试
var
hookhandler:hhook;
ah:hwnd;//ah 是dll中的全程变量


这是钩子函数:
function hookhandler(iCode:integer;wParam,lParam:longint):longint;stdcall;
begin
if iCode <0 then
hookhandler:=callnexthookex(hkhnadle,icode,wparam,lparam);

if iCode \>=0 then
if PCWPSTRUCT(lParam)^.message=WM_CREATE then
if PCREATESTRUCT(CWPSTRUCT(lParam)^.lparam)^.lpszName='test1' then
begin
ah:=CWPSTRUCT(lParam)^.hwnd;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 这里的ah当然是个在这个dll中定义的hwnd类型,我测试过,在这里得到了
//窗口的句柄。
//但是,但是好象不能正确的传递出dll。为什么?
// 该如何做?
我的程序不是很复杂,除了在这里被赋值外,别的地方只是读.不信你自己可以试试,比如:
 showmessage(inttostr(ah));你可以看到得到的hwnd的值,然后,在主程序(就是调用这个dll的程序)中用showmessage(inttostr(findwindow(nil,'test1'))),两个值绝对是一样的.
 好了,在这个dll中另一个函数取这个dll中的全程变量ah.见function gethandle.

·
·
·

end;

function gethandle:hwnd;stdcall;
begin
if ah<>0 then result:=ah
else result:=-1; //这个函数总是得到结果-1,是什么问题?
(其实hwnd这么赋值没什么问题的。系统会把它解释成一个很大的数....)
在主程序中,我们发现ah根本就没有返回先前得到的hwnd,事实上,ah的值是0

谢谢您的回答。。。但是我看起来还是有点吃力,因为我是刚从vb转过来学delphi的,可以话,您可以打出一个完整的dll和调用它的方法么??
恩。。我们以oicq为例子,想每当它产生“发送消息”这个窗口的时候,我们获取,行么??

对不起,我真的看了很久,自己也试了几次了,依旧连运行都通不过。。。看在186分不少的面子上,请再帮帮我这个菜鸟吧。。。
btw,有空来我主页玩,www.meetbeauty.het
再次谢谢您!!
回复
发帖
Delphi
创建于2007-08-02

4871

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2001-07-27 12:05
社区公告
暂无公告