Eingabeumlenkung
-
d.h dein programm läuft im hintergrund, und wenn die eingabeaufforderung irgendwann mal "echo blaalb" ausgibt, soll das dein prgraomm merken und "balbla" lesen?
-
Und wo ist dein Problem? Verwendest du ein Exoten-Betriebssystem, das mit dieser Pipe-Syntax nicht zurechtkommt?
Nochmal langsam zum Mitmeiseln:
Das Betriebssystem ist in der Lage, diese Verkettungen auszuwerten und dafür zu sorgen, daß die Ein- und Ausgaben korrekt umgeleitet werden. Das heißt, mit dem Befehlecho "test" | myProgwird die Ausgabe des echo-Befehls direkt an den Standard-Eingabekanal von myProg weitergegeben (und du kannst sie ganz normal von cin/stdin auslesen).
-
Wenn ich das richtig verstanden habe wäre es ungefähr so?:
#include <iostream> #include <string> int main() { std::string eingabe; std::cin >> eingabe; return 0; }
-
So ungefähr.
-
ok das wars eigentlich schon genau das wollte ich machen ^^
THX
jetzt habe ich noch eine frage wie kann ich denn jedes einzelne zeichen einlesen lassen? wenn ich jetzt das oben gesehne prog schreibe und dann echo "hallo Welt" | myProg.exe mache dann leist er nur " "hallo " ich möchte aber jedes einzelne zeichen einlesen. Denn ich wollte am ende diese zeichen Binär ausgeben. Und da bräuchte ich jedes einzelne zeichen.
also ich habe mal folgendes Probiert:
#include <iostream> #include <vector> using namespace std; int main() { vector<char> test; char ein; while(cin >> ein) { cout << ein; test.push_back(ein); } return 0; }nur ist es jetzt so das er kein leerzeichen einliest -.-
-
BorisDieKlinge schrieb:
d.h dein programm läuft im hintergrund, und wenn die eingabeaufforderung irgendwann mal "echo blaalb" ausgibt, soll das dein prgraomm merken und "balbla" lesen?
Das wäre auch ne idee ^^ Wie würde denn das Funzen ;p
-
Du kannst die eingegebenen Daten genauso behandeln wie normale Tastatur-Eingaben (genau genommen macht es für das Programm keinen Unterschied, ob du es mit 'myProg' aufrufst und anschließend
Hallo Welteingibst oder ob du es mit 'echo "Hallo Welt" | myProg' aufrufst). Und zeichenweise bekommst du die Eingabe über cin.get().
-
Toll Thx ^^ Das mit cin.get() hätt ihc wissen sollen das habe ich bei mein Verschlüsselungsprog auch genutzt *schäm*
aber wie wäre es wenn ihc das so machen würde wie BorisDieKlinge es gemeint hätte.
d.h dein programm läuft im hintergrund, und wenn die eingabeaufforderung irgendwann mal "echo blaalb" ausgibt, soll das dein prgraomm merken und "balbla" lesen?
Wie könnte man das realisieren ?
-
Einfach versuchen zu lesen bis was im Stream ist.
-
sprich eine endloschleife die immer versucht zu lesen?
#include <iostream> #include <vector> using namespace std; int main() { vector<char> test; char ein; while(true) { while(cin.get(ein)) { cout << ein; test.push_back(ein); } } return 0; }
-
ich meine das wolltest du doch machen oder? Du willst alle "echo" ausgaben was dein PC so ausgibt in ne Textfile loggen? Oder?
wie genau man das macht weis ich net..
beim Programmstart ein thread starten des auf echo aurufe mit horcht
EDIT naja immer die cin.get... dings da abrufen und checken ob es ein "echo" ist dann text lesen und speichern..
-
Das reicht schon:
#include <iostream> int main() { char c; while ( true ) { std::cin.get( c ); } }
-
BorisDieKlinge schrieb:
ich meine das wolltest du doch machen oder? Du willst alle "echo" ausgaben was dein PC so ausgibt in ne Textfile loggen? Oder?
Also uhrsprünglich wollte ich das nur so machen das es nur EINE umleitung gibt die beabsichtigt wird.(Das hatt sich schon erledigt denn ich habs ja jetzt ^^)
Aber das was du sagst Klikt HOCh interesannt. Das wäre auch eine nette Sache ^^
Denn ihc wollte sowieso mal ein KeyLogger schreiben. Nur das Prob ist das ich mich noch NIE mit Threads beschäftigt habe ^^ (ich weis aber schon was die machen und was es ist ^^)
-
@Rainu: Nochmal ganz auf Anfang - was genau willst du in deinem Programm mitloggen? Gezielt alle 'echo' Aufrufe aus der Eingabeaufforderung zu filtern geht wohl am besten, indem du dein Programm 'echo.exe' nennst

-
@CStoll: hehe ... das wollte ich auch grad vorschlagen "Echo"

alles ding müsste man dem noch ein parameter mitgeben das er es loggen soll oder einfach nur ausgeben soll wie die standartversion;)
so ungefähr sollte die "echo.exe" dann ausehen;)
int main(int argc, char *argv[]) { if(argv[1] == "\log"){ //in datein schreiben } else printf("%s" argv[0]); }
-
Also noch mal xD
Ich wollte uhrsprünglich das auffangen was ich mit echo ausgebe (gezielt) Damit ich diese Daten dann verarbeiten kann. Das war in grunde genommen das Prog:
#include <iostream> #include <vector> using namespace std; int main() { vector<char> test; char ein; while(cin.get(ein)) { cout << ein; test.push_back(ein); } . . . return 0; }Also ist die Sache abgeschlossen!
ABER jetzt habe ich erfahren das man das Prob auf echos höhren lasen kann (KeyLogger)
Also will ich jetzt folgendes Schreiben:
Ein keyLogger der Alle zeichen in eine log-Datei scheibt
nätürlich soll das Prog im Hintergrund laufen ^^
-
@Boris: Vielleicht solltest du mal überdenken, was du da eigentlich ausgibst

Rainu schrieb:
ABER jetzt habe ich erfahren das man das Prob auf echos höhren lasen kann (KeyLogger)
Also will ich jetzt folgendes Schreiben:
Ein keyLogger der Alle zeichen in eine log-Datei scheibt
Nur zur Info - ein KeyLogger reagiert normalerweise nicht auf einzelne Befehle, der fängt alles ab, was du an Tasten drückst. Und um sowas zu schreiben, müsstest du dir einen KeyBoard-Hook einrichten (mach dich mal im WinAPI Board schlau, wie das funktioniert).
-
ups.. glaube ich gebe "echo" aus;) dann halht den index argv jeweils um eins erhöhen
-
Das ist es ja! vergesst jetzt doch mal das ECHO
Ich will ja jedes EINZELNES zeichen abfangen.
-
Ich weiß, Self-Quotes sind bäh, aber:
CStoll schrieb:
Und um sowas zu schreiben, müsstest du dir einen KeyBoard-Hook einrichten (mach dich mal im WinAPI Board schlau, wie das funktioniert).
(die dafür benötigte Funktion nennt sich SetWindowHookEx())