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

讀取中文檔名的問題

尚未結案
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-18 19:20:55 IP:61.230.xxx.xxx 未訂閱
請問一下如何在command line中讀取中文檔名的問題.我現在是用shellexecute(..."notepad.exe 新文字檔.txt") 結果它說找不到這個檔案,我是在2000底下執行的...可是在xp底下就可以..我也試過在winme也不行...請問一下有人遇過嗎?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-18 21:59:47 IP:219.136.xxx.xxx 未訂閱
Egn 您好:    以下是 ShellExecute() 的使用格式:
HINSTANCE ShellExecute(
    HWND hwnd,        // handle to parent window
    LPCTSTR lpOperation,        // pointer to string that specifies operation to perform
    LPCTSTR lpFile,        // pointer to filename or folder name string
    LPCTSTR lpParameters,        // pointer to string that specifies executable-file parameters
    LPCTSTR lpDirectory,        // pointer to string that specifies default directory
    INT nShowCmd         // whether file is shown when opened
);
第三個參數是設定要處理的檔案或程式名稱,例如:notepad.exe。 您應該將準備傳給 notepad.exe 的參數設到第四個參數去,而不是與第三個參數放在一起。 修改一下試試看吧。
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-19 00:14:59 IP:221.169.xxx.xxx 未訂閱
我知道ㄝ..可是現在我的參數就是比較特別,像我現在是在用rasphone.exe, 它可以在後面加參數,力如rasphone 虛擬私人連線...它就會開啟你的網路連線,可是假如現在我連線的名稱是 虛擬 私人連線 中間有個空格的話就會讀不到了..因為它好像就會讀到空白就不讀了..這是我現在用shellexecute的問題..
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-19 00:43:18 IP:219.136.xxx.xxx 未訂閱
試試看在含有空白字元的參數前後以雙引號括起來,例如: ShellExecute(Application->Handle, "open", "rasphone.exe", "\"虛擬 私人連線\"", NULL, SW_SHOW); 發表人 - RedSnow 於 2005/05/19 01:00:39
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-19 10:21:36 IP:61.230.xxx.xxx 未訂閱
檔名中間有空白的問題解決了...可是現在是中文的問題...我是在win2000底下執行一個程式叫rasphone.exe 後面加一個參數 例如:rasphone.exe 我的連線 結果說找不到我的連線這個設定檔,可是同樣的情形在winxp就成功了...所以我想說是不是這個rasphone程式在2000沒辦法讀中文檔名阿~~~因為我在程式中用shellexecute去執行這個程式和參數,結果都不行...
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-19 10:53:40 IP:219.137.xxx.xxx 未訂閱
Egn 您好: 我的作業環境也是 Windows 2000,開發環境則為 BCB4,我剛才試著使用 ShellExecuteEx() 來測試,一樣無法達到您要的效果,後來我索性直接在 DOS Box 內以 COmmand line 方式輸入指令來啟動 rasphone.exe,結果也是否定的,您是否確認 rasphone.exe 本身可以接受這樣的參數?如果 Windows 2000 上的 rasphone.exe 根本就沒辦法接受中文為參數的話,那麼您再怎麼試,那也是無濟於事的。 如果您確認它是可以接受中文名稱為參數,那麼麻煩您給一個實例,好讓我照著做測試。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-19 13:03:12 IP:219.137.xxx.xxx 未訂閱
Egn 您好: 您可以說明一下,您使用 rasphone.exe 是要做什麼動作嗎?或許有其它的變通方式可以達到您要做的動作也不一定,例如:如果您是要透過 Command line 來直接撥接指定的連線項目,那麼使用 rasdial.exe 應該是可以直接撥接或是掛斷指定項目的,rasdial.exe 應該可以使用中文參數。
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-19 13:07:41 IP:61.230.xxx.xxx 未訂閱
我試了一下,在2000底下好像rasphone無法支援中文檔名,可是只是不知道為什麼xp就可以...唉...
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-19 13:40:10 IP:219.137.xxx.xxx 未訂閱
Egn 您好: 有看到我前一篇嗎?rasdial.exe 可否達到您所要的動作?
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-19 15:09:20 IP:61.230.xxx.xxx 未訂閱
我一開始也有考慮過rasdial...可是用rasdial的話,是沒有對話方塊的,就是說假如usre密碼或帳號錯誤的話,也看不到錯誤訊息..那時後我用shellexecute執行時,它是跑出一個command line的視窗,結果跑完就關掉了...我也看不到錯誤訊息...還是說有辦法把那個錯誤訊息寫成一個檔案,我再去讀出來,再用showmessage把它秀出來呢??
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-19 19:20:33 IP:219.137.xxx.xxx 未訂閱
可以將顯示於 DOS 視窗上的訊息導向為檔案,例如: rasdial xxxx > msg.txt 要不然也可以透過批次檔來處裡,可以在批次檔中結尾處加上 pause 指令,這麼一來就可以將 DOS 視窗 "暫停" 住,這樣子就可以看到執行後的相關訊息,等使用者按下 Enter 鍵後才會將 DOS 視窗關閉掉。 發表人 - RedSnow 於 2005/05/19 19:24:01
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-05-19 19:37:09 IP:219.137.xxx.xxx 未訂閱
另外剛才查別的資料時,看到下列這一篇,好像也可以供您參考一下: 如何新增數據機跟撥號連線 http://delphi.ktop.com.tw/topic.php?topic_id=57064 發問者要的動作和您的相反,但是其他人所提供的方式中,好像有您所需要的。
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-05-19 20:24:10 IP:61.230.xxx.xxx 未訂閱
我覺的好奇怪喔...直接在dos上下rasdial xxxx > msg.txt 可以work...可是配何createprocess...它卻沒有幫我輸出到檔案ㄝ..害我都讀不到檔案,這是怎麼回事呢??
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-19 21:56:09 IP:219.137.xxx.xxx 未訂閱
我不清楚您在使用 CreateProcess() 時是如何設定參數的?但是提醒您,如果您是使用 AnsiString 去設定參數,那麼就必須要在有導向符號的位置前加上一個反斜線符號 (\) 才能正常使用導向符號喔。 發表人 - RedSnow 於 2005/05/19 21:57:44
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-05-20 09:39:03 IP:61.230.xxx.xxx 未訂閱
Result = CreateProcess(NULL,"rasdial \"hello\" \> c:\\status.txt", NULL, NULL, false, 0, NULL, NULL, &StartupInfo, &ProcessInfo); 這是我的寫法,結果還是不行,它還是沒有輸出..
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-05-20 10:21:50 IP:61.230.xxx.xxx 未訂閱
我照網站說的用bat檔的方法去做 Memo1->Lines->Add("rasdial \"hello\" >c:\\status.txt"); Memo1->Lines->SaveToFile("temp.bat"); WinExec("temp.bat",SW_HIDE ); while(1) { if(FileExists("c:\\status.txt")) {VPNStatus->Lines->LoadFromFile("c:\\status.txt");break;} } 結果是有輸出status.txt檔,可是要open的時候說無法open...可是明明程式是說檔案有在才open阿...還是檔案還在寫入狀態阿...
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-05-20 11:23:55 IP:219.137.xxx.xxx 未訂閱
我在您的另一篇發問理已經給了您一個範例,試試看吧: 用CreateProcess 怎麼截取輸出的結果阿 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=71374
系統時間:2024-06-02 1:49:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!