vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: Mehrere DOS Befehle in einem Fenster 
Autor: Preisser
Datum: 10.09.13 20:21

Hallo,

wenn es darum geht, verschiedene Befehle abzuarbeiten, wobei immer gewartet werden soll, bis der aktuelle fertig ist, bevor der nächste startet, kannst du auch "cmd.exe /c [Befehl]" verwenden. Dies bewirkt, dass die cmd.exe den Befehl abarbeitet und sich dann beendet.
Das Warten auf das Prozessende müsste dann mit WaitForSingleObject erledigt werden können, hier ein Beispiel.
Allerdings wird damit der aktuelle Thread blockiert, bis der Prozess beendet wurde.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 10.09.13 16:18

Moin Moin!
Suche schon den ganzen Tag nach Antworten, kann aber nicht das Richtige finden.

1.Also, ich möchte eine. exe mit mehreren Buttons bauen, die beim Öffnen gleich ein DOS Fenster öffnet und einen Befehl startet.
Das ist ja nicht so ganz schwer und habe ich hinbekommen.

Private Sub Form_Load()
Shell "cmd /k cd /d d:\Arbeit\Test.exe"
End Sub
Wenn ich sehe, dass im DOS Fenster der Befehl abgearbeitet wurde (da steht dann ...successful...), möchte ich einen Button drücken, wo ein weiterer Befehl an das selbe DOS-Fenster übergeben und abgearbeitet wird.

Hier habe ich bis jetzt nicht gefunden, wie ich an das [u]selbige Fenster einen weiteren Befehl geben kann.

2. Könnte ich auch aus dem DOS-Fenster das Wort successful in meinem Programm verarbeiten; also, wenn das Wort erscheint, dass daraufhin mein Programm einen weiteren Befehl an das DOS-Fenster übergibt???

Wäre über Antworten echt dankbar.

LG
sosaschie
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Blackbox
Datum: 10.09.13 18:41

Hi,

dazu musst Du die Konsole programmieren. Aber leider ist das in VB alles Andere als ein Anfängerthema und ich schreibe daher nur den Hinweis darauf. Siehe unter MSDN die Funktionen unter Console. Du kannst jede EXE mit einer Console verbinden und über deren Pipes auswerten.

Zusammenfassung: Read
-> Console
-> Named Pipes
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Preisser
Datum: 10.09.13 19:44

Hallo,

wenn du auf VB.Net umsteigen würdest, könntest du dies einfach über das Umleiten der StdIn-, StdOut- und StdErr-Streams erreichen, wenn du den cmd.exe-Prozess startest. Dann kannst du beispielsweise von deinem Programm aus Kommandos senden und das Ergebnis auslesen, ohne dafür WinAPIs verwenden zu müssen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 10.09.13 20:15

Danke für die Antworten.

Ja, ich muss unbedingt umsteigen auf .net, aber das dauert.
Also, den Punkt 2 brauche ich nicht dringend, aber läßt sich Punkt 1. nicht unter VB6 realisieren?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 10.09.13 20:41

Mir ist das zu unsicher mit dem Warten auf Prozessende und ich werde das quasi nach Sicht machen. Aber das nützt mir nichts, wenn ich nicht in einem DOS Fenster nacheinander Befehle einfügen kann.
Hast Du da eine Idee?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Preisser
Datum: 10.09.13 20:58

Hallo,

unter VB6 dann bleibt dir dann wohl nur das übrig, was Blackbox schrieb (manuell die Std-Kanäle umleiten über die WinAPI).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Blackbox
Datum: 10.09.13 21:27

Hi Preisser,

ich bin mir sicher: .NET macht dasselbe ;) Nur mit meiner Methode weiß er wie's funktioniert. Mit deiner Methode ist er vielleicht schneller, aber nur im Moment, weil gelernt hat er dabei unter .NET nichts.

Aber: Das ist kein Anfänger-Stoff.
Die Grundlagen des Betriebssystems sollten dabei schon geläufig sein.

Beitrag wurde zuletzt am 10.09.13 um 21:31:05 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Preisser
Datum: 10.09.13 21:42

Hallo,

Blackbox schrieb:
Zitat:

ich bin mir sicher: .NET macht dasselbe ;) Nur mit meiner Methode weiß er wie's funktioniert. Mit deiner Methode ist er vielleicht schneller, aber nur im Moment, weil gelernt hat er dabei unter .NET nichts.

Sicherlich macht .Net dasselbe.
Aber ich denke, wenn man wissen will, wie Windows-interne Sachen funktionieren und da auch alles selber machen will, wird man wohl eh mit C++ programmieren und nicht mit VB(.Net) oder C#.

Aber wenn man sich z.B. aufs eigentliche Programmieren konzentrieren will und sich weniger dafür interessiert, wie genau jetzt dies und jenes in Windows implementiert ist, fährt man m.E. mit den in .Net intergrierten Konzepten besser. Wenn man die .Net-Grundlagen verstanden hat (in diesem Fall: Threads, Streams, Encodings, Reader/Writer usw.) muss man eigntlich für einen Fall wie diesen (Umleiten der Std-Kanäle) auch nichts spezielles wissen, um es korrekt anzuwenden. Bei Bedarf kann man dann immer noch WinAPIs einbinden und verwenden.

Beitrag wurde zuletzt am 10.09.13 um 21:48:53 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 10.09.13 21:47

Ich danke euch beiden.
Offensichtlich ist das zu schwer für mich.
Ich dachte es würde so ähnlich funktionieren, wie das Einfügen in eine Textdatei.

Und da das anscheinend kein Thema für das Anfänger Forum ist; was ich dachte, da ich ein Anfänger bin und auf hilfreiche Antworten gehofft hatte; werde ich das Projekt verschieben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Blackbox
Datum: 10.09.13 21:52

Hi

vernünftige Idee
Wenn Du das angehen willst, schreibst mir halt ne PN.

Beitrag wurde zuletzt am 10.09.13 um 21:54:04 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 10.09.13 22:06

Wow, also sowas Unverschämtes habe ich ja noch nie gehört. Ich finde es super wenn mir Jemand hilft, aber erhrlich gesagt, mehr als ein paar schlaue Sprüche hast Du mir nicht geschrieben. Das was Du mir gesagt hast habe ich mir auch schon vorher angesehen und leider nicht ganz verstanden. Oh ja und deshalb wende ich mich an das Anfänger Forum.
Und anstatt das Toll zu finden, dass ich mein Projekt verschiebe, könntest du es ja auch mal mit echter Hilfe versuchen.
Ich habe schon in Foren auf Hilfesuche geantwortet und versucht demjenigen, der es ja nicht wußte wie es geht, geduldig geholfen und nicht wie du reagiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Blackbox
Datum: 10.09.13 22:18

wenn du meinst ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Rippler
Datum: 11.09.13 00:07


Dim WSH As Object
 
Private Sub Command1_Click()
   WSH.AppActivate "cmd.exe"
   WSH.SendKeys "notepad.exe"
   WSH.SendKeys "{Enter}"
End Sub
 
Private Sub Form_Load()
   Set WSH = CreateObject("WScript.Shell")
   WSH.run "cmd.exe"
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 12.09.13 17:37

Hi Rippler,
vielen Dank. Das ist genau, was ich gesucht habe. Einfach und funktioniert . DANKE!

Aber, etwas ist mir jetzt bei meinem Programm aufgefallen.
Ich habe der .exe gesagt, dass sie immer als Administrator starten soll (Rechte Maustaste - Eigenschaften und Kompabilität). Wenn ich die .exe auf einen anderen PC kopiere verliert sie die Einstellung. Wie bekomme ich es hin, das mein Program das UAC anspricht und immer Adminrechte verlangt auch wenn ich es auf einem anderen PC starte?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Preisser
Datum: 12.09.13 18:04

Hallo,

SendKeys simuliert Tastatureingaben, die an das aktive Fenster gesendet werden. Wenn das Fenster nicht im Vordergrund ist, kann es passieren, dass diese unbeabsichtigt an ein anderes Fenster gesendet werden.

Wenn du allerdings gleich am Anfang mehrere Kommandos angeben willst, die nacheinander abgearbeitet werden sollen, kannst du es ja auch so machen:
cmd.exe /k dir && notepad.exe && echo Hi!
Dies würde die cmd.exe starten, die nacheinander die drei angegebenen Befehle ausführt.

sosaschie schrieb:
Zitat:

Aber, etwas ist mir jetzt bei meinem Programm aufgefallen.
Ich habe der .exe gesagt, dass sie immer als Administrator
starten soll (Rechte Maustaste - Eigenschaften und
Kompabilität). Wenn ich die .exe auf einen anderen PC kopiere
verliert sie die Einstellung. Wie bekomme ich es hin, das
mein Program das UAC anspricht und immer Adminrechte verlangt
auch wenn ich es auf einem anderen PC starte?


Du musst in dem Manifest zur .Exe angeben, dass diese Administratorrechte benötigt.

Eine Anleitung zum Einfügen eines Manifest gibts hier: http://www.vbarchiv.net/tipps/details.php?id=925

Über das <requestedExecutionLevel>-Element kann dann die benötigte Stufe angegeben werden. Hier ein Beispiel für ein Manifest, das Administratorrechte anfordert:
Edit: Sorry, das vorherige Manifest funktionierte nicht; mit dem müsste es aber klappen:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
    <v3:security>
      <v3:requestedPrivileges>
        <v3:requestedExecutionLevel level="requireAdministrator" />
      </v3:requestedPrivileges>
    </v3:security>
  </v3:trustInfo>
</assembly>


Beitrag wurde zuletzt am 12.09.13 um 18:24:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 12.09.13 22:03

Danke Preisser!

Aber das funktioniert alles irgendwie nicht.
Hab mir das mit dem VB Tip durchgelesen und erstellt, aber wenn ich dann die .exe starten will bekomme ich eine Fehlermeldung. Dann habe ich mich mal zum Thema Manifest umgelesen und eine erstellt, aber nirgendwo gefunden, wie ich die denn in meinem Programm einbinde.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Preisser
Datum: 12.09.13 22:15

Hallo,

ich habs bei mir mal probiert (VB6), und da hat es funktioniert.

Ich hatte zuvor in meinem Beitrag eine andere Manifestdatei, die jedoch nicht funktionierte - vielleicht hattest du die kopiert?
Mit der aktuellen Manifestdatei aus meinem letzten Beitrag funktioniert es.

Das Einbinden der Resourcendatei (.res), die zuvor mit RC.exe erstellt wurde, geht übers Menü "Projekt", "Datei hinzufügen" (o. ä.).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 12.09.13 22:46

Ja, das Einbinden als Datei habe ich gemacht.
Muss ich die dann bei Form Load auch irgendwie noch deklarieren?
Die CommonControls im Tip sind ja sicherlich nur für den XP Style oder?

und wie funktioniert das mit einer extra manifest (also programm.exe.manifest) datei ... muss ich die auch irgendwie im Programm deklarieren?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Franki
Datum: 12.09.13 23:22

Hallo,

nein da brauchst du gar nichts zu machen.
Die Datei Anwendungsname.exe.manifest muss nur im selben Verzeichnis wie die Exe liegen.

Ganz simples Beispiel:
Neues VB6 Pojekt nur mit:

Private Sub Form_Load()
    MsgBox "Ich brauche UAC"
End Sub
Exe erstellen mit dem Namen UACTest.exe

dann das Beispiel von Preissner hier raus kopieren in den Windows Editor einfügen und speichern als UACTest.exe.manifest im gleichen Verzeichnis wie die UACTest.exe

Kontrollieren, ob die Dateigrößte durch 4 teilbar ist, ansonsten mit Leerzeichen auffüllen per Editor bis z.B. 400 Byte.

Beide Dateien auf einen Win7 PC kopieren und die Exe per Doppelklick starten. Es meldet sich die UAC mit der üblichen Frage. Habe ich grade zur Kontrolle getestet unter Win7 32bit und Win8 64bit.

Gruß
Frank







Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: sosaschie
Datum: 12.09.13 23:47

Oh man ... keine Ahnung, was vorher los war, aber nachdem ich einfach mal das von Frank ausprobiert habe und das Selbe dann bei meinem eigentlichen Programm hat es funktioniert :-D

Das Einbetten funktioniert nicht, aber mit der zusätzlichen Manifest Datei kann ich leben.

Ich danke euch beiden sehr.

LG
sosaschie
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere DOS Befehle in einem Fenster 
Autor: Franki
Datum: 13.09.13 00:00

Hallo,

das Einbetten sollte aber schon funktionieren. Bei Sachen wo es nur um die Optik geht wie bei dem Beispiel mit den XP-Styles ist das egal, aber wenn es wie hier um die UAC bzw. Berechtigungen geht sollte sie schon eingebettet sein.

Denn wenn der Anwender die *.exe.manifest einfach löscht kommt keine UAC Anfrage mehr.

Das mit der Datei im selben Verzeichnis wie die Exe ist eigentlich nur für Tests gedacht, damit man kontrollieren kann, ob alles funktioniert wie gewünscht. Wenn dem so ist sollte man sie einbetten, denn sonst kann der User sie löschen oder ändern.

Probiere das doch mal mit dem simplen Beispiel von mir aus, vielleicht lag ja der Fehler woanders.

Gruß
Frank



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel