找一条用api函数调用可执行文件的命令。会者不难,快来抢分。(可能是delphi的bug)(100分)

  • 主题发起人 主题发起人 seaflyboy
  • 开始时间 开始时间
S

seaflyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现用api函数调用delphi编译的exe文件有问题。将exe文件最小化,再用api函数调用<br>exe文件,并将它放到最前时,这个exe文件不能够最小化了,而调用非delphi编译的exe<br>文件时,就没有这种问题。请问谁有高招能解决这个问题?<br>请实验过了再给我答复。<br>
 
:),给出你的代码。
 
这是我的程序(打‘//’是我实验过的句子):<br>procedure TForm1.Button1Click(Sender: TObject);<br>var wnd:hwnd;<br>&nbsp; &nbsp; s:pchar;<br>begin<br>&nbsp; wnd:=findwindow(nil,'接受工程发布通知书');<br>&nbsp; edit1.Text:=inttostr(wnd);<br>&nbsp; ShowWindow(wnd,SW_MAXIMIZE)<br>&nbsp; //ShowWindow(wnd,sw_restore)<br>&nbsp; //SetForegroundWindow(wnd)<br>&nbsp; //SetWindowPos(Handel_temp, HWND_TOP, 0,0,0,0, SWP_NOMOVE or SWP_NOSIZE);<br>&nbsp; //SetForegroundWindow(handel_temp);<br>&nbsp; //sendmessage(handel_temp,wm_syscommand,SC_RESTORE,0);<br>&nbsp; //postmessage(handel_temp,WM_SHOWWINDOW,0,SW_PARENTCLOSING);<br>end;<br>
 
Delphi里面,它的Application和Form分别是两个Handle,你FindWindow查找的是哪一个Handle,<br>如果两个相同,最好都实验一下。
 
to yzhshi:<br>???您说的我不太懂,我用findwindow找的是标题为'接受工程发布通知书'的窗口。您能说<br>的明白点么?或给我点代码看看!<br>
 
你看见的窗体的Caption和按Ctrl+Tab显示的Caption可能不是一个,一个是Application的,<br>一个是Form的。<br>我现在挺忙的,你先自己实验一下吧。OK?
 
ShowWindow(wnd,SW_MAXIMIZE)<br>就发送一个最大话的message<br>没有问题,<br>ShowWindow(wnd,SW_MAXIMIZE)//最大话<br>&nbsp; //ShowWindow(wnd,sw_restore)//恢复<br>&nbsp; //SetForegroundWindow(wnd)<br>&nbsp; //SetWindowPos(Handel_temp, HWND_TOP, 0,0,0,0, SWP_NOMOVE or SWP_NOSIZE);//设置form信息<br>&nbsp; //SetForegroundWindow(handel_temp);<br>&nbsp; //sendmessage(handel_temp,wm_syscommand,SC_RESTORE,0);<br>&nbsp; //postmessage(handel_temp,WM_SHOWWINDOW,0,SW_PARENTCLOSING);<br>
 
to seaflyboy: 请问你是不是也在作招投标的项目呀?[:)]
 
to yzhshi:ok,我先试试。<br>to dcsdcs:我试过了,还是老问题。
 
to 萧月禾:是呀!
 
我原来用BCB做程序时也有这个问题,后来经过实验,用下面这段代码可以正常工作,<br>不过我没有对delphi做测试。<br>Title为程序窗口的名称,ExeName为程序名。<br><br>void RunProgram(char * Title,char * ExeName,char *param)<br>{<br>&nbsp; &nbsp; HWND hd=NULL;<br>&nbsp; &nbsp; hd=FindWindow(NULL,Title);<br>&nbsp; &nbsp; AnsiString Param;<br>&nbsp; &nbsp; Param=param;<br>&nbsp; &nbsp; if(hd!=NULL)<br>&nbsp; &nbsp; {<br>&nbsp; &nbsp; &nbsp; &nbsp; SendMessage(hd,WM_SYSCOMMAND,SC_RESTORE,NULL);<br>&nbsp; &nbsp; &nbsp; &nbsp; BringWindowToTop(hd);<br>&nbsp; &nbsp; }<br>&nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; &nbsp; ShellExecute(Handle,NULL,ExeName,Param.c_str(),SoftPath.c_str(),SW_SHOWNORMAL);<br>}<br>
 
记得最近在DFW上讨论那个Application本身也是一个窗体的问题,估计问题就出在这里。<br>这可能是Delphi特有的呀。[:)]
 
to hawkfly:谢谢!这些命令我都试过,除了调用delphi编译的exe文件有问题,调用其他的<br>exe文件没什么问题。
 
问题解决了,多谢yzhshi的提示。
 
多人接受答案了。
 
后退
顶部