VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

[問題]執行ShellExecute函數結果有誤

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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 處理掉了,
後續如果還有時間,再來好好研究看看。
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作