Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Каков способ обмена информацией между приложениями Win32 – Win16?

Nomadic предлагает следующее:

Пользуйтесь сообщением WM_COPYDATA.

Для Win16 константа определена как $004A, для Win32 смотрите в WinAPI Help.

#define WM_COPYDATA 0x004A

/*

* lParam of WM_COPYDATA message points to…

*/

typedef struct tagCOPYDATASTRUCT {

 DWORD dwData;

 DWORD cbData;

 PVOID lpData;

} COPYDATASTRUCT, *PCOPYDATASTRUCT;

Остановка

и запуск сервисов

Postmaster предлагает следующий код:

Unit1.dfm

object Form1: TForm1

 Left = 192

 Top = 107

 Width = 264

 Height = 121

 Caption = 'Сервис'

 Color = clBtnFace

 Font.Charset = DEFAULT_CHARSET

 Font.Color = clWindowText

 Font.Height = -11

 Font.Name = 'MS Sans Serif'

 Font.Style = []

 OldCreateOrder = False

 PixelsPerInch = 96

 TextHeight = 13

 object Label1: TLabel

Left = 2

Top = 8

Width = 67

Height = 13

Caption = 'Имя сервиса'

 end

 object Button1: TButton

Left = 4

Top = 56

Width = 95

Height = 25

Caption = 'Стоп сервис'

TabOrder = 0

OnClick = Button1Click

 end

 object Button2: TButton

Left = 148

Top = 56

Width = 95

Height = 25

Caption = 'Старт сервис'

TabOrder = 1

OnClick = Button2Click

 end

 object Edit1: TEdit

Left = 0

Top = 24

Width = 241

Height = 21

TabOrder = 2

Text = 'Messenger'

 end

end

Unit1.pas

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Winsvc;

type TForm1 = class(TForm)

 Button1: TButton;

 Button2: TButton;

 Edit1: TEdit;

 Label1: TLabel;

 procedure Button1Click(Sender: TObject);

 procedure StopService(ServiceName: String);

 procedure Button2Click(Sender: TObject);

 procedure StartService(ServiceName: String);

private

{ Private declarations }

public

{ Public declarations }

end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

 StopService(Edit1.Text);

end;

procedure TForm1.StopService(ServiceName: String);

var

 schService, schSCManager: DWORD;

 p: PChar;

 ss: _SERVICE_STATUS;

begin

 p:=nil;

 schSCManager:= OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

 if schSCManager = 0 then RaiseLastWin32Error;

 try

schService:=OpenService(schSCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);

if schService = 0 then RaiseLastWin32Error;

try

if not ControlService(schService, SERVICE_CONTROL_STOP, SS) then RaiseLastWin32Error;

finally

CloseServiceHandle(schService);

end;

 finally

CloseServiceHandle(schSCManager);

 end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 StartService(Edit1.Text);

Поделиться с друзьями: