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

如何找出Word.exe的位置

答題得分者是:pceyes
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-24 16:10:07 IP:61.219.xxx.xxx 未訂閱
各位前輩:
小妹在寫一支程式,要把一些資料寫入到*.doc及叫出Word.exe來編修這些內容
,及確定它的編修結果有存入硬碟。我的問題是,我不知道我的User電腦中Word.exe
的位置,所以我無法叫起個Word.exe來。我要如何知道個路徑?謝謝。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-24 16:24:53 IP:118.169.xxx.xxx 訂閱
可參考
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q247/9/85.asp&NoWebContent=1
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-24 16:33:48 IP:220.141.xxx.xxx 訂閱
您在安裝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-24 16:35:24 IP:60.250.xxx.xxx 訂閱
可以參考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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-24 20:24:32 IP:61.219.xxx.xxx 未訂閱
謝謝ishyang副站長及darnell版主的熱心指點,這裏的熱心及快速的回覆,真讓人感動。
小妹正仔細研讀兩位前輩提供的資料。先謝謝了。
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-24 20:35:13 IP:61.219.xxx.xxx 未訂閱
謝謝pceyes前輩的指點。
小妹剛才到Regedt32用搜尋已找到了WinWord.exe的存身位置,也將Delphi讀
取碼也寫好了。不過,我還有點疑問,我手上只有Office2003,現在我可以將
WinWord.exe的機碼位置寫死,可是在別的Office版本是不是也可以延用?
另外,在RegEdt32中可以下令搜尋機碼與資料,可是在Delphi中要如何寫這
個全區搜尋的程式碼?如果這能寫出來,那我就不必將這個WinWord.exe的機碼位
置寫死了。
謝謝。
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-24 20:52:29 IP:122.126.xxx.xxx 訂閱
調出 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-24 21:09:55 IP:61.219.xxx.xxx 未訂閱
謝謝Rootkit前輩,前輩寫的登錄程式讓小妹受益良多,謝謝前輩。
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-10-25 03:51:00 IP:220.141.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-10-25 06:10:41 IP:61.219.xxx.xxx 未訂閱
小弟是純聊天天抬槓。為何不直接用CreateOleObj,或用Delphi內附的WordApplication等
元件就好了。就不必這麼囉嗦了。
來個另類思考:用ShellExecute有個缺點,就是它是脫疆野碼,用它啟動了
Word後,就跟你斷線了。如果你要設定為叫出Word後就必需凍結母程式而
對此新歡處一而終,生死以之﹝存檔或退出﹞後才讓母程式活過來,那你
應該用CreateProcess較好用。當然,如果沒這個需要,是直接用
ShellExecute以檔案關聯啟動是最簡單。
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-10-25 06:12:47 IP:61.219.xxx.xxx 未訂閱
若要得知 Word 檔案位置,同理可證,調出 DOC 開啟的對象即可。
範例碼如下:
====>謝謝Rootkit兄,小弟又偷學了一招。也偷偷說聲感謝。
------
Kevin
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-10-27 22:49:00 IP:61.219.xxx.xxx 未訂閱
    謝謝各位前輩的幫忙,小妹的問題已如前輩的指點處理已完全解決了,小妹
十分感謝。各位前輩熱心回覆及提示,小妹收獲良多,啟發進益良多,銘感五內
。謝謝了。
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-10-29 09:00:04 IP:61.222.xxx.xxx 訂閱
賣客氣啦,互相偷學求進步。.....

===================引 用 kevin2004 文 章===================
若要得知 Word 檔案位置,同理可證,調出 DOC 開啟的對象即可。
範例碼如下:
====>謝謝Rootkit兄,小弟又偷學了一招。也偷偷說聲感謝。
系統時間:2024-03-28 17:23:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!