 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|