Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inhalt eines Edit an die CMD übergeben? (https://www.delphipraxis.net/35300-inhalt-eines-edit-die-cmd-uebergeben.html)

mlspider 5. Dez 2004 09:36


Inhalt eines Edit an die CMD übergeben?
 
Hallo,

Ich lese meinen Benutzernamen (Windowskonto) wie folgt in einem Editfeld ein:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 regist := TRegistry.Create;
 regist.RootKey := HKEY_LOCAL_MACHINE;
 regist.OpenKey('\Software\Microsoft\Windows NT\CurrentVersion\Winlogon',True);
 Edit3.Text:=regist.ReadString('DefaultUserName');
end;
Das ist alles noch keine Hürde. Nun kommt mein Problem. Wenn ich jetzt die CMD aufrufe und den Wert aus Edit3 übernehme:

Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
begin
 ShellExecute(Handle,'open','cmd','/c '+'cacls "c:\System Volume Information" /E /G '+Edit3.Text+':F',nil,SW_NORMAL);
end;
geht nichts mehr!

Wo liegt der Fehler? Kann man so überhaupt einen Wert aus einem Editfeld übernehmen???

Danke!

BenjaminH 5. Dez 2004 10:38

Re: Inhalt eines Edit an die CMD übergeben?
 
ShellExecute erwartet Variablen vom Typ PChar, du kannst den Text vom Editfeld mittels Pchar(Edit.Text) formatieren

mlspider 5. Dez 2004 10:42

Re: Inhalt eines Edit an die CMD übergeben?
 
Folgende Prozedur gibt leider eine Fehlermeldung beim compilieren:

Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
begin
ShellExecute(Handle,'open','cmd','/c '+'cacls "c:\System Volume Information" /E /G '+PChar(Edit3.Text)+':F',nil,SW_NORMAL);
end;
Inkompatible Typen: 'String' und 'PAnsiChar'

mirage228 5. Dez 2004 10:50

Re: Inhalt eines Edit an die CMD übergeben?
 
Zitat:

Zitat von mlspider
Folgende Prozedur gibt leider eine Fehlermeldung beim compilieren:

Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
begin
ShellExecute(Handle,'open','cmd','/c '+'cacls "c:\System Volume Information" /E /G '+PChar(Edit3.Text)+':F',nil,SW_NORMAL);
end;
Inkompatible Typen: 'String' und 'PAnsiChar'

Hi,

versuch es mal so:

Delphi-Quellcode:
ShellExecute(Handle, 'open', 'cmd',PChar('/c ' + 'cacls "c:\System Volume Information" /E /G ' + Edit3.Text + ':F'), nil, SW_SHOWNORMAL);
mfG
mirage228

mlspider 5. Dez 2004 10:56

Re: Inhalt eines Edit an die CMD übergeben?
 
Jepp, das war's. Danke!!!

Christian Seehase 5. Dez 2004 13:57

Re: Inhalt eines Edit an die CMD übergeben?
 
Moin Mario,

Du hast beim Auslesen einiges vergessen:
  • Das Registryobjekt wird nicht wieder freigegeben
  • Der Key wird nicht geschlossen
  • Du prüfst nicht, ob sich der Key auch öffnen lässt
  • Einen Key aus dem man einen Wert braucht sollte man nicht mit der Option TRUE öffnen. OpenKeyReadOnly wäre, gerade bei Systemwerten, sinnvoller, vor allem wenn man nichts ändern will.

mlspider 5. Dez 2004 14:17

Re: Inhalt eines Edit an die CMD übergeben?
 
Moin?! Christian, :wink:

hast recht!!! Du meinst bestimmt alles in einen Try Finally-Block setzen und anschließend regist.free.

Key-Prüfung: if regist.KeyExist('Schlüssel') then habe ich nachträglich "eingebaut". (Danke für den Hinweis!!!)

Dein zweites Bedenken kann ich allerdings nicht nachvollziehen.

Einen schönen 2. Advent!!! :)

fkerber 5. Dez 2004 14:38

Re: Inhalt eines Edit an die CMD übergeben?
 
HI!

In der OH steht

Writes the current key to the registry and closes the key.

Delphi syntax:

procedure CloseKey;

C++ syntax:

void __fastcall CloseKey(void);

Description

Call CloseKey to write the current key to the registry and close the key. An application should not keep keys open any longer than necessary. Many TRegistry methods routinely call CloseKey after reading from or writing to the registry. Calling CloseKey when there is no current key has no effect.

Note: When an application closes a key, the key is written to the registry. The LazyWrite property determines how the write takes place.



Ciao Frederic

mlspider 5. Dez 2004 14:40

Re: Inhalt eines Edit an die CMD übergeben?
 
Ja danke! Und nun noch mal zu Deutsch?! Ist ja nicht böse gemeint!!!!

mirage228 5. Dez 2004 14:40

Re: Inhalt eines Edit an die CMD übergeben?
 
Hi,

bei mir (Delphi 7) wird im Destruktor von TRegistry die Funktion CloseKey() bereits aufgerufen. Also ist ein zweiter Aufruf nicht mehr nötig. ;)

mfG
mirage228

mlspider 5. Dez 2004 14:41

Re: Inhalt eines Edit an die CMD übergeben?
 
Genauso ist es auch bei mir!!! :wink:

fkerber 5. Dez 2004 14:42

Re: Inhalt eines Edit an die CMD übergeben?
 
Hi!

Zitat:

Zitat von mlspider
Ja danke! Und nun noch mal zu Deutsch?! Ist ja nicht böse gemeint!!!!

Naja, du sollst eben CloseKey aufrufen, weil man keine offenen Keys da rum liegen haben sollte.
Wenn es tatsächlich auch bei anderen Versionen so ist, wie bei David jetzt, dann kannst du es dir in dem Fall wohl sparen, aber man sollte es sich einfach angewöhnen, dann vergisst man es auch nicht, wenn es mal sein muss.


Ciao Frederic

mlspider 5. Dez 2004 14:44

Re: Inhalt eines Edit an die CMD übergeben?
 
Hast schon recht. Man kann ja sicherheits halber CloseKey mit einbinden. Schadet ja nichts!!! :wink:

Christian Seehase 6. Dez 2004 00:50

Re: Inhalt eines Edit an die CMD übergeben?
 
Moin Mario,

Zitat:

Zitat von mlspider
Key-Prüfung: if regist.KeyExist('Schlüssel') then habe ich nachträglich "eingebaut". (Danke für den Hinweis!!!)

ich dachte eigentlich an die Prüfung mit

Delphi-Quellcode:
if regist.OpenKeyReadOnly(...
;-)

@David:
Das CloseKey bei Free mit aufgerufen wird hatten wir ja erst vor kurzem ;-)
Ich finde es nach wie vor sauberer es trotzdem mitzuschreiben.
Das kann nicht jeder nachschauen, und könnte so bei einem Sourcecode ohne CloseKey davon ausgehen, dass CloseKey grundsätzlich nicht benötigt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.

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