  | 
				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 處理掉了,
 
後續如果還有時間,再來好好研究看看。 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |