線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2236
推到 Plurk!
推到 Facebook!

如何得知服務正在Run。

缺席
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-12 20:20:51 IP:163.32.xxx.xxx 未訂閱
在區域網路裡如何得知某電腦有某一個所要的service是正在Run的。 例如可以得知該電腦其WinVNC service正在Run。
------
我也在努力學習中,若有錯謬請見諒。
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-18 12:58:32 IP:61.221.xxx.xxx 未訂閱
可以參考下面這個範例再加以修改 ============================================================ 
<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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-22 09:31:07 IP:163.15.xxx.xxx 未訂閱
謝謝您的回應。
------
我也在努力學習中,若有錯謬請見諒。
Samlee
一般會員


發表:13
回覆:12
積分:5
註冊:2002-07-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-11 16:51:41 IP:202.154.xxx.xxx 未訂閱
為什麼我總是得不到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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-13 18:51:30 IP:203.204.xxx.xxx 訂閱
[發表] 顯示 Services 和執行狀態 (Service List)(含 Source Code)
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=86822
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-04-25 18:08:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!