Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 17.07.2004, 13:25 Titel: EXE I/O |
|
|
Hi!
Ich wollte fragen, ob es irgendwelche Funktionen gibt um von meinem Programm aus zb. cmd.exe zu "öffnen", dann in cmd.exe was "reinzuschreiben" und den Output auch zu bekommen.
Beispiel (Namen für die funktionen erfunden):
Code: |
ÖffneExeDatei("cmd.exe");
SchreibeInExe("dir");
SchreibeOutputvonExeInVariable(szBuffer);
SchreibeInExe("cd ..");
SchreibeInExe("dir");
SchreibeOutputvonExeInVariable(szBuffer);
|
Danke! _________________ visit:
and da-harry.de Forum |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 17.07.2004, 13:40 Titel: |
|
|
ShellExecute()
In der MSDN sollten die Parameter stehen.
PS: Es gibt auch noch WinExec(). Ich weiß aber nicht mehr, welche der beiden Funktionen für *.exe's zuständig ist.
<edit>
Aber was willst du denn in die Exe reinschreiben?
</edit> _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
abc_d JLI Master Trainee
Alter: 34 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 17.07.2004, 13:56 Titel: |
|
|
Er will was in die Konsolle schreiben, nicht in die exe. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 17.07.2004, 14:18 Titel: |
|
|
Das Stichwort an der stelle lautet: Pipes
Gibts C Funktionen wie popen und pclose für. Die Funktionieren genau so wie die Funktionen fopen,fclose .. usw.
Die Funktionieren jedenfalls bei Konsolen Programmen. Bei "richtigen" Win32 Programmen funktioniert das ganze mit den Funktionen nicht IIRC.... |
|
Nach oben |
|
|
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 17.07.2004, 15:24 Titel: |
|
|
Danke für die Antworten!
Mal schaun ob ich damit zurecht komme... _________________ visit:
and da-harry.de Forum |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 17.07.2004, 15:55 Titel: |
|
|
Heißt das, das man damit zugriff auf die konsole bekommt?Kann man sie dann komplett auslesen und auch alles reinschreiben? Also kann man damit qusi cout und cin fernsteuern? Nur mal so aus Interesse, weil ich es seltsam finde das es so einfach ist. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 17.07.2004, 16:00 Titel: |
|
|
Mit hilfe von diesen Funktionen kannst du ganz einfach die Standard Eingabe bzw. Ausgabe von Programmen lesen bzw. beschreiben.
Eigentlich ist es so einfach.
Aber unter winodws gibt es glaub ich Probleme, wenn man versucht von einem GUI Programm aus die Standard E/A eines anderen Programmes zu lesen.Dann wird das ganze etwas komplizierter.... |
|
Nach oben |
|
|
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 17.07.2004, 16:14 Titel: |
|
|
Hallo!
Es funktioniert auch nicht mit meinem Programm!
Es gibt immer nur:
Microsoft Windows XP [Version X.X.XXXX]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Dokumente und Einstellungen\XXXXXXXXXXXXXXXXXXXXX>
aus, selbst wenn ich dann mit fwrite zb dir oder so schreibe, hier ein snippet aus meinem code:
Code: |
char szTmpOutput[5024];
char szOutput[5024];
char szTmp[500];
BOOL bCMDLoop = TRUE;
FILE *hCmd = _popen( "cmd", "rw" );
fread(szTmpOutput,sizeof(char),5024,hCmd);
int cntBytes = sprintf(szOutput,"%s",szTmpOutput);
send(*sckSocket,szOutput,cntBytes,0);
while(bCMDLoop)
{
bCMDLoop = CutParams(*sckSocket, CmdStruct);
if(strcoll( CmdStruct->szCommand, "kill") != 0)
{
sprintf(szTmp,"%s\n",CmdStruct->szCommand);
fwrite(szTmp,sizeof(char),500,hCmd);
fread(szTmpOutput,sizeof(char),5024,hCmd);
int cntBytes = sprintf(szOutput,"%s",szTmpOutput);
send(*sckSocket,szOutput,cntBytes,0);
}
else
bCMDLoop = FALSE;
}
_pclose(hCmd);
|
findest du vieleicht einen Fehler oder hast du ein Tutorial über dieses Thema? _________________ visit:
and da-harry.de Forum |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 17.07.2004, 17:05 Titel: |
|
|
Wenn es dir nur um die Konsole geht, da geht es mit
Code: |
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
using namespace std;
int main(int argc, char* argv[])
{
System("dir C:\");
}
|
Damit machst du das jeweilige was system übergeben wird. |
|
Nach oben |
|
|
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 17.07.2004, 17:18 Titel: |
|
|
deisen befehl kenne ich bereits, aber ich will mit cmd.exe argieren, ich versuch nämlich so eine art remote shell für windows zu programmieren. _________________ visit:
and da-harry.de Forum |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.07.2004, 17:19 Titel: |
|
|
Das gleiche würde aber auch ShellExecute() oder auf jeden Fall WinExec() bewirken, was "The Lord of Programming" vorgeschlagen hatte aber "BlackLordOfDragons" meinte dass da-harry das nicht so wollte.
Wenn es ihm nur darum geht das auf dem Bildschirm anzuzeigen müsste es sogehen. Aber wir wissen ja nicht was er mit den ausgegeben Daten machen will. Ich würde ja eh so wenig wie möglich andere Programme mit meinem eigenen Programm "agieren" lassen. Für das meiste gibt es ja doch "einfache" C++ Funktionen. Und dann lernt man ja noch was dazu und muss sich nicht immer auf die manchmal eigenwilligen in diesem Falle "DOS Methoden" verlassen. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 17.07.2004, 17:35 Titel: |
|
|
Ich will, dass ich mich von einem anderen rechner zu meinem computer übers internet connecten kann um dann cmd.exe zu steuern. _________________ visit:
and da-harry.de Forum |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 17.07.2004, 17:48 Titel: |
|
|
ah, eine netzwerkfernbedienung. Coole Idee!Aber kann man auch Prgramme so einfach über Netzwerk starten, oder muss es dafür schon laufen? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 17.07.2004, 18:03 Titel: |
|
|
Du könntest auch VNC benützen, aber wenn du es selber programmieren willst.
@Jonathan_Klein: Solche programme bestehen normalerweise aus Server/Client _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 17.07.2004, 18:26 Titel: |
|
|
@Jonathan_Klein: Da muss der Server auf dem zu fernbedienenden Rechner laufen, der würde dann (wenn ich wüsste wie) über cmd.exe andere programme starten oder befehle ausführen.
Fernbedienen kann man dann mit telnet. _________________ visit:
and da-harry.de Forum |
|
Nach oben |
|
|
|