全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2197
推到 Plurk!
推到 Facebook!

在 WaitForSingleObject 等待的情況下,如何顯示桌面

缺席
wangccw
一般會員


發表:21
回覆:39
積分:17
註冊:2005-01-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-04-02 23:48:48 IP:210.64.xxx.xxx 訂閱
一個FORM ,使用WaitForSingleObject 去呼叫並咬住外部程式(例如NOTEPAD),當點選 快速啟動內的"顯示桌面",無法像一般
程式縮小及還原。

請問各位有何其它方法達成 在主程式咬住外部程式時,按下"顯示桌面" 時,主程式及外部程式同時 縮小 或還原 視窗。



[code delphi]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hProcess: THandle; {進程句柄}
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
pInfo: TProcessInformation;
sInfo: TStartupInfo;
ThreadID: DWORD;
begin
FillChar(sInfo, SizeOf(sInfo), 0);
if CreateProcess(nil, PChar('notepad'), nil, nil, false,
CREATE_NEW_PROCESS_GROUP NORMAL_PRIORITY_CLASS, nil, nil, sInfo, pInfo) then
begin
hProcess := pInfo.hProcess;
if WaitForSingleObject(hProcess, INFINITE) = WAIT_OBJECT_0 then begin
end;
end;
end;
end.

[/code]

wangccw
一般會員


發表:21
回覆:39
積分:17
註冊:2005-01-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-04-03 18:55:24 IP:203.67.xxx.xxx 訂閱
經過多方測試之後,想到了另外一個繞彎的解決。
即 主程式要呼叫咬住外部程式前,先將 主程式FORM 的 Visible 設成 false, 這樣 按下 "顯示桌面" 時,外部程式就可正常縮放。然後當關掉外部程式後,再將
主form 的 visible 設成 true,完成,收工。
另外因為關掉外部程式時,有可能 主form 是縮在工作列,所以要再呼叫 ForceForegroundWindow,來還原視窗。
有達到顯示桌面的效果,但似乎不是正解,希望其它人有比較好的解決的話,也可以討論。

備註:
ForceForegroundWindow是參考 P.D 版大的程式
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=93920

系統時間:2024-04-26 23:13:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!