看别人帖子时碰到的问题,希望大家帮助解决楼主的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?
我在家里的机器上,在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(尽我所知帮助你吧) 朋友既然能想到这点,一定知道原因,请指教。(聆听中...)