ShellExcute API 在PB11中的使用

guoge發表於2008-08-20

最近在做一個統計程式,將資料查詢出來儲存至一個Excel檔案後,想實現開啟這個Excel檔案。針對Excel檔案的開啟,可以使用OLE物件,同事也有一個透過查詢登錄檔獲取檔案關聯開啟方式的程式碼。其實最簡單的方式其實還是使用WindowsAPI ShellExcute

其在PB 中定義外部函式為:

Function Long ShellExecute(Long hwindow, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library 'shell32.dll' Alias for ShellExecuteA

Function Long GetDesktopWindow() Library 'user32.dll'

在程式碼中為:

String ls_filename = "E:OpenExplorer1.XLS"

String ls_null

SetNull(ls_null)

ShellExecute(GetDesktopWindow(), ls_null, ls_filename , ls_null, ls_null, 0)

偏偏就是這麼簡單的例子,參照網上例子,我在PB11下花了一天時間也沒搞定。如果ShellExecute成功執行的話,返回值應該>32 , 可是每次都返回值為2.

快下班的時候,我使用PB5PB9測試了一下,相同的程式碼,都能正確執行。

現在就是很迷惑,問題出在哪裡?難道是PB11BUG

最後還是使用了同事透過查詢登錄檔獲取檔案關聯開啟方式的方式,但覺得還是有點不優雅,如果Windows使用者沒有使用登錄檔的許可權呢?

後記:

使用下面的定義:

Function long ShellExecute ( &

long hwnd, &

string lpVerb, &

string lpFile, &

string lpParameters, &

string lpDirectory, &

long nShowCmd &

) Library "shell32.dll" Alias For "ShellExecuteW"

可以在PB11下使用

[@more@]ShellExecute PB11

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9036/viewspace-1009212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章