亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

創建具有托盤的服務程序

2019-11-18 17:57:51
字體:
來源:轉載
供稿:網友

我的主頁: http://www.tommstudio.com/

Windows 2000/XP和2003等支持一種叫做"服務程序"的東西.程序作為服務啟動有以下幾個好處:

    (1)不用登陸進系統即可運行.
    (2)具有SYSTEM特權.所以你在進程管理器里面是無法結束它的.

    筆者在2003年為一公司開發機頂盒項目的時候,曾經寫過課件上傳和媒體服務,下面就介紹一下如何用Delphi7創建一個Service程序.
    運行Delphi7,選擇菜單File-->New-->Other--->Service application.將生成一個服務程序的框架.將工程保存為ServiceDemo.d
    我們的計劃是為這個服務添加一個主窗口,運行后任務欄顯示程序的圖標,雙擊圖標將顯示主窗口,上面有一個按鈕,點擊該按鈕將實現Ctrl+Alt+Del功能.

    實際上,服務程序莫認是工作于Winlogon桌面的,可以打開控制面板,查看我們剛才那個服務的屬性-->登陸,其中"允許服務與桌面交互"是不打鉤的.怎么辦?呵呵,回到IDE,注意那個布爾屬性:Interactive,當這個屬性為True的時候,該服務程序就可以與桌面交互了.

    File-->New-->Form為服務添加窗口FrmMain,單元保存為Unit_FrmMain,并且把這個窗口設置為手工創建.完成后的代碼如下:



unit Unit_Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Unit_FrmMain;

type
TDelphiService = class(TService)
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
DelphiService: TDelphiService;
FrmMain: TFrmMain;
implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  DelphiService.Controller(CtrlCode);
end;

function TDelphiService.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TDelphiService.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
  while not Terminated do
  begin
    Sleep(10);
    ServiceThread.ProcessRequests(False);
  end;
end;

procedure TDelphiService.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    Sleep(10);
    ServiceThread.ProcessRequests(False);
  end;
end;

procedure TDelphiService.ServicePause(Sender: TService;
var Paused: Boolean);
begin
  Paused := True;
end;

procedure TDelphiService.ServiceShutdown(Sender: TService);
begin
  gbCanClose := true;
  FrmMain.Free;
  Status := CSStopped;
  ReportStatus();
end;

procedure TDelphiService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
  Started := True;
  Svcmgr.Application.CreateForm(TFrmMain, FrmMain);
  gbCanClose := False;
  FrmMain.Hide;
end;

procedure TDelphiService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
  Stopped := True;
  gbCanClose := True;
  FrmMain.Free;
end;

end.



主窗口單元如下:


unit Unit_FrmMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, ShellApi, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

const
WM_TrayIcon = WM_USER + 1234;
type
TFrmMain = class(TForm)
Timer1: TTimer;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
IconData: TNotifyIconData;
procedure AddIconToTray;
procedure DelIconFromTray;
procedure TrayIconMessage(var Msg: TMessage); message WM_TrayIcon;
procedure SysButtonMsg(var Msg: TMessage); message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
FrmMain: TFrmMain;
gbCanClose: Boolean;
implementation

{$R *.dfm}

procedure TFrmMain.FormCreate(Sender: TObject);
begin
  FormStyle := fsStayOnTop; {窗口最前}
  SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); {不在任務欄顯示}
  gbCanClose := False;
  Timer1.Interval := 1000;
  Timer1.Enabled := True;
end;

procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := gbCanClose;
  if not CanClose then
  begin
    Hide;
  end;
end;

procedure TFrmMain.FormDestroy(Sender: TObject);
begin
  Timer1.Enabled := False;
  DelIconFromTray;
end;

procedure TFrmMain.AddIconToTray;
begin
  ZeroMemory(@IconData, SizeOf(TNotifyIconData));
  IconData.cbSize := SizeOf(TNotifyIconData);
  IconData.Wnd := Handle;
  IconData.uID := 1;
  IconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_Tip;
  IconData.uCallbackMessage := WM_TrayIcon;
  IconData.hIcon := Application.Icon.Handle;
  IconData.szTip := 'Delphi服務演示程序';
  Shell_NotifyIcon(NIM_ADD, @IconData);
end;

procedure TFrmMain.DelIconFromTray;
begin
  Shell_NotifyIcon(NIM_DELETE, @IconData);
end;

procedure TFrmMain.SysButtonMsg(var Msg: TMessage);
begin
  if (Msg.wParam = SC_CLOSE) or
  (Msg.wParam = SC_MINIMIZE) then Hide
  else inherited; // 執行默認動作
end;

procedure TFrmMain.TrayIconMessage(var Msg: TMessage);
begin
  if (Msg.LParam = WM_LBUTTONDBLCLK) then Show();
end;

procedure TFrmMain.Timer1Timer(Sender: TObject);
begin
  AddIconToTray;
end;

procedure SendHokKey;stdcall;
var
HDesk_WL: HDESK;
begin
  HDesk_WL := OpenDesktop ('Winlogon', 0, False, DESKTOP_JOURNALPLAYBACK);
  if (HDesk_WL <> 0) then
  if (SetThreadDesktop (HDesk_WL) = True) then
  PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG (MOD_ALT or MOD_CONTROL, VK_DELETE));
end;

procedure TFrmMain.Button1Click(Sender: TObject);
var
dwThreadID : DWORD;
begin
  CreateThread(nil, 0, @SendHokKey, nil, 0, dwThreadID);
end;

end.

program ServiceDemo;

uses
SvcMgr,
Unit_Main in 'Unit_Main.pas' {DelphiService: TService},
Unit_frmMain in 'Unit_frmMain.pas' {frmMain};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TDelphiService, DelphiService);
  Application.Run;
end.




窗體代碼如下:


object DelphiService: TDelphiService
OldCreateOrder = False
DisplayName = 'Delphi服務演示程序'
Interactive = True
OnContinue = ServiceContinue
OnExecute = ServiceExecute
OnPause = ServicePause
OnShutdown = ServiceShutdown
OnStart = ServiceStart
OnStop = ServiceStop
Left = 261
Top = 177
Height = 150
Width = 215
end

object frmMain: TfrmMain
Left = 192
Top = 107
Width = 696
Height = 480
Caption = '我的服務測試程序'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 296
Top = 264
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object Timer1: TTimer
OnTimer = Timer1Timer
Left = 120
Top = 192
end
end





上一篇:創建一個簡單的&quot;專家&quot;

下一篇:實現VirtualTree的Editor的功能定制之setBounds

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国产视频| 中文综合在线观看| 国产精品视频yy9099| 国产一区二区三区视频在线观看| 亚洲国产精品yw在线观看| 亚洲国产精品女人久久久| 91精品免费视频| 欧美激情啊啊啊| 2019亚洲日韩新视频| 亚洲一级免费视频| 亚洲第一综合天堂另类专| 国产精品久久久久aaaa九色| 国产精品高清网站| 97精品伊人久久久大香线蕉| 日韩成人久久久| 色yeye香蕉凹凸一区二区av| 2020久久国产精品| 亚洲国产成人久久综合| 久久精品国产2020观看福利| 色偷偷噜噜噜亚洲男人的天堂| 久久精品福利视频| 热久久免费视频精品| 欧美激情视频网| 欧美怡红院视频一区二区三区| 久久综合伊人77777蜜臀| 国产69精品99久久久久久宅男| 亚洲精品中文字幕有码专区| 欧美二区乱c黑人| 国产欧美久久一区二区| 精品国产拍在线观看| 性色av一区二区三区在线观看| 成人欧美一区二区三区在线| 国产主播欧美精品| xvideos成人免费中文版| 91av在线影院| 国产精品久久久久久久久久久久久久| 亚洲理论片在线观看| 91国语精品自产拍在线观看性色| 久久久久久亚洲| 亚洲国产女人aaa毛片在线| 亚洲人成网站999久久久综合| 欧美激情视频网站| 亚洲国产成人av在线| 成人久久一区二区三区| 66m—66摸成人免费视频| 午夜精品一区二区三区在线| 欧美成人性生活| 最近中文字幕2019免费| 国产精品日韩在线观看| 色偷偷噜噜噜亚洲男人| 清纯唯美亚洲综合| 久久伊人色综合| 亚洲视频网站在线观看| 一个人看的www久久| 美女啪啪无遮挡免费久久网站| 精品国产31久久久久久| 九九九热精品免费视频观看网站| 国产精品99久久99久久久二8| 亚洲精品在线观看www| 欧美在线一级va免费观看| 在线播放国产精品| 精品高清美女精品国产区| 九九九久久国产免费| 另类少妇人与禽zozz0性伦| 欧美性xxxx极品高清hd直播| 亚洲xxx大片| 亚洲精品电影网在线观看| 欧美特级www| 韩国三级电影久久久久久| 国产精品久久久久999| 亚洲激情视频在线播放| 一本一道久久a久久精品逆3p| 精品国产91久久久久久| 亚洲欧美国产高清va在线播| 亚洲国产精品一区二区久| 成人免费淫片视频软件| 欧美日韩亚洲国产一区| 亚洲最大中文字幕| 亚洲国产精品99久久| 亚洲视频999| 一二美女精品欧洲| 伊人一区二区三区久久精品| 日本高清视频精品| 久久久久久久成人| 亚洲美女性生活视频| 亚洲伊人一本大道中文字幕| 国产成人高清激情视频在线观看| 精品日本高清在线播放| 91系列在线观看| 成人免费视频97| 亚洲人成在线一二| 久久伊人精品一区二区三区| 国产精品久久久av久久久| 最近中文字幕mv在线一区二区三区四区| 日本久久久久久久久| 欧美成aaa人片免费看| 视频一区视频二区国产精品| 久久99热这里只有精品国产| 国产小视频国产精品| 日韩欧美主播在线| 91久久精品国产91久久性色| 浅井舞香一区二区| 亚洲欧美精品伊人久久| 在线日韩日本国产亚洲| 国产裸体写真av一区二区| 91网站在线免费观看| 欧美精品在线播放| 国产精品96久久久久久| 91大神在线播放精品| 成人国产精品久久久久久亚洲| 在线观看久久久久久| 久久国产精品久久久久| 日韩中文字幕在线精品| 色悠悠久久久久| 成人黄色在线免费| 日韩精品视频观看| 最好看的2019年中文视频| 欧美日本在线视频中文字字幕| 欧美性xxxxx极品| 久久久久久久久久久网站| 久久成年人免费电影| 亚洲精品一区二三区不卡| 亚洲电影免费在线观看| 亚洲春色另类小说| 一区二区三区视频免费| 亚洲视频在线观看免费| 久久久久久久网站| 中文字幕亚洲精品| 午夜精品久久久久久久白皮肤| 午夜精品蜜臀一区二区三区免费| 国产精品日韩电影| 日韩高清欧美高清| 伊人久久久久久久久久久| 国产色婷婷国产综合在线理论片a| 欧美韩日一区二区| 久久久久在线观看| 国产精品嫩草影院久久久| 亚洲999一在线观看www| 在线日韩欧美视频| 欧美专区在线观看| 激情成人在线视频| 亚洲人成在线播放| 国产精品福利无圣光在线一区| 久久精品99久久香蕉国产色戒| 国产成人精品网站| 成人免费视频xnxx.com| 中文字幕欧美视频在线| 精品视频在线播放色网色视频| 亚洲欧美精品在线| 国产九九精品视频| 麻豆乱码国产一区二区三区| 538国产精品视频一区二区| 日韩视频免费大全中文字幕| 国产+人+亚洲| 国产一区二区三区精品久久久| 亚洲xxxxx电影| 国产精品入口免费视| 日韩网站免费观看| 国产偷亚洲偷欧美偷精品| 国产偷国产偷亚洲清高网站| 久久99视频精品| 成人精品视频久久久久| 日本亚洲欧洲色| 久久久亚洲精品视频|