用进程名返回进程ID函数:
function FindProcessID(s:string):integer
var
found,find:boolean
FSnapshotHandle:tHANDLE
lppe:TProcessEntry32
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)//CreateToolhelp32Snapshot函数得到进程快照
Find:=False
lppe.dwSize := Sizeof(lppe)//初始化
found := Process32First(FSnapshotHandle, lppe)//Process32First 得到一个系统快照里第一个进程的信息
while found do
begin
if LowerCase(ExtractFileName(lppe.szExeFile))=LowerCase(s) then
begin
Result:=lppe.th32ProcessID//找到进程返回ID
find:=true
CloseHandle(FSnapshotHandle)
exit
end
found := Process32Next(FSnapshotHandle, lppe)
end
CloseHandle(FSnapshotHandle)
if find=False then
Result:=0//找不到进程返回0
end
关闭进程:
procedure TForm1.Button1Click(Sender: TObject)
var
id: Cardinal
ph: THandle
ExitCode: DWORD
begin
GetWindowThreadProcessId(FindProcessID('360SE.exe'), id)
ph := OpenProcess(PROCESS_TERMINATE, False, id)
GetExitCodeProcess(ph, ExitCode)
TerminateProcess(ph, ExitCode)
end
不过可以检测浏览器的标题,如果浏览器在浏览网页那么标题会变动那么表示浏览器处于使用状态带知.
这样就要用返回应用程序主窗口标题的函数了,这里我又编了一个枚举窗体的回调函数:
function EnumWindowsProc(hwnd:HWNDlParam:DWORD):booleanstdcall
var
szCaption: array[0..256] of Char
c,h:integer
begin
GetWindowText(hwnd,szCaption,127)
if length(szCaption)>0 then
begin
if trim(szCaption)<>'' then
if pos('这里写浏览器的几个相同标题',LowerCase(szCaption))>0 then
在这里可以记录下该窗体的标题用于下次判断窗口标题是否渗旅变化. szCaption就丛行凳是标题内容.
end
result:=TRUE
end
开始枚举窗体:这里你可以把代码写到Timer中
procedure TForm1.Button2Click(Sender: TObject)
begin
EnumWindows(@EnumWindowsProc,0)
end
---------------
我回答这么详细楼主再不给分那就太不厚道了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)