Eingabeumlenkung
-
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())
-
Naja ok da das dann ja der Falsche Platzt ist schreibe ich das dann mal da rein.(ins WIN-API-Board)
Gut ich habe aber jetzt ncoh ein Prob ;p
#include <iostream> #include <vector> using namespace std; int main() { vector<char> test; char eingabe; while(cin.get(eingabe)) { test.push_back(eingabe); } for(int i=0;i<test.size();i++) { cout << hex << test[i]; } return 0; }ich will die ausgabe Hexadezimal ausgeben bzw auch Binär(wenn es denn Möglich ist
) Könnts mir da helfen xD
-
char's werden grundsätzlich in Zeichenform ausgespuckt, also mußt du sie für Hex-Ausgabe in int umwandeln (für Binärausgabe kannst du Bitset's verwenden):
cout<<hex<<setfill('0');//brauchst du btw nur einmal vor der Schleife for(int i=0;i<test.size();++i) { cout << setw(2) << (int)test[i]; } // bzw. for(int i=0;i<test.size();++i) { cout<<bitset<8>(test[i])<<' '; }
-
ok .. also das bitset<8> findet er nicht (vlt eine fehlende include datei).bei setfill('0') musste ich noch "#include <iomanip>" schreiben.
Eine Frage bleibt ausserdem noch
for(int i=0;i<test.size();++i)ruft er bei jedem schleifen durchlauf test.size() auf. Denn wenn ja wäre es sinvoll diese angabe in eine extra Variable zu schreiben (aus zeitgründen)?
-
perfomancetechnisch, düfte dies test.size() kein problem darstellen.. das geht vll. max ne 1ms

-
Rainu schrieb:
ok .. also das bitset<8> findet er nicht (vlt eine fehlende include datei).
Gut erkannt - und die nötige Headerdatei ist ...trommelwirbel... <bitset>
Eine Frage bleibt ausserdem noch
for(int i=0;i<test.size();++i)ruft er bei jedem schleifen durchlauf test.size() auf. Denn wenn ja wäre es sinvoll diese angabe in eine extra Variable zu schreiben (aus zeitgründen)?
Ja, macht er. Und nein, brauchst du normalerweise nicht (size() ist eine inline-Funktion und idR so klein, daß jeder vernünftige Compiler sie auch inline expandieren wird).