 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
EricLee
註冊時間: 2005-09-15 文章: 6
第 1 樓
|
發表於: 星期四 九月 29, 2005 5:46 pm 文章主題: [問題]執行ShellExecute函數結果有誤 |
|
|
我在程式中利用 ShellExecute 函數來打開.txt的文件,
試過兩種寫法:
1. ShellExecute(0,"open",cFilename,"","",1) && 用變數帶入
2. ShellExecute(0,"open","c:\temp\demo.txt","","",1)
執行這個函數完畢後,照理來說,
會自動執行 notepad.exe 並打開我指定的文件,
觀察工作管理員(WinXP),notepad.exe是有執行,
但是視窗卻跑不出來,連工作列也沒看到,像是隱形一般,
換句話說,只有在工作管理員中,才能得知它正在執行。
用google找到一些資料,並沒有找到這問題的原因與解法,
請教各位有遇過這種問題嗎?要如何解決呢? |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 2 樓
|
發表於: 星期四 九月 29, 2005 10:17 pm 文章主題: |
|
|
先執行其它的檔案看看,例如: xls , 是否一樣會有問題?
或許是你的.txt 開啟的程式設定有問題! _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
EricLee
註冊時間: 2005-09-15 文章: 6
第 3 樓
|
發表於: 星期五 九月 30, 2005 11:55 pm 文章主題: |
|
|
我有去檢查過.txt這種檔案的關聯開啟程式是notepad.exe沒錯,
至於其他類型的檔案(如:xls),我會試試看,
謝謝回覆。 |
|
回頂端 |
|
 |
sunghsia
註冊時間: 2003-06-13 文章: 52 來自: 台北
第 4 樓
|
發表於: 星期六 十月 01, 2005 11:06 am 文章主題: |
|
|
DECLARE INTEGER ShellExecute IN shell32;
INTEGER hwnd,;
STRING,; &&(.Null.為open,explore), open, explore, print, find...
STRING,; &&檔名
STRING,; &&參數
STRING,; &&預設路徑
INTEGER &&視窗大小: 1預設 2最小 3最大, 如檔名是.hlp,或視窗不能放大小,須設為0或1
= ShellExecute(0, "open", "NOTEPAD.EXE", "demo.txt", "c:\temp", 1) &&失敗的話,把1換3試試
* ------如上面的失敗,可能是您的電腦和ShellExecute還在吵架中, 就試試下面的程式碼-----------
DECLARE INTEGER WinExec in kernel32;
STRING,; &&執行檔
INTEGER &&視窗大小: 1預設 2最小 3最大,如檔名是.hlp, 或視窗不能放大小,須設為0或1
= WinExec("NOTEPAD.EXE c:\temp\demo.txt", 1) &&失敗的話,把1換3試試 |
|
回頂端 |
|
 |
sunghsia
註冊時間: 2003-06-13 文章: 52 來自: 台北
第 5 樓
|
發表於: 星期六 十月 01, 2005 1:48 pm 文章主題: |
|
|
在捕充一下.... 視窗會被隱藏~~~ 可能是登入檔的問題 ~~~ 你可以試試
開始 - 執行 - 輸入 Regedit.exe
HKEY_CLASSES_ROOT - txtfile - shell - open - command - 點擊預設值,將資料改成 C:\WINDOWS\NOTEPAD.EXE %1
注意! NOTEPAD.EXE 的目錄C:\WINDOWS ,是我電腦的, 你要輸入你自己的 NOTEPAD.EXE所在的目錄
注意! 如還是不行的話, 要將修改後的資料(C:\WINDOWS\NOTEPAD.EXE %1) ,恢復成原來的資料
********************************************************************
或試試治標不治本的方法....
= ShowWindow(hWnd, 1) && 試試最後一個參數: 1,3,5 |
|
回頂端 |
|
 |
EricLee
註冊時間: 2005-09-15 文章: 6
第 6 樓
|
發表於: 星期一 十月 03, 2005 11:43 am 文章主題: |
|
|
我測試的結果分別如下:
1、用 ShellExecute() 開啟 .xls & .doc ,都順利啟動關聯的 excel.exe 與 winword.exe 。
2、用 sunghsia 兄的寫法,用 ShellExecute() 開啟 .txt ,無論參數是 0 or 1 or ......,仍隱藏 。
3、用 WinExec() or ShowWindow(),替換參數下,仍然是有執行,但隱藏。
4、改變 .txt 的註冊機碼,也是無改善。
以上分別在 WinXP and Win2k 環境下測試,情況都一樣,
但是在 Win98 下測試,不管用上列何種寫法,結果全部正常。
很納悶這種現象。 |
|
回頂端 |
|
 |
a123eric
註冊時間: 2003-10-20 文章: 64
第 7 樓
|
發表於: 星期二 十月 04, 2005 7:31 pm 文章主題: |
|
|
目前知道的是…因為沒有檔案存在…
導致 shellexecute 出點點差錯, notepad.exe 卡在背景
若可以將 找不到 demo.txt 是否建立 的視窗浮起來 …應該就有效了
查過 shellexecute 的 error code 回傳值為 2 就是找不到檔案
方式有三可以測試
一、就是讓(找不到 demo.txt 是否建立) 的詢問視窗浮起來
二、先去判斷 file()
三、在第一個參數使用 GetDesktopWindow() ,則背景不會卡 notepad.exe,只會傳回 2 的 error code
也許還有其它的方式 ^^||
備註:GetDesktopWindow() 是 win32api 中的涵數 |
|
回頂端 |
|
 |
EricLee
註冊時間: 2005-09-15 文章: 6
第 8 樓
|
發表於: 星期二 十月 04, 2005 8:25 pm 文章主題: |
|
|
a123eric 寫到: | 目前知道的是…因為沒有檔案存在…
導致 shellexecute 出點點差錯, notepad.exe 卡在背景
若可以將 找不到 demo.txt 是否建立 的視窗浮起來 …應該就有效了
查過 shellexecute 的 error code 回傳值為 2 就是找不到檔案
方式有三可以測試
一、就是讓(找不到 demo.txt 是否建立) 的詢問視窗浮起來
二、先去判斷 file()
三、在第一個參數使用 GetDesktopWindow() ,則背景不會卡 notepad.exe,只會傳回 2 的 error code
也許還有其它的方式 ^^||
備註:GetDesktopWindow() 是 win32api 中的涵數 |
謝謝。
這些方法也都試過了,ShellExecute傳回的值是42,
照說明文件,回傳值大於32就是正常的。
也曾經利用GetDesktopWindow()取代第一個參數,
結果還是一樣。
目前我回頭用原始的 run notepad.exe 先暫時處哩,
再慢慢研究為何會有這樣的情形。 |
|
回頂端 |
|
 |
a123eric
註冊時間: 2003-10-20 文章: 64
第 9 樓
|
發表於: 星期二 十月 04, 2005 9:36 pm 文章主題: |
|
|
目前看來…應該是系統上的問題,我目前這邊試出來的情形是沒有檔案的情形下才會卡住,可以試著在其它台電上試試…多試幾台 |
|
回頂端 |
|
 |
sunghsia
註冊時間: 2003-06-13 文章: 52 來自: 台北
第 10 樓
|
發表於: 星期三 十月 05, 2005 9:55 am 文章主題: |
|
|
拷備win98的shell32.dll,至winXp的其他目錄(c:\temp)
覺得...有點大費周章,但也可以試試看
DECLARE INTEGER ShellExecute IN "c:\temp\shell32.dll"; &&用Xp執行98的shell32.dll
INTEGER,;
STRING,;
STRING,;
STRING,;
STRING,;
INTEGER
= ShellExecute(0, "open", "c:\temp\demo.txt", "", "", 1) |
|
回頂端 |
|
 |
EricLee
註冊時間: 2005-09-15 文章: 6
第 11 樓
|
發表於: 星期三 十月 05, 2005 12:54 pm 文章主題: |
|
|
sunghsia 寫到: | 拷備win98的shell32.dll,至winXp的其他目錄(c:\temp)
覺得...有點大費周章,但也可以試試看 |
會顯示無法載入32位元DDL c:\temp\shell32.dll。
謝謝大家的回應,由於專案時程的關係,
這個問題就暫時用 run notepad.exe 處理掉了,
後續如果還有時間,再來好好研究看看。 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|