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

請問 ShellExecute

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
richshih



註冊時間: 2007-10-11
文章: 153


第 1 樓

發表發表於: 星期五 十月 22, 2010 3:04 pm    文章主題: 請問 ShellExecute 引言回覆

API 函數ShellExecute() 叫用時 他會一面執行api 一面繼續走vfp程式
請問如何叫用ShellExecute() 等他關閉後 再走vfp程式
或是另有其它適當的API FUNTION
回頂端
檢視會員個人資料 發送私人訊息
CCB2000



註冊時間: 2009-03-25
文章: 97


第 2 樓

發表發表於: 星期五 十月 22, 2010 4:11 pm    文章主題: 引言回覆

參攷:

FUNCTION f_execute

PARAMETER m.q_file,m.q_parameters,m.q_directory,m.q_show,m.q_wait,m.q_secondwait

* m.q_file =
* m.q_parameters =
* m.q_directory =
* m.q_show =
* m.q_wait =
* m.q_secondwait =

PRIVATE m.q_execute
m.q_execute=.F.

IF TYPE("m.q_file")#"C"
m.q_file=""
ENDI

IF TYPE("m.q_parameters")#"C"
m.q_parameters=""
ENDI

IF TYPE("m.q_directory")#"C"
m.q_directory=""
ENDI

PRIVATE m.q_sw_hide
PRIVATE m.q_sw_shownormal
PRIVATE m.q_sw_normal
PRIVATE m.q_sw_showminimized
PRIVATE m.q_sw_showmaximized
PRIVATE m.q_sw_maximize
PRIVATE m.q_sw_shownoactivate
PRIVATE m.q_sw_show
PRIVATE m.q_sw_minimize
PRIVATE m.q_sw_showminnoactive
PRIVATE m.q_sw_showna
PRIVATE m.q_sw_restore
PRIVATE m.q_sw_showdefault
PRIVATE m.q_sw_forceminimize
PRIVATE m.q_sw_max
m.q_sw_hide = 0
m.q_sw_shownormal = 1
m.q_sw_normal = 1
m.q_sw_showminimized = 2
m.q_sw_showmaximized = 3
m.q_sw_maximize = 3
m.q_sw_shownoactivate = 4
m.q_sw_show = 5
m.q_sw_minimize = 6
m.q_sw_showminnoactive = 7
m.q_sw_showna = 8
m.q_sw_restore = 9
m.q_sw_showdefault = 10
m.q_sw_forceminimize = 11
m.q_sw_max = 11

IF TYPE("m.q_show")#"N"
m.q_show=m.q_sw_shownormal
ENDI

IF TYPE("m.q_wait")#"N"
m.q_wait=0
ENDI

IF TYPE("m.q_secondwait")#"N"
m.q_secondwait=0
ENDI

*IF !FILE(m.p_dirsystem+"shell32.dll")
* =pcopy(m.p_dirdbk+"dbk_shell32.dl_",m.p_dirsystem+"shell32.dll",1)
*ENDI
*IF !FILE(m.p_dirsystem+"shell32.dll")
* m.q_execute=.F.
* RETU m.q_execute
*ENDI

PRIVATE m.q_errnum,m.q_erroron
m.q_errnum=0
m.q_erroron=ON("ERROR")
ON ERROR m.q_errnum=ERROR()
DECLARE integer "ShellExecuteEx" IN ("shell32.dll") ;
string @lpexecinfo
ON ERROR &q_erroron

IF .F.
PUBLIC shellexecuteex(1)
ENDI

IF m.q_errnum#0
m.q_execute=.F.
RETU m.q_execute
ENDI

DECLARE integer "WaitForSingleObject" IN win32api ;
integer hhandle,;
integer dwmilliseconds

DECLARE integer "RtlMoveMemory" IN win32api ;
integer hpvdest,;
string @hpvsource,;
integer cbcopy

DECLARE integer "GetProcessHeap" IN win32api

DECLARE integer "HeapAlloc" IN win32api ;
integer hheap,;
integer dwflags,;
integer dwbytes

DECLARE integer "HeapFree" IN win32api ;
integer hheap,;
integer dwflags,;
integer lpmem

DECLARE integer "Sleep" IN win32api ;
integer dwmilliseconds

IF .F.
PUBLIC waitforsingleobject(1)
PUBLIC rtlmovememory(1)
PUBLIC getprocessheap(1)
PUBLIC heapalloc(1)
PUBLIC heapfree(1)
PUBLIC sleep(1)
ENDI

PRIVATE m.q_heap_zero_memory
PRIVATE m.q_heap_generate_exceptions
PRIVATE m.q_heap_zero_or_generate
m.q_heap_zero_memory=0*16+8 && &H08
m.q_heap_generate_exceptions=0*16+4 && &H04
m.q_heap_zero_or_generate=0*16+12 && &H0C = &H08 OR &H04

PRIVATE m.q_execinfo_cbsize
PRIVATE m.q_execinfo_fmask
PRIVATE m.q_execinfo_hwnd
PRIVATE m.q_execinfo_lpverb
PRIVATE m.q_execinfo_lpfile
PRIVATE m.q_execinfo_lpparameters
PRIVATE m.q_execinfo_lpdirectory
PRIVATE m.q_execinfo_nshow
PRIVATE m.q_execinfo_hinstapp
PRIVATE m.q_execinfo_lpidlist
PRIVATE m.q_execinfo_lpclass
PRIVATE m.q_execinfo_hkeyclass
PRIVATE m.q_execinfo_dwhotkey
PRIVATE m.q_execinfo_hicon
PRIVATE m.q_execinfo_hprocess
m.q_execinfo_cbsize=0 && Long
m.q_execinfo_fmask=0 && Long
m.q_execinfo_hwnd=0 && Long
m.q_execinfo_lpverb=0 && Long
m.q_execinfo_lpfile=0 && Long
m.q_execinfo_lpparameters=0 && Long
m.q_execinfo_lpdirectory=0 && Long
m.q_execinfo_nshow=0 && Integer(Long)
m.q_execinfo_hinstapp=0 && Long
m.q_execinfo_lpidlist=0 && Long
m.q_execinfo_lpclass=0 && Long
m.q_execinfo_hkeyclass=0 && Long
m.q_execinfo_dwhotkey=0 && Long
m.q_execinfo_hicon=0 && Long
m.q_execinfo_hprocess=0 && Long

PRIVATE m.q_see_mask_classname
PRIVATE m.q_see_mask_classkey
PRIVATE m.q_see_mask_idlist
PRIVATE m.q_see_mask_invokeidlist
PRIVATE m.q_see_mask_icon
PRIVATE m.q_see_mask_hotkey
PRIVATE m.q_see_mask_nocloseprocess
PRIVATE m.q_see_mask_connectnetdrv
PRIVATE m.q_see_mask_flag_ddewait
PRIVATE m.q_see_mask_doenvsubst
PRIVATE m.q_see_mask_flag_no_ui
PRIVATE m.q_see_mask_unicode
PRIVATE m.q_see_mask_no_console
PRIVATE m.q_see_mask_asyncok
PRIVATE m.q_see_mask_hmonitor
m.q_see_mask_classname = 1 && &H00000001
m.q_see_mask_classkey = 3 && &H00000003
m.q_see_mask_idlist = 4 && &H00000004
m.q_see_mask_invokeidlist = 12 && &H0000000c
m.q_see_mask_icon = 1*16+0 && &H00000010
m.q_see_mask_hotkey = 2*16+0 && &H00000020
m.q_see_mask_nocloseprocess = 4*16+0 && &H00000040
m.q_see_mask_connectnetdrv = 8*16+0 && &H00000080
m.q_see_mask_flag_ddewait = (1*16+0)*16+0 && &H00000100
m.q_see_mask_doenvsubst = (2*16+0)*16+0 && &H00000200
m.q_see_mask_flag_no_ui = (4*16+0)*16+0 && &H00000400
m.q_see_mask_unicode = ((4*16+0)*16+0)*16+0 && &H00004000
m.q_see_mask_no_console = ((8*16+0)*16+0)*16+0 && &H00008000
m.q_see_mask_asyncok = ((((1*16+0)*16+0)*16+0)*16+0)*16+0 && &H00100000
m.q_see_mask_hmonitor = ((((2*16+0)*16+0)*16+0)*16+0)*16+0 && &H00200000

PRIVATE m.q_verb
m.q_verb="open"

PRIVATE m.q_heapalloc
m.q_heapalloc=.T.

DO WHILE .T.

IF !m.q_verb==""
m.q_execinfo_lpverb=heapalloc(getprocessheap(),m.q_heap_zero_or_generate,LEN(m.q_verb)+1)
IF m.q_execinfo_lpverb=0
m.q_heapalloc=.F.
EXIT
ENDI
=rtlmovememory(m.q_execinfo_lpverb,@m.q_verb,LEN(m.q_verb)+1)
ENDI

IF !m.q_file==""
m.q_execinfo_lpfile=heapalloc(getprocessheap(),m.q_heap_zero_or_generate,LEN(m.q_file)+1)
IF m.q_execinfo_lpfile=0
m.q_heapalloc=.F.
EXIT
ENDI
=rtlmovememory(m.q_execinfo_lpfile,@m.q_file,LEN(m.q_file)+1)
ENDI

IF !m.q_parameters==""
m.q_execinfo_lpparameters=heapalloc(getprocessheap(),m.q_heap_zero_or_generate,LEN(m.q_parameters)+1)
IF m.q_execinfo_lpparameters=0
m.q_heapalloc=.F.
EXIT
ENDI
=rtlmovememory(m.q_execinfo_lpparameters,@m.q_parameters,LEN(m.q_parameters)+1)
ENDI

IF !m.q_directory==""
m.q_execinfo_lpdirectory=heapalloc(getprocessheap(),m.q_heap_zero_or_generate,LEN(m.q_directory)+1)
IF m.q_execinfo_lpdirectory=0
m.q_heapalloc=.F.
EXIT
ENDI
=rtlmovememory(m.q_execinfo_lpdirectory,@m.q_directory,LEN(m.q_directory)+1)
ENDI

EXIT

ENDDO

IF m.q_heapalloc=.F.
IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.F.
RETU m.q_execute
ENDI

m.q_execinfo_cbsize=4*15
IF m.q_wait=0
m.q_execinfo_fmask=m.q_see_mask_flag_no_ui
ELSE
m.q_execinfo_fmask=m.q_see_mask_flag_no_ui+m.q_see_mask_flag_ddewait+m.q_see_mask_nocloseprocess
ENDI
m.q_execinfo_nshow=m.q_show

PRIVATE m.q_execinfo
m.q_execinfo=;
fval2str(m.q_execinfo_cbsize,4)+;
fval2str(m.q_execinfo_fmask,4)+;
fval2str(m.q_execinfo_hwnd,4)+;
fval2str(m.q_execinfo_lpverb,4)+;
fval2str(m.q_execinfo_lpfile,4)+;
fval2str(m.q_execinfo_lpparameters,4)+;
fval2str(m.q_execinfo_lpdirectory,4)+;
fval2str(m.q_execinfo_nshow,4)+;
fval2str(m.q_execinfo_hinstapp,4)+;
fval2str(m.q_execinfo_lpidlist,4)+;
fval2str(m.q_execinfo_lpclass,4)+;
fval2str(m.q_execinfo_hkeyclass,4)+;
fval2str(m.q_execinfo_dwhotkey,4)+;
fval2str(m.q_execinfo_hicon,4)+;
fval2str(m.q_execinfo_hprocess,4)

IF shellexecuteex(@m.q_execinfo)=0
IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.F.
RETU m.q_execute
ENDI

IF m.q_wait=0
IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.T.
RETU m.q_execute
ENDI

PRIVATE m.q_hinstapp
m.q_hinstapp=fstr2val(SUBS(m.q_execinfo,4*8+1,4))
IF m.q_hinstapp<=32
IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.F.
RETU m.q_execute
ENDI

PRIVATE m.q_hprocess
m.q_hprocess=fstr2val(SUBS(m.q_execinfo,4*14+1,4))
IF m.q_hprocess=0
IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.F.
RETU m.q_execute
ENDI

PRIVATE m.q_infinite
m.q_infinite=((((((15*16+15)*16+15)*16+15)*16+15)*16+15)*16+15)*16+15
PRIVATE m.q_waitfor_failed
m.q_waitfor_failed=-1
PRIVATE m.q_waitfor_signaled
m.q_waitfor_signaled=0

DO WHILE .T.

PRIVATE m.q_waitfor
m.q_waitfor=waitforsingleobject(m.q_hprocess,0)

IF m.q_waitfor=m.q_waitfor_failed
IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.F.
RETU m.q_execute
ENDI

IF m.q_waitfor=m.q_waitfor_signaled
EXIT
ENDI

IF !m.q_secondwait=0
=sleep(INT(m.q_secondwait*1000))
ENDI

ENDDO

IF !m.q_execinfo_lpverb=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpverb)
ENDI
IF !m.q_execinfo_lpfile=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpfile)
ENDI
IF !m.q_execinfo_lpparameters=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpparameters)
ENDI
IF !m.q_execinfo_lpdirectory=0
=heapfree(getprocessheap(),0,m.q_execinfo_lpdirectory)
ENDI
m.q_execute=.T.
RETU m.q_execute

* END OF FUNCTION F_EXECUTE.

FUNCTION fstr2val

PARAMETER m.q_str

* m.q_str =

PRIVATE m.q_val

m.q_val=0

DO WHILE !m.q_str==""
m.q_val=m.q_val*256+ASC(RIGHT(m.q_str,1))
m.q_str=LEFT(m.q_str,LEN(m.q_str)-1)
ENDDO

RETU m.q_val

* END OF FUNCTION FSTR2VAL.

FUNCTION fval2str

PARAMETER m.q_val,m.q_nn

* m.q_val =
* m.q_nn =

PRIVATE m.q_str

IF TYPE("m.q_nn")#"N"
m.q_nn=0
ENDI

m.q_nn=ABS(INT(m.q_nn))

m.q_val=ABS(INT(m.q_val))

m.q_str=""

IF m.q_nn=0

DO WHILE m.q_val>0
m.q_str=m.q_str+CHR(MOD(m.q_val,256))
m.q_val=INT(m.q_val/256)
ENDDO

ELSE

DO WHILE LEN(m.q_str)<m.q_nn
m.q_str=m.q_str+CHR(MOD(m.q_val,256))
m.q_val=INT(m.q_val/256)
ENDDO

ENDI

RETU m.q_str

* END OF FUNCTION FVAL2STR.

_________________
VFP C++編譯軟件 (VFP C++ Compiler): http://www.baiyujia.com/vfpcompiler
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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