A程序中使用showwindow最小化的B程序后, 为什么B程序的最小化不能使用了.(200分)

  • 主题发起人 主题发起人 qingxi
  • 开始时间 开始时间
Q

qingxi

Unregistered / Unconfirmed
GUEST, unregistred user!
如题.<br>A程序中的SHOWWINDOW是:<br>SHOWWINDOW(B程序.handle,Sw_SHow)<br><br>&nbsp;这时B程序的系统按扭中最大化 关闭按扭都可使用,只有最小化按扭不能使用.<br><br>我查了很多贴子都没有提到解决之道.<br><br>我很急的.
 
B程序的最小化按钮本来就不能用的吧?
 
B程序的最小化按扭可以使用.<br><br>&nbsp;f/
 
是窗口還中程序呢?
 
是窗口.<br>系统按扭.
 
原标题有失误:<br>A程序中使用showwindow最小化的B程序后, 为什么B程序的最小化不能使用了<br><br>更正为<br>A程序中使用showwindow 还原原来被最小化的B程序后, 为什么B程序的最小化按扭就不能使用了<br><br>
 
SHOWWINDOW(B程序.handle,Sw_restore)<br>
 
SHOWWINDOW(B程序.handle,Sw_restore)<br>我就是这样用的。<br><br>
 
各位帮我一下吧。
 
真的没有人可以回答吗?
 
原因在于Application.Handle和MainForm.Handle是不一样的<br>我想你是这样写的<br>[red]SHOWWINDOW(B程序.MainForm.handle,Sw_restore)[/red]<br>先最小化该程序,然后执行上述语句,会显示出程序界面,<br>在任务栏该程序上面点右键,如果出现的菜单里面却仍然是 &nbsp;恢复<br>那就是这个问题了<br>解决办法就是找到B.Application.Handle
 
SHOWWINDOW(B程序.handle,Sw_SHow)<br>這樣顯示出來的b窗口正常嗎?<br>我在測試的時候也用過這樣,但很不正常,B窗口什麼都沒有<br>還是改為B.Show好一點
 
[red]原因在于Application.Handle和MainForm.Handle是不一样的[/red]<br>外部程序,你怎么调用Show?<br><br>[red]原因在于Application.Handle和MainForm.Handle是不一样的[/red]<br>SHOWWINDOW(B程序.handle,Sw_SHow)<br>你把程序显示了,但MianFrom的显示状态..<br>你不会再加一句吗<br>
 
stuwe:<br>showwindow后除了最小化其它功能一切正常.<br>zjan521:<br>我的B程序肯定不能够写showwindow(b.程序.mainform.handle...)
 
不會吧<br>你是用mdi窗口還是什麼
 
首先你先确定你的句柄是应用程序的还是主窗体的,这点很关键(我只试验了Delphi中的)<br><br>如果你的B程序的Handle是通过FindWindow得到的,请确定你查找的窗体<br>FindWindow(nil,B.Application.Title) 而不是 FindWindow(nil,B.MainForm.Caption)<br><br>在我这里试验,如果你的句柄真的是B.Application的话,是不会有问题的<br>你可以用以下语句试验一下<br>(生成一个空程序,Application.Title='TestState'; &nbsp; //B.Application.Caption<br>&nbsp; MainFrom.Caption='FormState' //B.MainForm.Caption<br>运行她)<br><br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button2: TButton;<br>&nbsp; &nbsp; Button3: TButton;<br>&nbsp; &nbsp; Edit1: TEdit;<br>&nbsp; &nbsp; Edit2: TEdit;<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; Button4: TButton;<br>&nbsp; &nbsp; Button5: TButton;<br>&nbsp; &nbsp; procedure Button2Click(Sender: TObject);<br>&nbsp; &nbsp; procedure Button3Click(Sender: TObject);<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; &nbsp; procedure Button4Click(Sender: TObject);<br>&nbsp; &nbsp; procedure Button5Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>var<br>&nbsp; aHwnd:Hwnd;<br>begin<br>&nbsp; aHwnd:=Edit1.Tag;<br>&nbsp; if not IsWindow(aHwnd) then exit;<br>&nbsp; SendMessage(aHwnd,WM_SYSCOMMAND,SC_RESTORE,0);<br>end;<br><br>procedure TForm1.Button3Click(Sender: TObject);<br>var<br>&nbsp; aHwnd:Hwnd;<br>begin<br>&nbsp; aHwnd:=Edit1.Tag;<br>&nbsp; if not IsWindow(aHwnd) then exit;<br>&nbsp; ShowWindow(aHwnd,SW_RESTORE);<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; aHwnd,bHwnd:HWND;<br>begin<br>&nbsp; aHwnd:=FindWindow(nil,'TestState'); &nbsp; //B.Application.Caption<br>&nbsp; bHwnd:=FindWindow(nil,'FormState'); &nbsp; //B.MainForm.Caption<br>&nbsp; Edit1.Tag:=aHwnd;<br>&nbsp; Edit1.Text:='$'+IntToHex(aHwnd,8);<br>&nbsp; Edit2.Tag:=bHwnd;<br>&nbsp; Edit2.Text:='$'+IntToHex(bHwnd,8);<br>end;<br><br>procedure TForm1.Button4Click(Sender: TObject);<br>var<br>&nbsp; aHwnd:Hwnd;<br>begin<br>&nbsp; aHwnd:=Edit2.Tag;<br>&nbsp; if not IsWindow(aHwnd) then exit;<br>&nbsp; SendMessage(aHwnd,WM_SYSCOMMAND,SC_RESTORE,0);<br>end;<br><br>procedure TForm1.Button5Click(Sender: TObject);<br>var<br>&nbsp; aHwnd:Hwnd;<br>begin<br>&nbsp; aHwnd:=Edit2.Tag;<br>&nbsp; if not IsWindow(aHwnd) then exit;<br>&nbsp; ShowWindow(aHwnd,SW_RESTORE);<br>end;<br><br>end.
 
你可以截获WM_SYSCOMMAND消息在其中处理最小化按钮消息
 
我想,你应该在B程序中定义一个消息(完成最小化B),然后在A中向B发送这个消息,这样不会出问题
 
多人接受答案了。
 
后退
顶部