  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 十二月 23, 2004 11:32 am    文章主題: 執行程式後, 在一段時間後將該程式關閉, 隔3秒再進入一次, 一直到你手動將該程式關閉為止 | 
				     | 
			 
			
				
  | 
			 
			
				這個程式是自己有如主題所說的需求而寫的, 一些程式碼用 google 找到的來改寫, 網路上寶藏還真多 ^o^
 
 	  | 代碼: | 	 		  
 
LPARA mexename , pcTitle , mbtncaption , mInterval , mwaitime
 
* 請將這個程式編輯成執行檔, 假設這個執行檔名為timerun
 
* 然後建立一個捷徑 , timerun 你要自動定時執行的程式  該程式的caption  要結束該程式時要按的按鈕之caption  執行檔在幾秒後會自動關閉   等待下一次執行的秒數
 
 
if !empty( minterval )      &&--利用傳參數來的方式 來限定時間
 
   minterval = val( minterval )
 
else
 
   mInterval = 60*60   &&--內定是 60 分鐘結束程式再進入一次.
 
endif
 
 
if empty( mwaitime )
 
   mwaitime = 3
 
else
 
   mwaitime = val( mwaitime )      &&--利用傳參數來的方式 來設定關閉程式後的間隔時間
 
endif
 
 
 
* mInterval=1
 
Declare INTEGER FindWindow IN user32;
 
   STRING lpClassName,;
 
   STRING lpWindowName
 
 
Declare INTEGER FindWindowEx IN user32;
 
   INTEGER hwndParent,       ;
 
   INTEGER hwndChildAfter,   ;
 
   STRING lpszClassName,    ;
 
   STRING lpszWindowCaption
 
 
Declare INTEGER SendMessage IN user32;
 
   INTEGER hWnd,;
 
   INTEGER Msg,;
 
   INTEGER wParam,;
 
   INTEGER lParam
 
 
_screen.WindowState = 1   &&--將本程式縮到最小
 
 
oWS = CreateObject("WScript.Shell") 
 
do while .t.
 
   *ocall = oWS.Exec(mexename+".exe")
 
   ocall = oWS.run( mexename+".exe",2,.F.)   &&-因為用exec 會造成 中斷目前的程式, 而跳到 callerid.exe 的視窗, 所以才改用 run
 
   *mprocessid = ocall.ProcessID 
 
   *mtime = 0
 
   for i=1 to mInterval
 
      minkey = inkey( 1 )   &&--1秒檢查一次是否自己將要定時執行的程式關閉了.
 
      wndDialog = FindWindow( 0, pcTitle )
 
      if minkey=27
 
         if wndDialog > 0
 
            closewindow(pcTitle , mbtncaption )
 
         endif
 
         quit
 
      endif
 
      if wndDialog = 0      &&--   目前沒有在執行中, 就直接離開
 
         quit
 
      endif
 
   next
 
   *if wndDialog > 0      &&--   目前沒有在執行中, 就直接離開
 
      closewindow(pcTitle ,mbtncaption )      &&--送 keyboard 0 有時會有問題.
 
   *endif
 
   inkey( mwaitime )
 
enddo
 
quit
 
 
************************
 
Procedure CloseWindow
 
Lparameters pcTitle, pcButtonCaption
 
 
#Define WM_COMMAND     0x0111
 
#Define WM_LBUTTONDOWN 0x0201
 
#Define WM_LBUTTONUP   0x0202
 
 
wndDialog = FindWindow( 0, pcTitle )
 
wndButton = 0
 
 
local mret
 
mret = 0
 
If wndDialog > 0
 
* Sometimes Message WM_COMMAND 0x00110818 isn't enough,
 
*  if you MUST click "Cancel" or "Yes", etc
 
*  then provide a button caption
 
   If VarType(pcButtonCaption)='C'
 
      wndButton = FindWindowEx( wndDialog, 0, 'Button', ;
 
         pcButtonCaption )
 
      If wndButton > 0
 
*!*            SendMessage(wndButton, WM_LBUTTONDOWN, 1, 0x00120025 )
 
*!*            SendMessage(wndButton, WM_LBUTTONUP,   0, 0x00120025 )
 
*!*   * Button Clicked message
 
*!*            SendMessage(wndDialog, WM_COMMAND,     3, wndButton  )
 
         mret = SendMessage(wndDialog, WM_COMMAND,     1, wndButton  )      &&--用這個就可以離開了.
 
      Endif
 
   Endif
 
 
   *mret = SendMessage(wndDialog, WM_COMMAND, 1, 0x00110818 )
 
Endif
 
Return mret=1
 
 | 	 
  _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		bin1x
 
 
  註冊時間: 2004-08-27 文章: 462
 
  第 2 樓
  | 
		
			
				 發表於: 星期四 十二月 23, 2004 11:47 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				Lpara 這樣帶
 
是否如同命令列引數一般的用法
 
可是為什麼要用
 
lpara
 
para不能用嗎?
 
如果是區域變數
 
priv 不就可以用了
 
有點疑問,請指教一下
 
且在程式中
 
mexename 的值沒有被assign
 
這也是疑問?
 
假設執行檔是test1.exe
 
是否應這樣帶,或是......?
 
c:\>test1 test1 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 3 樓
  | 
		
			
				 發表於: 星期四 十二月 23, 2004 1:32 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				lpara 跟 para 差別在於 lpara 接受參數的變數名稱只會在這個自定函數只使用, 也就等於使用 local 變數
 
 
mexename 是在執行時給的, 所以我假設這個程式在編輯成執行檔時的名稱叫timerun , 而你要定時執行的程式是 test1.exe 那用法是
 
c:\>timerun test1 該程式的caption  要結束該程式時要按的按鈕之caption  3600   3
 
這樣timerun會自動執行test1.exe 且在3600秒後, 自動按test1.exe的結束按鈕, 再等3秒鐘又再一次自動執行test1.exe , 一直到你自己手動按test1.exe的結束按鈕時再關閉timerun.
 
 
我會寫這個程式是因為我有一個別人寫的程式不穩定,而我又沒辨法修改它, 只好寫一個程式來定時關閉它再自動執行它. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |