Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Windows servisi - Konvertovanje između key i displej imena



Demonstrirali smo kako da proverite status Windows servisa i kako da ih kontrolišete. Element koji nedostaje iz tih funkcija jeste način konvertovanja zmeđu key i displej imena Windows servisa.

Tako je, Windows servis ima dva imena. Dugačko ime koje vidite u Control Panel-u je displej ime servisa. Unutrašnje kraće ime servisa se zove key ime. Mnoge funkcije zahtevaju korišćenje key imena servisa, te ćemo navesti funkciju za konvertovanje displej imena u key ime.



 
uses WinSvc;

//-------------------------------------
// Get the service key name that is
// associated with a specified
// service's display name
// ie: 'Browser' is the key name for
//     'Computer Browser'
//
// sMachine:
//   machine name, ie: \SERVER
//   empty = local machine
//
// sService
//   service display name,
//   ie: 'Computer Browser'
//
function ServiceGetKeyName(
  sMachine,
  sServiceDispName : string ) : string;
var
  //
  // service control
  // manager handle
  schm          : SC_Handle;

  //
  // max key name len
  nMaxNameLen   : integer;

  //
  // temp. string
  psServiceName : PChar;
begin
  Result := '';

  // expect a service key
  // name shorter than 255
  // characters
  nMaxNameLen := 255;

  // connect to the service
  // control manager
  schm := OpenSCManager(
    PChar(sMachine),
    Nil,
    SC_MANAGER_CONNECT);

  // if successful...
  if(schm > 0)then
  begin
    psServiceName :=
      StrAlloc(nMaxNameLen+1);

    if(nil <> psServiceName)then
    begin
      if( GetServiceKeyName(
        schm,
        PChar(sServiceDispName),
        psServiceName,
        nMaxNameLen ) )then
      begin
        psServiceName
          [nMaxNameLen] := #0;

        Result :=
          StrPas( psServiceName );
      end;
      
      StrDispose(psServiceName);
    end;

    // close service control
    // manager handle
    CloseServiceHandle(schm);
  end;

end;

Listing #1 : Delphi code. Snimite disp2key (0.72 KB).

 


Na primer, “ServiceGetKeyName( “, 'Computer Browser' )" će vratiti “Browser” tj prestraživač, gde je pretraživač key ime koji možete da dodate funkcijama koje su u vezi sa Windows servisima. Naravno, možda ćete morati da konvertujete key ime u displej ime.



 
uses WinSvc;

//-------------------------------------
// Get the service display name that is
// associated with a specified
// service's display name
// ie: 'Computer Browser' is the
//     display name for 'Browser'
//
// sMachine:
//   machine name, ie: \SERVER
//   empty = local machine
//
// sService
//   service key name,
//   ie: 'Browser'
//
function ServiceGetDisplayName(
  sMachine,
  sServiceKeyName : string ) : string;
var
  //
  // service control
  // manager handle
  schm          : SC_Handle;

  //
  // max display name len
  nMaxNameLen   : integer;

  //
  // temp. string
  psServiceName : PChar;
begin
  Result := '';

  // expect a service display
  // name shorter than 255
  // characters
  nMaxNameLen := 255;

  // connect to the service
  // control manager
  schm := OpenSCManager(
    PChar(sMachine),
    Nil,
    SC_MANAGER_CONNECT);

  // if successful...
  if(schm > 0)then
  begin
    psServiceName :=
      StrAlloc(nMaxNameLen+1);

    if(nil <> psServiceName)then
    begin
      if( GetServiceDisplayName(
        schm,
        PChar(sServiceKeyName),
        psServiceName,
        nMaxNameLen ) )then
      begin
        psServiceName
          [nMaxNameLen] := #0;

        Result :=
          StrPas( psServiceName );
      end;
      
      StrDispose(psServiceName);
    end;

    // close service control
    // manager handle
    CloseServiceHandle(schm);
  end;

end;

Listing #2 : Delphi code. Snimite key2disp (0.72 KB).





Published (Last edited): 09-07-2012 , source: http://www.chami.com/tips/delphi/040598D.html