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

開起外部程式 與 禁止最小化

答題得分者是:aftcast
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-12-24 11:04:56 IP:211.20.xxx.xxx 訂閱
 如提

目前狀況

資料庫上有存某檔案名稱,路徑 (檔案類型不一定)

所以我希望將他開啟 使用了 SHELLEXCUTE (已經如預期開啟檔案)

但是我不希望他縮小 (縮小後我將找不到他,目前已遠端桌面方式)

希望他被關閉後 主程式才繼續運行

不知道 shellExcute 是否能禁止其最小化

或是能有其他方法代替
aftcast
站務副站長


發表:81
回覆:1483
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-12-25 08:10:25 IP:114.32.xxx.xxx 訂閱
shellexcute 應該是沒辦法辦到。不過好奇的是,是什麼樣的檔案?   如果可以,是否可以用你自己的程式來讀入該檔,如此的話就可以透過你自己的程式來控制不要關了。



===================引 用 boy330077 文 章===================
如提

目前狀況

資料庫上有存某檔案名稱,路徑 (檔案類型不一定)

所以我希望將他開啟 使用了 SHELLEXCUTE (已經如預期開啟檔案)

但是我不希望他縮小 (縮小後我將找不到他,目前已遠端桌面方式)

希望他被關閉後 主程式才繼續運行

不知道 shellExcute 是否能禁止其最小化

或是能有其他方法代替
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-12-25 08:46:10 IP:211.20.xxx.xxx 訂閱
 目前規劃上  

並無限制檔案類型

如果檔案都為文字檔真的 好處(讀進來程式就OK了)

可是如果有 DOC,XLS,VSD,JPG 可能讀進程式 就不盡理想

避免各式各樣的檔樣 認為還是讓os 預設程式開起比較好

-------狀況更新---------------------------------------------------------------------

SetWindowLong(AppWnd, GWL_STYLE , Style and (not WS_MINIMIZEBOX) and (not WS_SIZEBOX));

已上這行已經解決了 限制其 不能放大縮小 也不能縮至工作列

問題在於 那一個 AppWnd 是視窗的HANDLE

我怎麼試 就是無法將 shellExcuteEx的 HANDLE 撈出 視窗的HANDLE

aftcast
站務副站長


發表:81
回覆:1483
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-12-25 09:03:43 IP:114.32.xxx.xxx 訂閱
了解。既然你連 setwindowslong都拿出來使用了… 表示有些實力。我想或許我可以幫你想一用什麼方式把handle弄出來。不過,可能要等我忙完一些事後。 ;-)


===================引 用 boy330077 文 章===================


SetWindowLong(AppWnd, GWL_STYLE , Style and (not WS_MINIMIZEBOX) and (not WS_SIZEBOX));

已上這行已經解決了 限制其 不能放大縮小 也不能縮至工作列

問題在於 那一個 AppWnd 是視窗的HANDLE

我怎麼試 就是無法將 shellExcuteEx的 HANDLE 撈出 視窗的HANDLE

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1483
積分:1762
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-12-25 09:11:03 IP:114.32.xxx.xxx 訂閱
馬上幫你找到一篇應該可解你問題的 link:

http://stackoverflow.com/questions/3269390/how-to-get-hwnd-of-window-opened-by-shellexecuteex-hprocess

不過是 c 的語法,我想你應該可以轉換。若真轉不過來,再發問。 (我主修 c builder 喔!)
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-12-25 09:12:17 IP:211.20.xxx.xxx 訂閱
 感謝您的回覆

也不是有實力拉

也試網路上找 TRY出來有效而以

再次感謝您回答問題
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-12-25 09:58:56 IP:211.20.xxx.xxx 訂閱
 感謝  afcast 回覆

以完成

付上 部分程式碼


procedure TForm1.Button1Click(Sender: TObject);
function EnumSetApps(Wnd: HWnd; lParam: LPARAM): boolean; stdcall;
var
Style:LongInt;
PID:Cardinal;
begin
Result:= true;
GetWindowThreadProcessId( Wnd, @PID );
if PID=lParam then
begin
Style := GetWindowLong(Wnd, GWL_STYLE);
SetWindowLong(Wnd, GWL_STYLE , Style and (not WS_MINIMIZEBOX) and (not WS_SIZEBOX));
end;
end;
var
SEInfo: TShellExecuteInfo;
ExecuteFile: string;
PID:Cardinal;
begin
if not OpenDialog1.Execute then Exit;
if not FileExists(OpenDialog1.FileName) then Exit;
ExecuteFile:=OpenDialog1.FileName;
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@SEInfo) then
begin
PID:=GetProcessId(SEInfo.hProcess);
EnumWindows(@EnumSetApps,GetProcessId(SEInfo.hProcess));
end
end;

編輯記錄
boy330077 重新編輯於 2014-12-25 10:00:06, 註解 無‧
boy330077 重新編輯於 2014-12-25 10:00:46, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1483
積分:1762
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-12-25 10:13:36 IP:114.32.xxx.xxx 訂閱
感謝回饋源碼給未來需要的人參考!  :)
------



蕭沖
--All ideas are worthless unless implemented--

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