shellexecute 的問題 |
尚未結案
|
mnsf
初階會員 ![]() ![]() 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
各位大大好
我利用shellexecute發一封附加檔案的mail
但是為什麼附加檔案的檔名中的":" 及 "\" 會變成 "_" 呢?
測試環境為windows200,delphi 6.0
程式如下
procedure Tform1.Button1Click(Sender: TObject);
var email:string;
begin
email:='mailto:?subject=test&body=test&Att:filename="d:\book1.xls"';
shellexecute(0,'open',pchar(email),nil,nil,sw_showdefault);
end;
執行結果如圖:
|
adonis
高階會員 ![]() ![]() ![]() ![]() 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
mnsf, 您好 我想附加檔案的檔名中的":" 及 "\" 會變成 "_" 是否為經過PChar的型別轉換之後所造成的。
如果單純的
ShowMessage(email);會得到
mailto:?subject=test&body=test&Att:filename='d:\book1.xls'
在這階段時":" 及 "\" 並沒有變成 "_",但經過PChar的型別轉換之後才會變成"__",所以該現象似乎為型別轉換之後所造成的。<--這是我的猜測(若要真的找出是否如此,就必須寫個小程式來讀取和驗證),不過就我所知ShellExecute好像是不能用來附加檔案。你可以參考下面的相關連結討論:
http://delphi.ktop.com.tw/topic.php?topic_id=17882 我也在努力學習中 ^^ 發表人 - adonis 於 2004/07/31 11:03:21 發表人 - adonis 於 2004/07/31 11:04:20
------
我也在努力學習中,若有錯謬請見諒。 |
mnsf
初階會員 ![]() ![]() 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
引言: mnsf, 您好 我想附加檔案的檔名中的":" 及 "\" 會變成 "_" 是否為經過PChar的型別轉換之後所造成的。 如果單純的 ShowMessage(email);會得到 mailto:?subject=test&body=test&Att:filename='d:\book1.xls' 在這階段時":" 及 "\" 並沒有變成 "_",但經過PChar的型別轉換之後才會變成"__",所以該現象似乎為型別轉換之後所造成的。<--這是我的猜測(若要真的找出是否如此,就必須寫個小程式來讀取和驗證),不過就我所知ShellExecute好像是不能用來附加檔案。你可以參考下面的相關連結討論: http://delphi.ktop.com.tw/topic.php?topic_id=17882 我也在努力學習中 ^^ 發表人 - adonis 於 2004/07/31 11:03:21 發表人 - adonis 於 2004/07/31 11:04:20adonis大大你好~~ 我將email宣告成Pchar了,但結果還是一樣 第一張圖是mail的內容,附加檔案的":"及"\"一樣會被"_"替換掉(操作環境是windows 2000,但在windows XP不會) 第二張圖是直接從mail開啟Excel後的結果,sheetname會被改掉 第三張圖是直接從d:\開啟Excel後的結果,這個才是我要的Excel檔 |
mnsf
初階會員 ![]() ![]() 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
引言:sorry,忘了則上我的原始碼了,如下 procedure TForm1.Button1Click(Sender: TObject); var MyExcel, FWorkBook, FWorkSheet: Variant; email:Pchar; begin MyExcel := CreateOleOBject('Excel.Application'); MyExcel.WorkBooks.Add; FWorkBook := MyExcel.WorkBooks.Add; FWorkSheet := FWorkBook.WorkSheets[1]; MyExcel.Visible := false; FWorkBook.Saveas('d:\test.xls'); FWorkSheet.cells[1,1]:='test1'; FWorkSheet.cells[1,2]:='test2'; FWorkBook.Save; FWorkBook.close; MyExcel.quit; email:='mailto:?subject=test&body=test &Att:filename="d:\test.xls"'; shellexecute(0,'open',pchar(email),nil,nil,sw_showdefault); end;引言: mnsf, 您好 我想附加檔案的檔名中的":" 及 "\" 會變成 "_" 是否為經過PChar的型別轉換之後所造成的。 如果單純的 ShowMessage(email);會得到 mailto:?subject=test&body=test&Att:filename='d:\book1.xls' 在這階段時":" 及 "\" 並沒有變成 "_",但經過PChar的型別轉換之後才會變成"__",所以該現象似乎為型別轉換之後所造成的。<--這是我的猜測(若要真的找出是否如此,就必須寫個小程式來讀取和驗證),不過就我所知ShellExecute好像是不能用來附加檔案。你可以參考下面的相關連結討論: http://delphi.ktop.com.tw/topic.php?topic_id=17882 我也在努力學習中 ^^ 發表人 - adonis 於 2004/07/31 11:03:21 發表人 - adonis 於 2004/07/31 11:04:20adonis大大你好~~ 我將email宣告成Pchar了,但結果還是一樣 第一張圖是mail的內容,附加檔案的":"及"\"一樣會被"_"替換掉(操作環境是windows 2000,但在windows XP不會) 第二張圖是直接從mail開啟Excel後的結果,sheetname會被改掉 第三張圖是直接從d:\開啟Excel後的結果,這個才是我要的Excel檔 |
adonis
高階會員 ![]() ![]() ![]() ![]() 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
mnsf, 您好 記得先前也有人碰到同樣的問題,不過有其他前輩測試的結果是OK沒問題的,但也有人持不同的見解,將其列出如下:
1. 測試環境 Windows 2000 SP3, BCB 6.0 Update4, Outlook 2000 <--結果OK
2. Win98, BCB6.0 <--結果問題和你一樣
3. http://delphi.ktop.com.tw/topic.php?topic_id=17882
引言: Q:Can anybody show me how to use ShellExecute to prepare a e-mail with an attachment or how to use 'Send to' function from Windows context menu programatically. (有人可告訴我如何用ShellExecute送出一封含附檔的郵件?) A1:You can not attach files using the mailto, which is what you would have to do to use shellexecute. The only way I know of is to use OLE or scripting. (您不可用Mailto來附加檔案,我想可能要用OLE或Script)4. 操作環境是windows 2000,但在windows XP不會 <--這是你測出來的結果 綜合以上的結果,若要確保你的開發程式不侷限於環境的不同,還是建議你改以其他作法,例如透過其他郵件元件來開發等..。提供給你參考。 我也正努力學習中 ^ ^ 發表人 - adonis 於 2004/08/04 15:06:04
------
我也在努力學習中,若有錯謬請見諒。 |
mnsf
初階會員 ![]() ![]() 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
引言: mnsf, 您好 記得先前也有人碰到同樣的問題,不過有其他前輩測試的結果是OK沒問題的,但也有人持不同的見解,將其列出如下: 1. 測試環境 Windows 2000 SP3, BCB 6.0 Update4, Outlook 2000 <--結果OK 2. Win98, BCB6.0 <--結果問題和你一樣 3. http://delphi.ktop.com.tw/topic.php?topic_id=17882adonis大大你好, 我之所以不選擇用郵件元件來發email的原因,是因為我不曉得使用者會寄給哪些人,所以才會想用mailto這種方式,因為使用者可能沒辦法記住收件人的完整email address,如果可以利用mailto這種方式的話,使用者就可以利用本身的通訊錄去選擇收件人是哪些人。如果是在醬子需求的前提下,大大會用什麼方式來做出使用者所想要的需求呢?引言: Q:Can anybody show me how to use ShellExecute to prepare a e-mail with an attachment or how to use 'Send to' function from Windows context menu programatically. (有人可告訴我如何用ShellExecute送出一封含附檔的郵件?) A1:You can not attach files using the mailto, which is what you would have to do to use shellexecute. The only way I know of is to use OLE or scripting. (您不可用Mailto來附加檔案,我想可能要用OLE或Script)4. 操作環境是windows 2000,但在windows XP不會 <--這是你測出來的結果 綜合以上的結果,若要確保你的開發程式不侷限於環境的不同,還是建議你改以其他作法,例如透過其他郵件元件來開發等..。提供給你參考。 我也正努力學習中 ^ ^ 發表人 - adonis 於 2004/08/04 15:06:04 |
adonis
高階會員 ![]() ![]() ![]() ![]() 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
mnsf, 您好
引言: 我之所以不選擇用郵件元件來發email的原因,是因為我不曉得使用者會寄給哪些人,所以才會想用mailto這種方式,因為使用者可能沒辦法記住收件人的完整email address,如果可以利用mailto這種方式的話,使用者就可以利用本身的通訊錄去選擇收件人是哪些人。因為無法確定使用者會寄信給哪些人所以才以mailto的方式好讓使用者當下去挑選要寄給誰,既然如此,何不也讓使用者當下去點選附加檔案(既然畫面都出現了)不是更簡單的解決了你的問題嗎?您說是嗎? 我也正努力學習中 ^ ^
------
我也在努力學習中,若有錯謬請見諒。 |
mnsf
初階會員 ![]() ![]() 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
引言: mnsf, 您好adonis您好 我想要用程式去寫附加檔案的原因,是因為那個附加的Excel檔是由程式到資料庫去撈資料出來,產生在Excel檔的,會暫存在使用者的硬碟中,等到使用者寄出去後,可能會把該Excel檔刪除,所以才會不讓使用者自行點選附加檔案(而且使用者也不會知道程式把Excel檔存在哪裡,除非程式特別告知使用者)。引言: 我之所以不選擇用郵件元件來發email的原因,是因為我不曉得使用者會寄給哪些人,所以才會想用mailto這種方式,因為使用者可能沒辦法記住收件人的完整email address,如果可以利用mailto這種方式的話,使用者就可以利用本身的通訊錄去選擇收件人是哪些人。因為無法確定使用者會寄信給哪些人所以才以mailto的方式好讓使用者當下去挑選要寄給誰,既然如此,何不也讓使用者當下去點選附加檔案(既然畫面都出現了)不是更簡單的解決了你的問題嗎?您說是嗎? 我也正努力學習中 ^ ^ |
adonis
高階會員 ![]() ![]() ![]() ![]() 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
|
mnsf
初階會員 ![]() ![]() 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |