檢測某個程式是否在程序中執行

2021-04-20 00:29:18 字數 3535 閱讀 7608

從dkfdtf 「列舉系統程序及呼叫模組

」中簡化出:

clear

?checkexerun('vfp9.exe')

?checkexerun('excel.exe') *

檢測某個程式是否在程序中執行

function

checkexerun

#define

#define

error_no_more_files18

lparameters

tcexename

declare long

getlasterror

in win32api

&&獲取最後錯誤**值

declare long

createtoolhelp32snapshot

in win32api ;

&&建立程序快照

long

dwflags,

long

th32processid

declare long

process32first

in win32api

long

hsnapshot,

string

@ lppe

declare long

process32next

in win32api

long

hsnapshot,

string

@ lppe

declare long

closehandle

in win32api

long

hobject

local

lnhss,lcbuff,lnpid,lnsize,llstate,lcprogname

&&if lnhss = -1

return

.f.

endif

lnsize = 8 * 4 + 260

*bintoc(4 + lnsize,'rs')

結構長度(二進位制),+ 7個dword + 1上long 8 * 4(dword和longs均4個位元組) char szexefile[max_path] max_path(260)

*詳細內容參考msdn的processentry32 結構

lcbuff =

bintoc

(4 + lnsize,'rs') +

replicate

(chr

[0],lnsize)

if process32first(lnhss,@lcbuff) = 0

&&從快照中獲取第乙個程序,若為0則關閉快照並返回

closehandle(lnhss)

return

.f.

endif

do while

.t. *

將二進位制(9-12中的4個位元組)轉為數值獲取程序標識(pid)

lnpid =

ctobin

(substr

(lcbuff,9,4),'rs')

lcprogname =

lower

(justfname

(getimgfile(lnpid,0)))

&&根據pid獲取對應映像程式(exe)

if lcprogname ==

lower

(tcexename)

llstate = .t.

exit

endif

lcbuff =

bintoc

(4 + lnsize,'rs') +

replicate

(chr

[0],lnsize)

*獲取下乙個程序,若為0或獲取錯誤則退出迴圈

if process32next(lnhss,@lcbuff) = 0 or error_no_more_files == getlasterror()

exit

endif

enddo

closehandle(lnhss)

&&關閉控制代碼

return

llstate

endfunc

*根據程序id獲取對應的映像名(.exe)

procedure

getimgfile

#define

process_vm_read0x0010

#define

process_query_information0x0400

#define

process_all_access

0x001fffff

*接收傳入引數

lparameters

tnpid,thmodule

*定義相關api函式

declare long

openprocess

in win32api ;

&&開啟程序物件

long

dwdesiredaccess,

long

binherithandle,

long

dwprocessid

declare long

getmodulefilenameex

in psapi ;

&&獲取某個程序對應檔案的完全路徑名

long

hprocess,

long

hmodule,

string

@ lpexename,

long

dwsize

if tnpid = 0

return

''

endif

local

lnhproc,lcfile,lnsize

*根據tnpid標識,從記憶體中讀取乙個程序,並查詢程序資訊,lnhproc為該程序控制代碼

lnhproc = openprocess(process_vm_read + process_query_information,0,tnpid)

if lnhproc = 0

return

''

else

lnsize = 260

lcfile =

replicate

(chr

[0],lnsize)

*根據lnhproc程序控制代碼,獲取該程序檔案的完全路徑及檔名

lnsize = getmodulefilenameex(lnhproc,thmodule,@lcfile,lnsize)

closehandle(lnhproc)

lcfile =

leftc

(lcfile,lnsize)

endif

return

lcfile

endproc

參考資料:http://blog.csdn.net/dkfdtf/archive/2008/07/05/2614284.aspx

用Linux守護程序檢測某個程式是否執行

實現功能 做的乙個嵌入式板子開機會自啟動乙個程式,但發現它工作數天後會退出。檢查記憶體使用並沒有洩漏,於是編寫了乙個守護程序來不斷檢查程式是否執行,沒執行則執行它,這是乙個折衷的辦法。說明 需要執行的程式是alarminte ce,位於目錄 rf 下面。我做了乙個指令碼duijiang來啟動這個al...

用Linux守護程序檢測某個程式是否執行

用linux守護程序檢測某個程式是否執行 環境 主機 fedora12 目標板 sc6410 目標板linux核心版本 2.6.36 實現功能 做的乙個嵌入式板子開機會自啟動乙個程式,但發現它工作數天後會退出。檢查記憶體使用並沒有洩漏,於是編寫了乙個守護程序來不斷檢查程式是否執行,沒執行則執行它,這...

檢測某個php程序執行狀態shell

一.主要shell bin bash executepath readlink f dirname 0 executelog readlink f executepath check.log envpath readlink f executepath env.sh source envpath s...