无法关闭DLL创建的窗体(50分)

  • 主题发起人 主题发起人 dwxm
  • 开始时间 开始时间
D

dwxm

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DLL创建了一个窗体,当窗体隐藏在显示后,却无法关闭。<br><br>主程序:<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br> &nbsp;CreateForm;<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>var<br> &nbsp;hWND: Cardinal;<br>begin<br> &nbsp;hWND:= FindWindow(nil, 'aaa');<br> &nbsp;if hWND = 0 then exit;<br> &nbsp;SendMessage(hWND, WM_Close, 0, 0);<br>end;<br><br>procedure TForm1.Button3Click(Sender: TObject);<br>var<br> &nbsp;hWND: Cardinal;<br>begin<br> &nbsp;//ShowForm; //如果用这种方式,则可以正常显示<br> &nbsp;//exit;<br> &nbsp;hWND:= FindWindow(nil, 'aaa');<br> &nbsp;if hWND = 0 then exit;<br> &nbsp;Memo1.Clear;<br> &nbsp;ShowWindow(hWND, SW_SHOWNORMAL);<br>end;<br><br>DLL部分<br>procedure CreateForm(AppHandle: Cardinal); stdcall;<br>begin<br> &nbsp;Form2:= TForm2.Create(nil);<br> &nbsp;try<br> &nbsp; &nbsp;Form2.Show;<br> &nbsp;finally<br> &nbsp;end;<br>end;<br><br>procedure ShowForm; stdcall;<br>begin<br> &nbsp;Form2.Show;<br>end;<br><br>窗口建立后,第一次我可以关闭窗体。我并不想释放这个窗体,但再次显示出来后,就无法关闭。是什么原因?<br>虽然可以直接用注释部分显示,并且可以顺利关闭。但为什么不能用 ShowWindow方式。我看别人创建的DLL窗体,都可以使用外部程序进行显示和关闭。<br><br>分不多,请大家释疑!感谢
 
可以用ShowWindow方式打開窗體的。<br>QQ:136293586
 
隐藏窗体是WM_HIDE,你的已经关闭了.<br>你说的可以正常显示,当你调用SHOW函数时,由于你的DLL是静态载入的,所以首先进行类初始化,当然可以.
 
to bbscom:<br> &nbsp; 能不能详细点呢?谢谢<br><br>to dancekids:<br> &nbsp; 你说窗口已经关闭了?不会吧,那为什么FindWindow能找到呢?调用Show的时候,也并没有在创建窗口。
 
问题解决了,但想问一下<br><br>例如在dll中,建立窗口时<br><br>....<br> &nbsp;Application.Handle:= AppHandle;//主程序的Application<br> &nbsp;Form1:= TForm1.Create(AppHandle);<br><br>那么,如果利用dll注入到其他外部程序,怎么才能获得其他程序的 Application.Handle ?
 
to dwxm:<br> &nbsp;能否把你的代码贴出来,或发给我?<br>email:towady@gmail.com<br>谢谢
 
后退
顶部