Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$to = "D:\Test\test.txt" $from = "C:\Users\Renegade\Desktop\test.log" $timeout = new-timespan -Minutes 1 $starttime = [diagnostics.stopwatch]::StartNew() while ($starttime.elapsed -lt $timeout){ if(test-path $from) { Copy-Item $from -Destination $to } start-sleep -seconds 5 } |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Renegade« (06.05.2017, 13:52)
Hier mal das Beispiel mittels Powershell auf Windows.
C#-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 $to = "D:\Test\test.txt" $from = "C:\Users\Renegade\Desktop\test.log" $timeout = new-timespan -Minutes 1 $starttime = [diagnostics.stopwatch]::StartNew() while ($starttime.elapsed -lt $timeout){ if(test-path $from) { Copy-Item $from -Destination $to } start-sleep -seconds 5 }
0. Eine neue Textdatei erstellen, Rechtsklick auf Desktop -> Neu -> Textdokument
1. Den Code oben in die Textdatei kopieren und unter Datei -> Speichern Unter als CopyLoop.ps1 speichern (z.B. unter C:\Users\Maik\Desktop\CopyLoop.ps1)
2. dannach Windowstaste drücken und powershell eingeben (nicht drauf klicken sondern...)
3. ...Strg+Shift+Enter drücken, dass bewirkt das Powershell als Admin gestartet wird (wird dich fragen ob du als Admin öffnen willst, natürlich ja)
4. In der blauen Konsole folgendes eingeben Set-ExecutionPolicy RemoteSigned (Damit sagst du Powershell das es Programme ausführen darf)
5. Mit J für Ja bestätigen
5. In der blauen Konsole den Pfad zur Datei eingeben, z.B. C:\Users\Maik\Desktop\CopyLoop.ps1 und mit Enter bestätigen
Das Skript läuft nun 1 Minute lang und prüft alle 5 Sekunden ob eine Datei unter $from zu finden ist und kopiert sie zu $to (mit Umbenennung der Endung). Möchtest du statt kopieren die Datei ausschneiden, verwende statt Copy-Item den Befehl Move-Item. Du kannst das Skript verändern in dem du es regulär mit klicken öffnest, dann sollte sich der Texteditor öffnen und du kannst die Datei verändern und speichern. ...und natürlich wieder mittels der blauen Powershell Konsole starten.
Viel Spaß!
Wenn der Inhalt sich erst beim schließen des Programms ändert, wie willst du dann vorher darauf zugreifen? Du kannst auch keine Nachricht lesen bevor man sie dir schickt.
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Renegade« (07.05.2017, 16:58)
Wenn der Inhalt sich erst beim schließen des Programms ändert, wie willst du dann vorher darauf zugreifen? Du kannst auch keine Nachricht lesen bevor man sie dir schickt.
Doch das geht (Naja, ok, indirekt, also nicht wirklich), jedoch wird dann nicht mehr auf das .log zugegriffen sondern via MQL direkt auf den Metatrader mittels seiner eingebauten Events (siehe Working with Events). Ich bin kein Experte in Bezug auf MQL (und ich wette, dass sind die Wenigsten in einem SpieleProgrammierer Forum), aber ein kurzer Blick in die Dokumentation lässt erahnen, dass die Skriptsprache von Metatrader eine Vielzahl von Möglichkeiten offen lässt. Ich empfehle dir (@»SpieleProgrammerUser«), dich mal genauer mit der MQL4 Reference zu beschäftigen. Dort findest du alles was du brauchst und musst keine unnötigen Umwege mittels batch oder Powershell gehen (damit machst du dir das Leben nur unnötig schwer), da MQL schon einiges in Bezug auf Dateioperationen bietet.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
int fileHandle = FileOpen(filePath, FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI); [...] FileWriteString(fileHandle, data); [...] FileClose(fileHandle); [...] string batPath = "C:\Users\Maik\Desktop\move.bat"; ShellExecuteA(0, "Open", batPath, 0, "", 3); |
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Renegade« (08.05.2017, 21:19)
Die Lösung kannst du auch gerne umsonst haben:
Nutze in MQL einfach die ShellExecuteA Methode um eine Batch-Datei aufzurufen. So könntest du auch selbst unter bestimmten Ereignissen deines MetaTraders etwas in eine kleine Textdatei schreiben und dann an einen beliebigen Ort schieben. Das könnte ungefähr so aussehen:
C-/C++-Quelltext
1 2 3 4 5 6 7 8 int fileHandle = FileOpen(filePath, FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI); [...] FileWriteString(fileHandle, data); [...] FileClose(fileHandle); [...] string batPath = "C:\Users\Maik\Desktop\move.bat"; ShellExecuteA(0, "Open", batPath, 0, "", 3);
#import "shell32.dll"
int ShellExecuteA(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd);
https://www.mql5.com/en/forum/117418
Mit dem Metatrader hat man oft Probleme, da funktioniert nicht immer alles so logisch.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Renegade« (08.05.2017, 22:04)
Mit dem Metatrader hat man oft Probleme, da funktioniert nicht immer alles so logisch.
Na scheinbar schon - die Leute aus dem MQL Forum machen es genau so
Und warum kannst du jetzt nicht ein Skript in MQL schreiben und auf etwaige Ereignisse reagieren? Du kannst dich doch sogar in die void OnTick(); vom MetaTrader hängen und damit mehrmals beliebige Werte pro Sekunde prüfen. Genau dafür ist doch MQL da. Deine Umwege mache imo deshalb nicht so richtig Sinn Ich denke du bist hier (https://www.mql5.com/de/forum) mit deinen Fragen doch deutlich besser aufgehoben als in einem Spieleprogrammierer Forum!
Werbeanzeige