delphi中怎么判断scktsrvr.exe是否启动

delphi中怎么判断scktsrvr.exe是否启动,第1张

1、先use TLHelp32, PsAPI,使用其中Process32First的函数和Process32Next遍历所有进程。

2、然后判断是否存在scktsrvr.exe。

3、函数代码:

function checkAppExists(appN: string): Boolean

var

  lppe: TProcessEntry32

  found : boolean

  Hand : THandle

  磨羡P:DWORD

  s:string

begin

  result := false

  Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0)

  found := Process32First(Hand,lppe)

  while found do

  begin

    s := StrPas(lppe.szExeFile)

    if lppe.th32ProcessID>0 then

      p := lppe.th32ProcessID

    else

      p := 0

    if (s = appN) then

    begin

      Result:= True

      Break

    end  

    found := Process32Next(Hand,lppe)

  end

end

4、程序示例,判断scktsrvr.exe是否存在瞎戚拍:

procedure TForm1.btn1Click(Sender: TObject)

begin

  if checkAppExists('scktsrvr.exe') then

  begin

    ShowMessage('scktsrvr.exe在运行!')

  仔腊end

  else

  begin

    ShowMessage('scktsrvr.exe没有运行!')

  end    

end

5、效果如下:

我写了一个函数在Windows XP SP2下测试通过,可以直接得到状态字符串

调用格式很简单,查看某服务状态的最简单方法:

ShowMessage(GetServiceStatusString('Brower'))

将显示Computer Browser服务的运行情况,Computer Browser服务的服务名称是Browser,还有Remote Procedure Call (RPC)服务的名字是RpcSs,Telnet的服务名称是TlntSvr等等

我没使用过mysql和apache服务,因此我无法知道他们的服务名字,但是你可以开始->运行->services.msc然后在服务列表中找到你要的服务,双击它,第一页的最上边就是服务名称,这是服务自己注如咐册的名称,无论使用什么办法,还是要使用服务名称来区别服务

本函数得到是运行状态字符串,明白了程序原理的话,很容易将它转化成数字返回值,需要的话告诉我.函数是独立的,没有使用类库,不需要控件安装,其实就是API实现的,因此效率最高.

uses

  WinSvc //引用此单元

 

function GetServiceStatusString(sServiceName: string): string

var

  hService, hSCManager: SC_HANDLE

  SS: TServiceStatus

begin

  hSCManager := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT)

  if hSCManager = 0 then

  begin

    result := 'Can not open the service control manager'

    exit

  end

  hService := OpenService(hSCManager, PChar(sServiceName), SERVICE_QUERY_STATUS)

  if hService = 0 then

  begin

    CloseServiceHandle(hSCManager)

    result := 'Can not open the service(' + sServiceName + ')'

    exit

  end

  if not QueryServiceStatus(hService, SS) then

    result := 'Can not query the service status'

  else

  begin

    case SS.dwCurrentState of

      SERVICE_CONTINUE_PENDING:

  渣宏纯   绝信   result := 'The service(' + sServiceName + ') continue is pending'

      SERVICE_PAUSE_PENDING:

        result := 'The service(' + sServiceName + ') pause is pending.'

      SERVICE_PAUSED:

        result := 'The service(' + sServiceName + ') is paused.'

      SERVICE_RUNNING:

        result := 'The service(' + sServiceName + ') is running.'

      SERVICE_START_PENDING:

        result := 'The service(' + sServiceName + ') is starting.'

      SERVICE_STOP_PENDING:

        result := 'The service(' + sServiceName + ') is stopping.'

      SERVICE_STOPPED:

        result := 'The service(' + sServiceName + ') is not running.'

    else

      result := 'Unknown Status'

    end

  end

  CloseServiceHandle(hSCManager)

  CloseServiceHandle(hService)

end

function E9FileStatus(Const Origin: string): boolean

var

F: TFileStream

begin

try

try

F := TFileStream.Create(Origin, fmOpenReadWrite OR fmShareExclusive)

Result := true

finally

F.Free

end

except

Result := false

end

end

------------------

fmCreate 根据所给名字创建文件。如果所给名字的文件存在,以写状态打开文件。

fmOpenRead 以只读状态打开文件

fmOpenWrite 以只写状态打开文件。文件全部重写,替代已有内容。

fmOpenReadWrite 打开文件,修改而不是替换文件内容。

共享(share)状态必须是以下值之一:

值 意义

fmShareCompat 共享与文件控制块(FCB)的打开方式兼容。

fmShareExclusive 其他程序不能以弯悄任何理由打开文件。

fmShareDenyWrite 其他程序能以只读方式打开文件,但不能写。

fmShareDenyRead 其他程序能以只写方式打开文件,但不能读。

fmShareDenyNone 不禁春歼止其他程序读或写文件。

如果文扒闹冲件不能被打开, Create 将产生异常。

如果文件未被锁定,将返回true


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12475356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存