開起外部程式 與 禁止最小化 |
答題得分者是:aftcast
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
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 發送簡訊給我 |
目前規劃上
並無限制檔案類型 如果檔案都為文字檔真的 好處(讀進來程式就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 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
了解。既然你連 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 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
馬上幫你找到一篇應該可解你問題的 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 發送簡訊給我 |
|
boy330077
一般會員 發表:39 回覆:59 積分:19 註冊:2009-10-15 發送簡訊給我 |
感謝 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; |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |