Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst CMD öffnen, offen halten und befehl übergeben

Mitglied: SvenGuenter

SvenGuenter (Level 1) - Jetzt verbinden

16.01.2008, aktualisiert 17.01.2008, 27767 Aufrufe, 9 Kommentare

Hallo foglendes Problem.
Ich will aus einem VB6 Programm eine shell öffnen einen befehl schon vorgeben aber noch NICHT absenden. Sprich der User soll noch möglichkeiten zum editieren haben.

Ich habe schon was gemacht aber leider schließt sich die cmd sofort wieder wenn ich diese mit

SHELL programm,vbnormalsize

anspreche

in programm ist der String hinterlegt. Als Beispiel "echo C:\Programme\Verzeichnis\programm.exe"

Der exe kann aber noch ein oder mehrere Parameter übergeben werden, weswegen diese nicht gestaret werden soll.
Gibt es da einen Schalter den ich setzen muss oder wie mach ich das am besten?


Gruß

Sven
Mitglied: bastla
16.01.2008 um 11:56 Uhr
Hallo SvenGuenter!

Warum nicht dem Benutzer eine InputBox anbieten und dann die vollständige Parameter-Zeile an den Batch übergeben?

Eine etwas abenteuerliche Variante könntest Du über "SendKeys" versuchen.
Wenn Du das CMD-Fenster (bis zur Ausführung eines "exit"-Befehles - egal ob durch Benutzereingabe oder per Batch) offen halten willst, dann mit "cmd /k" aufrufen - dazu kannst Du auch gleich einen (sofort auszuführenden) Befehl angeben, etwa
01.
objShell.Run "cmd /k cd /d D:\Test"
Grüße
bastla
Bitte warten ..
Mitglied: SvenGuenter
16.01.2008 um 12:07 Uhr
problem ist das die cmd sich schließt auch wenn sie offen bleiben soll.

z.B muss bei einer *.exe im nachhinein noch ein passwort eingegeben werden, was ich aber nicht mit dem ersten string erledigen kann.

Ich habe das ja auch so gemacht. Sprich textfeld welches ich auslese und dann der shell übergebe was ich halt nicht hinbekomme das das Dosfenster aufbleibt nachdem der befehl abgesetzt wurde.
Bitte warten ..
Mitglied: SvenGuenter
16.01.2008 um 12:12 Uhr
Hallo SvenGuenter!

Warum nicht dem Benutzer eine InputBox
anbieten und dann die vollständige
Parameter-Zeile an den Batch übergeben?

Eine etwas abenteuerliche Variante
könntest Du über
"SendKeys" versuchen.
Wenn Du das CMD-Fenster (bis zur
Ausführung eines
"exit"-Befehles - egal ob durch
Benutzereingabe oder per Batch) offen halten
willst, dann mit "cmd /k" aufrufen
- dazu kannst Du auch gleich einen (sofort
auszuführenden) Befehl angeben, etwa
01.
objShell.Run "cmd /k cd /d
02.
> D:\Test"
03.
> 
Grüße
bastla

das objshell referentierst du worauf?
Bitte warten ..
Mitglied: bastla
16.01.2008 um 12:20 Uhr
Hallo SvenGuenter!

Sorry, war noch in VBScript - dort:
01.
Set objShell = WScript.CreateObject("WScript.Shell")
In VB6 genügt natürlich ein "Shell".

Grüße
bastla
Bitte warten ..
Mitglied: SvenGuenter
16.01.2008 um 12:31 Uhr
super das geht schonmal einwandfrei und wie übergebe ich nun an die cmd einfach nur einen befehl ohne das dieser ausgeführt wird. Oder einfach nur Zeichen?
Bitte warten ..
Mitglied: bastla
16.01.2008 um 14:17 Uhr
Hallo SvenGuenter!

... wie übergebe ich nun an die cmd einfach nur einen befehl ohne das dieser ausgeführt wird
Abgesehen vom oben erwähnten "SendKeys" eigentlich gar nicht ...

... wobei ich mir nicht sicher bin, dass die angestrebte Vorgangsweise nötig ist - immerhin kennt Batch ja zumindest eine Input-Möglichkeit über
01.
set /p "Eingabe=Parameter angeben: "
02.
echo Eingegeben wurde: %Eingabe%
Grüße
bastla
Bitte warten ..
Mitglied: SvenGuenter
16.01.2008 um 15:44 Uhr
Hi Ich bekomme die Motten.

Also ich habe folgendes verscuht

Versuch 1.
01.
Option Explicit
02.
Public befehlshilfe As String
03.
Private Declare Function WriteConsole Lib "kernel32" Alias _
04.
        "WriteConsoleA" (ByVal hConsoleOutput As Long, ByVal _
05.
        lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, _
06.
        ByRef lpNumberOfCharsWritten As Long, lpReserved As Long) As Long
07.
        
08.

09.
Private Declare Function AllocConsole Lib "kernel32" () As Long
10.
Private Declare Function FreeConsole Lib "kernel32" () As Long
11.
Private Const STD_OUTPUT_HANDLE As Long = -11&
12.
Private hConsoleIn As Long
13.
Private hConsoleOut As Long
14.
Private hConsoleErr As Long
15.
Private Declare Function GetStdHandle Lib "kernel32" _
16.
        (ByVal nStdHandle As Long) As Long
17.
Private Declare Function sleep Lib "kernel32" (ByVal dwMilliseconds&)
18.

19.

20.
'******************************************************************
21.
'Klickereignis und dann soll es passieren
22.
'******************************************************************
23.
Private Sub button_programmstarten_Click()
24.

25.
    Call AllocConsole
26.
    
27.
    shell "C:\Programm.exe" , vbnormalfocus
28.
    
29.
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)
30.
    Call ConsolePrint("Hallo, wer immer Du auch bist!" & vbCrLf)
31.

32.

33.
Me.button_cancel.Caption = "Beenden"
34.
End Sub
35.

36.
Private Sub ConsolePrint(szOut As String)
37.
    Dim BytesWritten As Long
38.
    
39.
    Call WriteConsole(hConsoleOut, szOut, Len(szOut), BytesWritten, 0&)
40.
End Sub
41.

42.

43.
erfolg? Nein er macht ein neues cmd auf und schreibt mir da schön den text rein.
Also ich nicht dumm und nciht faul sendkeys angeschaut und folgendes gebastelt

01.
'******************************************************************
02.
'Klickereignis und dann soll es passieren
03.
'******************************************************************
04.

05.
Private Sub button_programmstarten_Click()
06.
Dim programm As String
07.
Dim progid
08.

09.

10.
programm = Me.txtcommand
11.
progid = Shell(programm, vbNormalFocus)
12.
'******************************************************************
13.
'Schleife damit Progid auch sicher gefüllt ist
14.
'******************************************************************
15.

16.
Do
17.
If progid <> 0 Then Exit Do
18.
sleep (50)
19.
Loop
20.
'******************************************************************
21.
'Cmdfnester als aktive App setzen
22.
'******************************************************************
23.

24.
AppActivate progid, 1
25.
'******************************************************************
26.
'Zu sendende Zeichen
27.
'******************************************************************
28.

29.
SendKeys "abc", 1
30.
Me.button_cancel.Caption = "Beenden"
31.
End Sub
32.
'******************************************************************
33.
'^Benötigte globale function sleep im allgemeinen Teil declariert
34.
'******************************************************************
35.
Private Declare Function sleep Lib "kernel32" (ByVal dwMilliseconds&)
36.


Tja auch das Funktioniert nicht. Bin mit meinem Latein langsam am ende. Wenn ich bei der shell das Programm mitgebe wird das Programm gestartet und bei appactivate steigt das programm aus weil ich angeblich die prozedur falsch aufrufe oder ein fehlerhaftes argument habe.

Ich hoffe es kann mir einer helfen.


edit
Kleine kuriosität. Ich habe eine Messagebox eingebaut das ich sehe welche progid ich habe. Wenn ich diese direkt nach dem erscheinen wegklicke bekommt meine Dosbox den SendKey. WEnn ich diese msgbox wegnehme bekomme ich einen Fehler bei AppActivate
Bitte warten ..
Mitglied: bastla
16.01.2008 um 18:57 Uhr
Hallo SvenGuenter!

Es fällt mir weiterhin schwer, die Notwendigkeit der von Dir angedachten Vorgangsweise zu erkennen. Sieh Dir vielleicht einmal den folgenden Versuch mit einem Startbatch und einem, das Programm simulierenden, weiteren Batch an - in beiden Batchdateien wird dem Benutzer die Möglichkeit gegeben, an der Konsole eine Eingabe zu tätigen, obwohl der erste Batch direkt (also ohne explizites Öffnen einer CMD-Shell) gestartet wird:

VB6
01.
Private Sub btnStart_Click()
02.
Shell "D:\Starter.cmd Param1 Param2 ""Param 3"" Param4", vbNormalFocus
03.
End Sub
Batch "D:\Starter.cmd"
01.
@echo off & setlocal
02.
set /p "Zusatz=Weiterer Parameter (neben %*): "
03.
D:\Prog.cmd %* "%Zusatz%" "und noch ein Parameter"
Batch "D:\Prog.cmd"
01.
@echo off & setlocal
02.
echo.
03.
echo Prog.cmd
04.
echo Parameter waren: %1_%2_%3_%4_%5_%6_%7_%8_%9
05.
echo.
06.
echo bzw ohne Anfuehrungszeichen:
07.
echo Parameter waren: %~1_%~2_%~3_%~4_%~5_%~6_%~7_%~8_%~9
08.
echo.
09.
set /p "Passwort=Bitte Passwort eingeben: "
10.
echo Eingegebens Passwort: %Passwort%
11.
echo.
12.
pause
Sollte aus irgendeinem Grund das CMD-Fenster weiterhin benötigt werden, dann:
01.
Private Sub btnStart_Click()
02.
Shell "cmd /k D:\Starter.cmd Param1 Param2 ""Param 3"" Param4", vbNormalFocus
03.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: SvenGuenter
17.01.2008 um 11:05 Uhr
hi basta danke für deine Hilfe. Ich habe das jetzt erstmal anders geläst da ich das Programm fertig machen will und muss. Hintergrund ist folgender.

Es wird eine Datei ausgelesen die alle User mit Computernamen beinhaltet.

Falls ein User bei uns in der EDV anruft können wir nun diese Datei auslesen den Computernamen erfahren und mit den Sysinternal Tools auf den Rechner ( verbindung bekommt man auch wenn man will mit UltraVNC ) zugreifen.
Damit man nun nicht immer schauen muss welche Parameter der einzelne Befehl hat und wie er geschrieben wird habe ich ein Programm gebaut welches diese Befehle sucht und übernimmt. Mit einem Klick auf ein Datagrid bekommt man den Computernamen des users. Nun kommt der Teil mit der CMD
Der befehl den ich anklicke wird nun an die cmd gesendet und die cmd muss aufbleiben da es Tols gibt die sich immer wieder refreshen.
Nun war es aber so das den befehl den ich an die CMD gesendet habe via shell "cmd /K pslist.exe -s", vbnormalfocos als Beispiel, nicht in der CMD zur Verfügung hatte. Sprich die CMD hat diesen nicht gespeichert gehabt. Nun wollte ich das der Befehl einfach nochmal im CPROMPT steht. Dies wollte ich halt mit SendKeys oder ähnlichem sofort nach dem Befehl machen. Das klappte leider nicht. Nun habe ich das mit einem extra Button gemacht und da funktioniert das dann auch mit dem AppActivate. Irgendwie ist die CMD für eine gewisse Zeit für SendKeys nicht empfangsbereit.

Ist aber auch kein Problem da es so nun per Knopfdruck geht.

Falls ich mal eine Lösung finde das komplett Automiatisch zu machen werde ich das hier posten. Ich kann mir durchaus vorstellen das ich irgendwie den aktivitätsstatus der shell auslesen muss.


Gruß

Sven
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Shell-CMD Befehl Ausführen
gelöst Frage von Timo0oVB for Applications2 Kommentare

Nochmal ich^^ Ich möchte eine Aufgabe mit meinem VB Programm erstellen. Jedoch komme ich nicht weiter. Folgenden Code habe ...

Batch & Shell
CMD Hostname Befehl gesucht
gelöst Frage von TobiasedBatch & Shell4 Kommentare

Hallo Community, wie aus dem Titel schon hervorgeht suche ich einen cmd Befehl mit dem es möglich ist den ...

Server

Route-Befehl Unterstützung (unter CMD)

gelöst Frage von FKRR56Server38 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Batch & Shell

Ungewolltes Ausgabeformat in CMD (Befehlszeile+ Befehl)

Frage von DerArneBatch & Shell3 Kommentare

Guten Tag liebes Forum, an sich war mein Anliegen diverse Fragen zu meiner Batch zu klären. Nun hat sich ...

Neue Wissensbeiträge
Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 19 StundenWindows Mobile

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 2 TagenInternet5 Kommentare

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zugleich. Da werden aus Gerüchten plötzlich Fakten, da ...

Windows 10

Netzwerk-Bug in allen Windows 10-Versionen durch Januar 2019-Updates

Information von kgborn vor 2 TagenWindows 101 Kommentar

Nur ein kurzer Hinweis für Admins, die Windows 10-Clients im Portfolio haben. Mit den Updates vom 8. Januar 2019 ...

Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 3 TagenWindows 102 Kommentare

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Heiß diskutierte Inhalte
TK-Netze & Geräte
TAPI auf einem Win2016Server installieren und einrichten
Frage von wstabelTK-Netze & Geräte32 Kommentare

Hallo liebe Admins, ich habe folgende Situation: 1 Windows Server 2016 Standard als DC 1 SNOM 710 IP-Telefon 1 ...

Off Topic
Darf ich ein Forum erstellen das Produkte eines Herstellers betrifft?
Frage von cyberwallOff Topic9 Kommentare

Hallo Community, ich habe da eine "rechtliche" bzw. allgemeine Frage zum erstellen von Foren. Darf ich als "normale Person" ...

DNS
SFTP über DynDNS nicht OK - über ext. IP funktioniert es
Frage von C.MorgensternDNS8 Kommentare

Hallo zusammen! Ich habe Probleme beim SFTP Zugriff auf eine Linux Maschine vom WAN aus über eine DynDNS Adresse. ...

E-Mail
Rechtssichere Archivierung von emails
Frage von gerd33E-Mail8 Kommentare

Hallo zusammen, bin gerade dabei, eine revisions- und rechtsichere email-archivierung aucf meinem Server zu projektieren. Da eigentlich nur ich ...