看别人帖子时碰到的问题,希望大家帮助解决楼主的findwindow那个问题确实很有趣,我把这两个窗口列出来比了一下,还真是不一样,通过findwindow拿到的那个是不变的,也跟用spy++查看的相同,而form1.handle拿到的每次都变,还有就是如果用findwindow拿到的句柄操作的话,好象是不好使的。举例来说。
procedure TForm1.Button1Click(Sender: TObject);
var
handle1, handle2: HWND;
dc1, dc2: HDC;
pen1, pen2, oldpen: HPEN;
begin
handle1 := FindWindow('TForm1', nil);
handle2 := form1.Handle;
Edit1.Text := inttostr(handle1);
Edit2.Text := inttostr(handle2); try
dc2 := GetDC(handle2);
pen2 := CreatePen(PS_SOLID, 1, clBlue);
oldpen := SelectObject(dc2, pen2);
Lineto(dc2, 600, 300);
finally
ReleaseDC(handle2, dc2);
Selectobject(dc2, oldpen);
end; try
dc1 := GetDC(handle1);
pen1 := CreatePen(PS_SOLID, 1, clRed);
oldpen := SelectObject(dc1, pen1);
Lineto(dc1, 300, 600);
finally
ReleaseDC(handle1, dc1);
Selectobject(dc1, oldpen);
end;
end;
执行的结果只能看到那条蓝线,why?
procedure TForm1.Button1Click(Sender: TObject);
var
handle1, handle2: HWND;
dc1, dc2: HDC;
pen1, pen2, oldpen: HPEN;
begin
handle1 := FindWindow('TForm1', nil);
handle2 := form1.Handle;
Edit1.Text := inttostr(handle1);
Edit2.Text := inttostr(handle2); try
dc2 := GetDC(handle2);
pen2 := CreatePen(PS_SOLID, 1, clBlue);
oldpen := SelectObject(dc2, pen2);
Lineto(dc2, 600, 300);
finally
ReleaseDC(handle2, dc2);
Selectobject(dc2, oldpen);
end; try
dc1 := GetDC(handle1);
pen1 := CreatePen(PS_SOLID, 1, clRed);
oldpen := SelectObject(dc1, pen1);
Lineto(dc1, 300, 600);
finally
ReleaseDC(handle1, dc1);
Selectobject(dc1, oldpen);
end;
end;
执行的结果只能看到那条蓝线,why?
解决方案 »
- 查找进程中被申请的空间地址
- 从网站获取的图片缺无法显示?代码如下!
- 这个一般的SQL 查询写成存储过程如何写?
- 对combobx如何实现如"帮助文件中索引"的形式
- 过程中的参数是数组,应该怎么写?
- 除了Delphi,我想再学一门语言,大家给我个意见,我真不知道学什么好呢!欢迎大家讨论哦
- 如何创建一个在用户退出之后还能运行的应用程序?
- 请问如何把一个是数据结构的变量存入数据库啊,内详!
- 哪儿有好的杀毒软件下载(win2000server)
- 利用CachedUpdates功能和TUpdateSQL组件来更新多个数据表产生的查询结果出错!??
- 各位大侠请问DELPHI里的反正弦函数是什么
- 如何根据字体来确定label的长度?(100分)
我在家里的机器上,在2000和xp下用findwindow都没有问题,你把这个form加个标题,如test111等,再试一下FindWindow('TForm1', 'test111')
我觉得把nil改成你的windows title会更保险点!
to lws0472(天外飞仙),lyhold(让你飞) ,标题我加上了,还是只有一条线。
to lws0472(天外飞仙),我觉得我拿的窗口应该是对的吧,用spy++看这个窗口也是这个句柄啊。
费了半天劲装上sp3,现在咱哥俩都是delphi6+win2000(sp3),俺还是只能看到一条线,差哪儿呢?
改为
Handle1 := FindWindow(ClassName, Caption);Build一下,然后关闭所有Projects,再从命令行或者资源管理器运行这个
程序试试
感谢,按你说的把窗体类名称改了,两条线就都能看到了,当然两个句柄也一样了,呵呵,真是奇妙。alphax(尽我所知帮助你吧) 朋友既然能想到这点,一定知道原因,请指教。(聆听中...)