看别人帖子时碰到的问题,希望大家帮助解决楼主的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?

解决方案 »

  1.   

    to lws0472(天外飞仙) 不会吧,我这只有一条蓝线,两个句柄的值也是不一样的,我这是win2000+delphi6,朋友那呢?
      

  2.   

    你用FindWindow('TForm1', nil)太不安全了,我肯定你上面用FINDWINDOW找到的并非你需要的窗口,而是另一个窗口。
     我在家里的机器上,在2000和xp下用findwindow都没有问题,你把这个form加个标题,如test111等,再试一下FindWindow('TForm1', 'test111')
      

  3.   

    我在delphi6+win2000(sp3)下测试,两条线都能看见!!
      

  4.   

    FindWindow('TForm1', nil)会找到IDE中的哪个!关掉工程就一样了。
      

  5.   

    handle1 := FindWindow('TForm1', nil);
    我觉得把nil改成你的windows title会更保险点!
      

  6.   

    发了一会儿呆,让大家久等了。
    to lws0472(天外飞仙),lyhold(让你飞) ,标题我加上了,还是只有一条线。
    to lws0472(天外飞仙),我觉得我拿的窗口应该是对的吧,用spy++看这个窗口也是这个句柄啊。
      

  7.   

    to lyhold(让你飞) 
    费了半天劲装上sp3,现在咱哥俩都是delphi6+win2000(sp3),俺还是只能看到一条线,差哪儿呢?
      

  8.   

    你试一下,将Name属性设为TKilllaoli,然后将handle1 := FindWindow('TForm1', nil);
    改为
    Handle1 := FindWindow(ClassName, Caption);Build一下,然后关闭所有Projects,再从命令行或者资源管理器运行这个
    程序试试
      

  9.   

    顺便问一下,刚才我用spy++看你的问题时,找到两个Tform1,其中一个我没见过,里面有个tmemo,并且挂他的应用标题叫'kernel32',他在不停的用wm_gettext从memo中取数据,我怀疑是被人给黑了,我发了个wm_close过去将他给关了,可重启后又有了,不知你有没有见过这个东东
      

  10.   

    to alphax(尽我所知帮助你吧) 
    感谢,按你说的把窗体类名称改了,两条线就都能看到了,当然两个句柄也一样了,呵呵,真是奇妙。alphax(尽我所知帮助你吧) 朋友既然能想到这点,一定知道原因,请指教。(聆听中...)
      

  11.   

    to lws0472(天外飞仙) ,还真如老兄所说,我关闭delphi后,在spy++里仍然找到了3个TForm1。我想这就是原因所在了吧,我用findwindow找到的是其中某一个不知道是什么东东的窗口.............