如何得知服務正在Run。 |
缺席
|
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
可以參考下面這個範例再加以修改 ============================================================
<textarea class="delphi" rows="10" cols="60" name="code"> unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, Dialogs, Winsvc; type TForm1=class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; ListBox1: TListBox; procedure Button1Click(Sender:TObject); procedure Button3Click(Sender:TObject); procedure Button2Click(Sender:TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private {Private declarations} public hscmanager, hService: SC_HANDLE; returnstatus: TServiceStatus; {Publicdeclarations} end; var Form1: TForm1; implementation {$R *.DFM} //在ListBox中列出所有Service procedure TForm1.Button1Click(Sender:TObject); var BytesNeeded, serviceReturned, resumeHandle: Dword; returnflag: Bool; lpservice: Array[0..100] of TEnumServiceStatus; service: TEnumServiceStatus; i, bytes: Dword; begin ListBox1.Items.Clear; returnflag := False; resumeHandle := 0; hscmanager := OpenSCManager(nil, SERVICES_ACTIVE_DATABASEW, SC_MANAGER_ALL_ACCESS);//打開service control manager database if hscmanager < 0 then Begin ShowMessage('無法打開Service Control Manager Database'); Exit; End; returnflag := EnumServicesStatus( hscmanager, SERVICE_WIN32,SERVICE_STATE_ALL, service, sizeof(service), BytesNeeded, serviceReturned, resumeHandle); //列出Service if (returnflag = False) and (GetLastError() = ERROR_MORE_DATA) then begin bytes := BytesNeeded sizeof(TEnumServiceStatus); EnumServicesStatus(hscmanager, SERVICE_WIN32,SERVICE_STATE_ALL, lpservice[0], bytes, BytesNeeded, serviceReturned, resumeHandle); for i := 0 to serviceReturned - 1 do begin ListBox1.Items.Add(lpservice[i].lpServiceName ': ' lpservice[i].lpDisplayName); end; end; end; //啟動ListBox中Selected的Service procedure TForm1.Button2Click(Sender:TObject); var i: integer; lpServiceArgVectors: Pchar; begin lpServiceArgVectors := nil; for i := 0 to (ListBox1.Items.Count - 1) do if ListBox1.Selected[i] then begin hService := OpenService(hscmanager, Pchar(ListBox1.Items[i]), SERVICE_ALL_ACCESS); //打開此Service if hService < 0 then begin ShowMessage('無法打開此Service'); Exit; end; QueryServiceStatus(hService, returnstatus); //查看此Service的狀態 if returnstatus.dwCurrentState = SERVICE_STOPPED then //如果此Service已停止則啟動它 StartService(hService, 0, lpServiceArgVectors); CloseServiceHandle(hService);//關閉此Service end; end; //停止ListBox中Selected的Service procedure TForm1.Button3Click(Sender:TObject); var i:integer; begin for i := 0 to (ListBox1.Items.Count - 1) do if ListBox1.Selected[i] then begin hService := OpenService(hscmanager, Pchar (ListBox1.Items[i]), SERVICE_ALL_ACCESS); //打開此Service if hService < 0 then begin ShowMessage('無法打開此Service'); Exit; end; QueryServiceStatus(hService, returnstatus); //查看此Service的狀態 if returnstatus.dwCurrentState = SERVICE_RUNNING then //如果此Service啟動中則停止它 ControlService(hService, SERVICE_CONTROL_STOP, returnstatus); CloseServiceHandle(hService);//關閉此Service end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin //關閉Service Control Manager Database CloseServiceHandle(hscmanager); end; end. </textarea> |
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
|
Samlee
一般會員 發表:13 回覆:12 積分:5 註冊:2002-07-28 發送簡訊給我 |
為什麼我總是得不到Service的list.不知道是那個地方寫錯了.可以指正一下嗎. 謝謝
<textarea class="cpp" rows="10" cols="60" name="code"> DWord BytesNeeded, serviceReturned, resumeHandle; bool returnflag; LPENUM_SERVICE_STATUS lpservice[100]; LPENUM_SERVICE_STATUS service; DWord i, bytes; SC_HANDLE hscmanager, hService; hscmanager = OpenSCManager(NULL,SERVICES_ACTIVE_DATABASEA, SC_MANAGER_ALL_ACCESS); if(hscmanager<0) ShowMessage("ttt"); returnflag = EnumServicesStatus( hscmanager, SERVICE_WIN32, SERVICE_STATE_ALL, service, sizeof(service), (unsigned long*)&BytesNeeded, (unsigned long*)&serviceReturned, (unsigned long*)&resumeHandle); // if ((returnflag == False) && (GetLastError() == ERROR_MORE_DATA)) // ShowMessage("666"); bytes = BytesNeeded sizeof(LPENUM_SERVICE_STATUS); returnflag=EnumServicesStatus( hscmanager, SERVICE_WIN32, SERVICE_STATE_ALL, *lpservice, bytes, (unsigned long*)&BytesNeeded, (unsigned long*)&serviceReturned, (unsigned long*)&resumeHandle); AnsiString sServiceName,sDisplayName,tem; for (i=0; i>serviceReturned-1;i ){ sServiceName=lpservice[i]->lpServiceName; sDisplayName=lpservice[i]->lpDisplayName; tem=sServiceName ":" sDisplayName; ListBox1->Items->Add(sServiceName ": " sDisplayName); } </textarea> |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
[發表] 顯示 Services 和執行狀態 (Service List)(含 Source Code)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=86822
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |