Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - DOS Befehl ausführen und auf das Ende warten
boontec - Mi 14.12.05 17:24
Titel: DOS Befehl ausführen und auf das Ende warten
servus zusammen
ich habe ein kleines problem.. es kann sein das es eine lösung dafür schon auf dem board gibt aber nach dem ich 20 boards durchsucht hab und google schon von mir genervt ist poste ich mein problem hier
ich hoffe nicht das jemand sagt benutz die boardsuche (sorry bin grad etwas gereizt nicht übel nehmen)
zurück zu meinem problem.. (ich erwähne noch das ich erst vor einer woche mit delphi angefangen habe und ich gebe zu das ich mich gleich an ein etwas größeres projekt rangetraut habe)
also ich habe ein tool erstellt das die dos befehle ausliest wie zb.: Ping oder route
nu das problem ist das der code extrem langsam ist und bei einer langsameren rechnerleistung eine fehlermeldung kommt die wiefolgt aussieht: auf die datei **** kann nicht zugegriffen werden, da sie von einem programm verwendet wird..
(ich habe gerade tierisch probleme beim beschreiben sorry)
ich denke ich brauche eine routine die überprüft ob die datei komplett erstellt wurde oder nicht ichhabe das tool mal angehängt wer will kan es testen aber bei routen bitte nur die, die sich auskennen
hier noch ein teil des codes (ist etwas unstrukturiert sorry
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.BitBtn5Click(Sender: TObject); begin ProgressBar1.Position:=0; ShellExecute(0,'open','cmd.exe','/c arp -a > C:\arp.it14','',sw_hide); sleep(500); ProgressBar1.Position:=50; application.HandleMessage; sleep(500); application.HandleMessage; RichEdit1.lines.LoadFromFile('C:\arp.it14'); progressbar1.Position:=100; sleep(500); sleep(500) ; ShellExecute(0,'open','cmd.exe','/c del C:\*.it14','',sw_hide);
end; |
für tipps und tricks bin ich sehr dankbar
MfG boontec / Thomas
€dit ups ich glaube ich hab den thread an ner falschen stelle eröffnet fettes sorry bin grad ein wenig verpeilt)
Moderiert von
UGrohne: Code- durch Delphi-Tags ersetzt
Moderiert von
Tino: Titel geändert.
noidic - Mi 14.12.05 17:29
Mh, das Problem hast du ja selber bechrieben, die Leseoperation kommt möglicherweise, bevor der Schreibvorgang abgeschlossen ist.
Schau dir mal die API-Befehle CreateProcess und WaitForSingleObject an, damit kannst du den Prozess starten und auf seine Beendigung warten, damit müsste es gehen.
boontec - Mi 14.12.05 17:34
ja aber wie gesagt bin ich neuling .. und weiß nicht wie ich dieses einbaue.. ich will euch jetzt nicht um eure zeit berauben
aber das was ich bisher kann ist eben nur shellapi :S
aber thx schonmal für die schnelle antwort :wink:
noidic - Mi 14.12.05 17:43
Da muss ich aber nun doch leider auf die Forensuche verweisen, zum Thema CreateProcess müsste es hier satt und genug Beiträge geben.
boontec - Mi 14.12.05 20:02
ja ok
aber nu kommts zum dicksten problem .. (lacht nicht :D hab ja erst vor ner woche angefangen :D )wie baue ich es nu ein das es klappt oO
jaenicke - Mi 14.12.05 20:20
Lachen tun wir nicht, weil jemand was nicht weiß...
Da gibts aber andere Gründe...
Zum Beispiel: "ja ok" und dann "aber wie baue ich das ein"...
Das "ja ok" ließ vermuten, dass du da was gefunden hast und verstanden hast (zumindest was die Verwendung anbelangt...), aber dann frag ich mal, was du da ausprobiert hast?
Ich meine, wir können versuchen Code zu korrigieren, den du zusammengebastelt hast, aber wenn du keinen postest, in dem du CreateProcess oder so ausprobiert hast...
Ich meine, wenn du damit nicht klarkommst, dann frag, was du nicht verstehst!
(By the way: Eigentlich musst du nur nen Code mit WaitForSingleObject suchen, und dann den Befehl verändern, denn der Rest ist an sich gleich...)
Und wenn du nach WaitForSingleObject suchst, dann findest du da Lösungen, wo wirklich nur der DOS-Befehl ausgetauscht werden muss (und das seeehr weit oben auf der Trefferliste :roll: ). Aber mehr sag ich nicht, da hab ich ja praktisch schon die Lösung genannt, eigentlich solltest du es ja selbst ausprobieren...
boontec - Mi 14.12.05 20:31
lol dieses "ja ok" galt für die die forensuche das ich mich damit begnüge oO
aber danke ihr habt mir schon weitergeholfen
boontec - Do 15.12.05 12:56
so nochmal ich ..
bei mir hat nu alles geklappt big thx an euch
aber ein kleines problem hab ich noch
und zwar gibt DoS die textdatein mit einem ASCII code aus aber die RichEditBox liest sie mit dem Windows standart Ansi ein..
wie kann ich es ändern ? weil die sonderzeichen wie Ö, Ä, Ü werden als seltsame zeichen angezeigt danke im vorraus
und P.S. es eilt nicht so extrem ist halt nur für die optik nicht so toll
MfG
noidic - Do 15.12.05 13:20
Zunächst mal: Andere Frage, anderes Topic :)
Versuchs mal mit nem TMemo statt TRichEdit, vllt. geht das besser.
boontec - Do 15.12.05 14:51
naja geht genau so wenig aber ich mach mal n neuen thread auf
thx
jaenicke - Do 15.12.05 18:09
Ich hab jetzt nicht in den neuen Thread gekuckt, aber es gibt da OemToChar und umgekehrt, das wandelt DOS in ANSI bzw. umgekehrt um. Brauchste auch nur nach Beispielen zu suchen...
Und ob nun Memo oder RichEdit ändert da gar nix...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!