Announcement

Collapse
No announcement yet.

Registry übers Netz von anderem Rechner lesen/schreiben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Registry übers Netz von anderem Rechner lesen/schreiben

    Gibt es eine Möglichkeit Einträge in der Registry eines anderen Rechners zu ändern/schreiben/lesen der in einem Windows2000 Netz hängt?

    Gruss Nils

  • #2
    Hallo,

    das folgende Beispielprojekt für den Schreibzugriff auf die Registry eines fremden Rechners stammt aus meinem Buch <i>Delphi Win32-Lösungen</i>. Über die Win32-API-Funktion <b>RegConnectRegistry</b> kann man sich - falls man die Ausführungsrechte dafür besitzt - auf die Registry von anderen Rechnern schalten:
    <pre>
    unit RegConnectRegistryFrm;
    <br>
    interface
    <br>
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls;
    <br>
    type
    TForm1 = class(TForm)
    ButtonWrite: TButton;
    EditPC: TEdit;
    Label1: TLabel;
    procedure ButtonWriteClick(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;
    <br>
    var
    Form1: TForm1;
    <br>
    implementation
    <br>
    {$R *.DFM}
    <br>
    uses Registry;
    <br>
    procedure TForm1.ButtonWriteClick(Sender: TObject);
    var
    szMULTI : array[0..199] of Char;
    pMULTI : PChar;
    aHandle : HKey;
    aRemoteHandle : HKey;
    dwDisposition : DWORD;
    szKeyEntry : array[0..127] of Char;
    szKeyValueName : array[0..19] of Char;
    dwDataSize : DWORD;
    lRetVal : LongInt;
    <br>
    procedure AddStringToMULTI_SZ(sText : String);
    var
    iTextLen : Integer;
    begin
    iTextLen := Length(sText);
    StrPCopy(pMULTI, sText);
    Inc(pMULTI, iTextLen + 1);
    end;
    <br>
    begin
    FillChar(szMULTI, SizeOf(szMULTI), #0);
    pMULTI := @szMULTI;
    AddStringToMULTI_SZ('Wert 1a');
    AddStringToMULTI_SZ('Wert 2a');
    AddStringToMULTI_SZ('Wert 3a');
    FillChar(szKeyEntry, SizeOf(szKeyEntry), #0);
    FillChar(szKeyValueName, SizeOf(szKeyEntry), #0);
    szKeyEntry := 'SOFTWARE\Ossisoft';
    szKeyValueName := 'Value1';
    dwDataSize := SizeOf(szMULTI);
    try
    lRetVal := RegConnectRegistry(PChar(EditPC.Text), HKEY_LOCAL_MACHINE, aRemoteHandle);
    if lRetVal <> ERROR_SUCCESS then
    RaiseLastWin32Error;
    try
    lRetVal := RegCreateKeyEx(aRemoteHandle, szKeyEntry, 0, '',
    REG_OPTION_NON_VOLATILE,
    KEY_READ or KEY_WRITE or KEY_SET_VALUE,
    nil, aHandle, @dwDisposition);
    if lRetVal <> ERROR_SUCCESS then
    RaiseLastWin32Error;
    lRetVal := RegSetValueEx(aHandle, 'Test', 0, REG_MULTI_SZ,
    @szMULTI, dwDataSize);
    if lRetVal <> ERROR_SUCCESS then
    RaiseLastWin32Error;
    finally
    RegCloseKey(aHandle);
    end;
    finally
    RegCloseKey(aRemoteHandle);
    end;
    end;
    <br>
    end.
    </pre&gt

    Comment

    Working...
    X