![]() |
delphi / batch kombinieren
hay,
ist es möglich mti delphi auch eine cmd-anwendung zu schreiben, d.h. ein neuer befehl z.b. sowas: wenn man z.b. einen befehl random macht, bei dem man eine maximale zahl eingibt. der batchcode wäre dann etwa so:
Code:
jetzt müsste man aber noch diesen befehl random programmieren... aber geht das mit delphi überhaupt?
@echo off
set /p ans=bitte geben sie eine zahl ein random zahL=%ans% echo eine zufaellig generierte zahl zwischen 0 und %ans% ist %zahl% mfG toredo |
Re: delphi / batch kombinieren
das programm kannste doch komplett mit delphi schreiben
per writeln die ausgabe, mit readln die eingabe und die zufallszahl einfach mit radominze; und random(a); mehr ist das doch gar nicht, oder habe ich dich jetzt nicht richtig verstanden? |
Re: delphi / batch kombinieren
klar kann man das, aber ich möchte ja nicht unbedingt dieses prog haben sondern ich möchte wissen wie man so cmd-anwendungen machen kann.
mfG toredo |
Re: delphi / batch kombinieren
Hatte grad nix zu tun, deshalb hier ein komplettes Beispiel:
Delphi-Quellcode:
(Neue Konsolen-Anwendung erstellen und einfügen)
program ConsoleRandom;
{$APPTYPE CONSOLE} uses Math, SysUtils; var RangeMin, RangeMax: Integer; begin Randomize; try RangeMin := StrToInt(ParamStr(1)); RangeMax := StrToInt(ParamStr(2)); except WriteLn('Please pass two integer values separated by a space character as argument!'); exit; end; Write(RandomRange(RangeMin, RangeMax)); end. Aufruf z.B. mit MeinExeName 10 20 für eine Zufallszwahl zwischen 10 und 20. :cyclops: |
Re: delphi / batch kombinieren
:) danke, schon kann ich wieder etws neues:)
mfG toredo -edit- kann ich den ausgabewert auch in einer variable speichern, also in einer die ich in nem batch-script auch benutzen kann? mfG toredo |
Re: delphi / batch kombinieren
Nö. Die CMD und dein Project1.exe sind 2 komplett seperate Proggies. Du müsstest dich schon in die CMD einhacken und selbst den Speicher beschreiben ;)
aber du könntest mit deiner Anwendung ein BatchScript erstellen und dieses dann ausführen. Dann hast du das Problem mit den Variablen nicht ;) Die Parameter haben mit DOS Proggs auch nix zu tun. Die kannst du auch über Start->Ausführen oder Shellexecute machen. |
Re: delphi / batch kombinieren
im system32-ordner sind ja auch x-dateien die ne variable zurückgeben, das zeugs ist aber wahrscheinlich in irgendnem c geschrieben, aber das sollte ja keinen so unterschied machen...
mfG toredo |
Re: delphi / batch kombinieren
Hiermit kannst Du eine Variable erstellen und beschreiben.
Delphi-Quellcode:
Grüße
{*********************************************}
{ Set Global Environment Function } { Coder : Kingron,2002.8.6 } { Bug Report : [email]Kingron@163.net[/email] } { Test OK For Windows 2000 Advance Server } { Parameter: } { Name : environment variable name } { Value: environment variable Value } { Ex: SetGlobalEnvironment('MyVar','OK') } {*********************************************} function SetGlobalEnvironment(const Name, Value: string; const User: Boolean = True): Boolean; resourcestring REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment'; REG_USER_LOCATION = 'Environment'; begin with TRegistry.Create do try if User then { User Environment Variable } Result := OpenKey(REG_USER_LOCATION, True) else { System Environment Variable } begin RootKey := HKEY_LOCAL_MACHINE; Result := OpenKey(REG_MACHINE_LOCATION, True); end; if Result then begin WriteString(Name, Value); { Write Registry for Global Environment } { Update Current Process Environment Variable } SetEnvironmentVariable(PChar(Name), PChar(Value)); { Send Message To All Top Window for Refresh } SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment'))); end; finally Free; end; end; { SetGlobalEnvironment } Klaus |
Re: delphi / batch kombinieren
Oder du schreibst einfach ein Batchfile dynamisch im Programm, welches die Variable mittels SET setzt, dieses Batchfile startest du aus dem Delphi-Programm und löscht das Batchfile nach einer gewissen Zeit wieder.
mfG Markus (Das ist Q&D) |
Re: delphi / batch kombinieren
@markusj: Das habe ich schon vorhin vorgeschlagen ;)
@Klaus01: Stehen die DOS-Konsolenvariablen etwa in der Registry? :shock: |
Re: delphi / batch kombinieren
Liste der Anhänge anzeigen (Anzahl: 1)
@ichbins
ja, siehe screenshot Grüße Kalus |
Re: delphi / batch kombinieren
hm, wenn ich jetzt aber normal ne variable über start/ausführen/cmd/set a=b definiere dann gibt es keine neue zeichenfolge in der registry, ist denn da ein unterschied wenn man die variable "normal" macht?
und werden die zeichenfokgen auch wieder automatisch gelöscht wenn ich die batch schliesse oder muss ich da noch in batch was schreiben? n'batch script könnte man natürlich auch erstellen lassen, wäre auch einfahc nur halt unprofessioneller, da man nacher noch mit call auf das script zugreiffen müsste. wäre aber auch keine schlechte lösung. mfG toredo |
Re: delphi / batch kombinieren
Liste der Anhänge anzeigen (Anzahl: 1)
Die Funktion die ich mit SetGlobalEnvironment setze, setzt eine globale
Environmnet Variable. Diese ist von jedem cmd Fenster aus abfragbar. Sie überlebt den reboot. Um ein Variable nur im activen cmd-Fenster zu haben, reicht es das API command SetEnvironmentVariable(PChar(Name), PChar(Value)); auszuführen. Zu den Parametern gibt es im angehängten pdf File mehr Infos. Grüße Klaus habe ich noch gefunden: nicht getestet:
Delphi-Quellcode:
unit Environment;
interface procedure ActivateEnvironmentVariables; function AddGlobalEnvironmentVariable(const Key: string; const Value : string; const now : boolean) : boolean; function AddEnvironmentVariable(const Key: string; const Value : string; const now : boolean) : boolean; function DelGlobalEnvironmentVariable(const Key: string; const now : boolean) : boolean; function DelEnvironmentVariable(const Key: string; const now : boolean) : boolean; implementation uses Registry, Windows; const GlobalKey = 'System\CurrentControlSet\Control\Session Manager\Environment'; LocalKey = 'Environment'; WM_WININICHANGE = $001A; procedure ActivateEnvironmentVariables; begin SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar('Environment'))); end; function AddGlobalEnvironmentVariable(const Key: string; const Value : string; const now : boolean) : boolean; var Reg : TRegistry; ok : boolean; begin Result := true; ok := false; try Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey(GlobalKey, false) then begin Reg.WriteString(Key, Value); Reg.CloseKey; if now then ActivateEnvironmentVariables; ok := true; end; Result := ok; except Result := false; end; end; function AddEnvironmentVariable(const Key: string; const Value : string; const now : boolean) : boolean; var Reg : TRegistry; ok : boolean; begin Result := true; ok := false; try Reg := TRegistry.Create; Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey(LocalKey, false) then begin Reg.WriteString(Key, Value); Reg.CloseKey; if now then ActivateEnvironmentVariables; ok := true; end; Result := ok; except Result := false; end; Result := SetEnvironmentVariable(PChar(Key), PChar(Value)); end; function DelGlobalEnvironmentVariable(const Key: string; const now : boolean) : boolean; var Reg : TRegistry; ok : boolean; begin ok := false; Result := true; try Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey(GlobalKey, false) then begin Reg.DeleteValue(Key); Reg.CloseKey; if now then ActivateEnvironmentVariables; ok := true; end; Result := ok; except Result := false; end; end; function DelEnvironmentVariable(const Key: string; const now : boolean) : boolean; var Reg : TRegistry; ok : boolean; begin ok := false; Result := true; try Reg := TRegistry.Create; Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey(LocalKey, false) then begin Reg.DeleteValue(Key); Reg.CloseKey; if now then ActivateEnvironmentVariables; ok := true; end; Result := ok; except Result := false; end; Result := SetEnvironmentVariable(PChar(Key), nil); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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-2025 by Thomas Breitkreuz