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

執行程式後, 在一段時間後將該程式關閉, 隔3秒再進入一次, 一直到你手動將該程式關閉為止

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


註冊時間: 2003-01-30
文章: 2157


第 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
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 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.

我會寫這個程式是因為我有一個別人寫的程式不穩定,而我又沒辨法修改它, 只好寫一個程式來定時關閉它再自動執行它.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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