如何找出Word.exe的位置 |
答題得分者是:pceyes
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
您在安裝ms_word時,雖可裝於各個磁碟機,但無論如何都會對windows進行註冊動作。
因為你在檔案總管中按下*.doc的檔案,它就會開啟它了. [code delphi] uses ShellApi; procedure TForm1.Button1Click(Sender: TObject); begin ShellExecute(handle, 'open', pchar('winword.exe'), NiL, NiL, SW_SHOWNORMAL); end; [/code] 如果真要在意它的路徑,直接找Register吧!
------
努力會更接近成功 |
darnell
版主 發表:25 回覆:103 積分:145 註冊:2003-03-04 發送簡訊給我 |
可以參考support.microsoft.com/kb/234788/zh-tw
依據不同office版本有不同的guid但是這是用Visual C 寫的 因此請參考www.tek-tips.com/viewthread.cfm轉成delphi的程式碼 |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
調出 Doc 檔可直接用 ShellExecute 直接帶入 DOC 檔案位置即可。何必如此大費周章。
若要得知 Word 檔案位置,同理可證,調出 DOC 開啟的對象即可。 範例碼如下: [code delphi] Function GetAssociatedExecinfo(FileExt: String; var FileLink,FileDescription, MIMEType: String):Boolean; Var Reg: TRegistry; FileType: String; begin Result := false; Reg := TRegistry.Create; try Reg.RootKey := HKey_Classes_Root; if not Reg.OpenKey(FileExt, False) then Exit; FileType := Reg.ReadString(''); MIMEType := Reg.ReadString('Content Type'); Reg.CloseKey; if (FileType = '') or (not Reg.OpenKey(FileType, False)) then Exit; FileDescription := Reg.ReadString(''); if not Reg.OpenKey('shell\open\command', False) then Exit; FileLink := Reg.ReadString(''); Result := FileLink<>''; finally Reg.CloseKey; Reg.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var S1,S2,S3 :String; I,J : Integer; begin if GetAssociatedExecinfo('.doc',S1,S2,S3) then begin I := Pos('"',S1); if I > 0 then begin S1[I] := '_'; J := Pos('"',S1); if J > 0 then S1 := Copy(S1,I 1 , J - I - 1); end; Showmessage(S1 #13 S2 #13 S3); end; end; [/code] |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
===================引 用 limary 文 章=================== 謝謝pceyes前輩的指點。 小妹剛才到Regedt32用搜尋已找到了WinWord.exe的存身位置,也將Delphi讀 取碼也寫好了。不過,我還有點疑問,我手上只有Office2003,現在我可以將 WinWord.exe的機碼位置寫死,可是在別的Office版本是不是也可以延用? 每一部電腦,就算裝了數個版本的word,以最後一個安裝的word為準, 比如說先裝word2007,再裝Open Office Writer,那點取abc.doc時會用Writer來開啟,就算下次執行另一個word2007時Microsoft會在程式執行一次後,自動將開啟程式改為自身的word2007,開abc.doc的程式還是只有一個,shellexecute反正就是在檔案總管中點abc.doc會執行的程式,除非你的想法是一定要用哪個版本的word才行,那就另當別論了。 另外,在RegEdt32中可以下令搜尋機碼與資料,可是在Delphi中要如何寫這 個全區搜尋的程式碼?如果這能寫出來,那我就不必將這個WinWord.exe的機碼位 置寫死了。 謝謝。 個人是不建議用搜尋的方式啦,太花時間了,每次使用前都要花這段時間,太沒效率了。
------
努力會更接近成功 |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
小弟是純聊天天抬槓。為何不直接用CreateOleObj,或用Delphi內附的WordApplication等
元件就好了。就不必這麼囉嗦了。 來個另類思考:用ShellExecute有個缺點,就是它是脫疆野碼,用它啟動了 Word後,就跟你斷線了。如果你要設定為叫出Word後就必需凍結母程式而 對此新歡處一而終,生死以之﹝存檔或退出﹞後才讓母程式活過來,那你 應該用CreateProcess較好用。當然,如果沒這個需要,是直接用 ShellExecute以檔案關聯啟動是最簡單。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |