Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie kann ich das Registry mit API lesen und schreiben? (https://www.delphipraxis.net/286-wie-kann-ich-das-registry-mit-api-lesen-und-schreiben.html)

TopDogg 28. Jun 2002 19:27


Wie kann ich das Registry mit API lesen und schreiben?
 
Hi leute,
sehr gut hab ihr hier.
zuers aber danke an Luckie fuer den link in deiner page.

ich habe eine "dumme" frage.
wie kann ich einen string aus der registry lesen und in einem Edit-Text anzeigen und
aus einer ComboBox denn string rein schreiben?

ich weiss dass wenn ich luckies tutis noch mal durch arbeite und sehr viel denke das ich es dann auch hinkriege, aber ich hoffe das es hier schneller geht.
mir der VCL ist das lesen und schreiben kein thema, aber ich weiss leider nich wie ich den string aus der registry dem Edit-Tex zuweisen und den string aus der ComboBox in die registry schreiben kann.
wenn ihr mir weiter helfen koennt waehre net.
danke

Daniel 28. Jun 2002 19:32

Hallo toppDog ---> :cat:


fachlich kann ich Dir leider nicht weiterhelfen - aber ich kann Dir versichern, dass Deine Frage keineswegs "dumm" ist. Schliesslich ist ein Forum zum Fragen da!


Grüße aus Hamburg,
Daniel
Delphi-PRAXiS Administrator

Daniel B 28. Jun 2002 19:40

Zitat:

Zitat von Daniel
dass Deine Frage keineswegs "dumm" ist. Schliesslich ist ein Forum zum Fragen da!

So ist es. Da sieht man wieder was passiert wenn man in anderen Foren, die "anfänger" mit dummen Sprüchen abschmettert, wie, hast du denn die Tuts nciht gelesen, oder die Suche benutzt, du.......

Daniel 28. Jun 2002 19:47

@DanielB:
Schön, dass wir uns einig sind. Aber toppDog weiss immer noch nicht weiter :mrgreen:


Grüße,
Daniel

sakura 28. Jun 2002 20:03

Bevor ich mir jetzt das Leben schwer mache, wollte ich erst einmal fragen was das Problem genau ist.
  1. Zugriff auf die Registry ohne VCL mit API
  2. Übergeben eines Wertes an ein nonVCL Edit Feld / auslesen einer nonVCL Comobobox
:?:

:cat:

RomanK 28. Jun 2002 20:24

Zieh dir mal das rein http://www.delphipraxis.de/viewtopic.php?t=113 :mrgreen:

Daniel B 28. Jun 2002 20:25

Hier ist mal meine Prozedur um Daten aus der Reg zu Lesen. Ich lade sie aber in eine Stringlist und weise sie dann der einen Combo zu. Du musst es halt noch anpassen. Vielleicht bringts dir ja was.

Code:
procedure TEinstellungen.FormShow(Sender: TObject);
//ComPorts ermitteln und in ComboBox Anzeigen
var
  reg: TRegistry;
  st: TStrings;
  i: integer;
  ini: TIniFile;
  s: string;
begin
  ShowMessage('Bei änderungen, kann gleich mit den neuen Werten weiter gearbeitet'
    + #13 + 'werden. Das Programm muss nicht neu gestartet werden!');
  reg := TRegistry.Create;
  reg.RootKey := HKEY_LOCAL_MACHINE;
  reg.OpenKey('hardware\devicemap\serialcomm', False);
  st := TStringList.Create;
  reg.GetValueNames(st);
  ComboBoxPort.Items.Clear;
  for i := 0 to st.Count -1 do
    begin
      ComboBoxPort.Items.Add(reg.ReadString(st.Strings[i]));
    end;
  st.Free;
  reg.CloseKey;
  reg.free;
  if MainFormMC2004.ComPort.Port = 'COM1' then
  begin
    ComboBoxPort.ItemIndex := 0;
  end
  else if MainFormMC2004.ComPort.Port = 'COM2' then
  begin
    ComboBoxPort.ItemIndex := 1;
  end
  else if MainFormMC2004.ComPort.Port = 'COM3' then
  begin
    ComboBoxPort.ItemIndex := 2;
  end
  else if MainFormMC2004.ComPort.Port = 'COM4' then
  begin
    ComboBoxPort.ItemIndex := 3;
  end
  else if MainFormMC2004.ComPort.Port = 'COM5' then
  begin
    ComboBoxPort.ItemIndex := 4;
  end
  else if MainFormMC2004.ComPort.Port = 'COM6' then
  begin
    ComboBoxPort.ItemIndex := 5;
  end
  else if MainFormMC2004.ComPort.Port = 'COM7' then
  begin
    ComboBoxPort.ItemIndex := 6;
  end
  else if MainFormMC2004.ComPort.Port = 'COM8' then
  begin
    ComboBoxPort.ItemIndex := 7;
  end;
  ini:=TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
  try
    s := ini.ReadString('Einstellungen', 'Baud', '');
  finally
    ini.Free;
  end;
  if s = '2400' then
  begin
    ComboBoxBaud.ItemIndex := 0;
  end
  else if s = '4800' then
  begin
    ComboBoxBaud.ItemIndex := 1;
  end
  else if s = '9600' then
  begin
    ComboBoxBaud.ItemIndex := 2;
  end
  else if s = '14400' then
  begin
    ComboBoxBaud.ItemIndex := 3;
  end
  else if s = '19200' then
  begin
    ComboBoxBaud.ItemIndex := 4;
  end
  else if s = '28800' then
  begin
    ComboBoxBaud.ItemIndex := 5;
  end
  else if s = '38400' then
  begin
    ComboBoxBaud.ItemIndex := 6;
  end;  
end;

Christian Seehase 28. Jun 2002 20:28

Moin ToppDog,

hier hab' ich mal ein kleines Beispiel wie's gehen könnte.
Bislang nur mit gültigen Werten getestet, aber eigentlich sollten auch fehlerhafte Werte nur für entsprechende Rückgabewerte der Funktionen sorgen.

Code:
function WriteStringToRegAPI(const p_sSubKey : string;const p_sValueName : string;const p_sValue : string) : integer;

var
  hResult : HKEY;

begin
  // Es ginge auch RegOpenKeyEx, so wird ein nicht existenter Key aber angelegt.
  // Existiert der SubKey, wird er geöffnet
  Result := RegCreateKeyEx(HKEY_CURRENT_USER,PChar(p_sSubKey),0,nil,0,KEY_ALL_ACCESS,nil,hResult,nil);
  if Result <> ERROR_SUCCESS then
  begin
    exit;
  end;
  try
    Result := RegSetValueEx(hResult,PChar(p_sValueName),0,REG_SZ,@p_sValue[1],Length(p_sValue)+1);
  finally
    RegCloseKey(hResult);
  end;
end;

function ReadStringFromRegAPI(const p_sSubKey : string; const p_sValueName : string;var p_sResult : string) : integer;

var
  hResult      : HKEY;
  dwMaxValueLen : DWORD;
  szResult     : PChar;

begin
  Result := RegOpenKeyEx(HKEY_CURRENT_USER,PChar(p_sSubKey),0,KEY_ALL_ACCESS,hResult);
  if Result <> ERROR_SUCCESS then
  begin
    exit;
  end;
  try
    Result := RegQueryInfoKey(hResult,nil,nil,nil,nil,nil,nil,nil,nil,@dwMaxValueLen,nil,nil);
    if Result <> ERROR_SUCCESS then
    begin
      exit;
    end;
    inc(dwMaxValueLen);
    szResult := StrAlloc(dwMaxValueLen);
    try
      Result := RegQueryValueEx(hResult,PChar(p_sValueName),nil,nil,PByte(szResult),@dwMaxValueLen);
      if Result <> ERROR_SUCCESS then
      begin
        exit;
      end;
      p_sResult := trim(szResult);
    finally
      StrDispose(szResult);
    end;
  finally
    RegCloseKey(hResult);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);

var
  iResult : integer;
  sResult : string;

begin
  iResult := WriteStringToRegAPI('Software\CSE\TEST','TESTWERTNAME','TESTWERT');
  if iResult <> ERROR_SUCCESS then
  begin
    ShowMessage(SysErrorMessage(iResult));
  end;
  iResult := ReadStringFromRegAPI('Software\CSE\TEST','TESTWERTNAME',sResult);
  if iResult <> ERROR_SUCCESS then
  begin
    ShowMessage(SysErrorMessage(iResult));
  end
  else
  begin
    ShowMessage(sResult);
  end;
end;
Kommst Du damit klar?

@Mathias Simmack
Tut ist noch in Arbeit ;-)

RomanK 28. Jun 2002 20:28

@daniel B:
Er will es aber NonVcl!!!!!

Daniel B 28. Jun 2002 20:32

Zitat:

Zitat von Christian Seehase
Result := RegQueryInfoKey(hResult,nil,nil,nil,nil,nil,nil,ni l,nil,@dwMaxValueLen,nil,nil);

Kannst du mir das mal erklären bitte :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz