Print in die Konsole von cmd.exe umleiten
Übersicht

![]() |
hazumu-kunBetreff: Print in die Konsole von cmd.exe umleiten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Folgendes Problem:
Viele Kommandozeilen-Tools pflegen es ihre Ausgaben DIREKT im aufrufendem Konsolenfenster anzuzeigen. Das standard 08/15 Print von Blitz will aber IMMER ein neues Fenster öffnen, sehr ärgerlich wenn z.B. nur eine Helppage zu den Parametern angezeigt wird und dann ein "End" kommt. Frage: Gibt es eine Möglichkeit dieses Problem zu umgehen? Meinetwegen auch per Winapi, ungefähr so: Code: [AUSKLAPPEN] Function Print (txt$) api_Print_to_console_window_that_executed_this_programm (txt$) End Function Ich weiß das es SO einfach nicht geht, aber die Idee hat jetzt (hoffentlich) jeder verstanden. Freue mich auf Hinweise, Links zur unübersichtlichen MSDN(bin zu blöd zum Finden) nehme ich auch gerne. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab grad versucht ne dll dafür zu schreiben...
Code: [AUSKLAPPEN] extern "C" __declspec( dllexport ) const void __stdcall ConsolePrint(char* text);
using namespace std; const void __stdcall ConsolePrint(char* text) { cout << text; } ziemlich naiv gell ![]() ![]() |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Damit kannst du in die Konsole schreiben: http://msdn.microsoft.com/en-u...S.85).aspx
Brauchst aber noch ein paar andere der Konsolen-Funktionen dafür (siehe Links unten auf der Seite). |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Link ist gebookmarked, ich schaus mir an wenn die motivation wieder da ist, danke im vorraus | ||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmn, das gestaltet sich verdammt schwierig.
Kennt sich hier jemand mit der WinAPI sehr gut aus der mir ein kleinen Proof of Concept zusammenschustern kann? Meine bisher mikkerlichen und nicht funktionierenden Ergebnisse: BlitzBasic: [AUSKLAPPEN]
Ergebnis: xyz.exe hat ein Problem festgestellt. HINWEIS: Code kompilieren und per cmd starten, damit attachconsole auch funktioniert |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
- Zuletzt bearbeitet von hazumu-kun am Di, Dez 29, 2009 15:58, insgesamt einmal bearbeitet
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich kenne mich recht gut aus. Das Problem ist, dass man ein Konsolenfenster erst öffnen müsste. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist offen, und zwar das von cmd.exe, in das ich per AttachConsole reinsteige, siehe oben. | ||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darf ich mal blöd fragen, wieso du api_WriteFile nutzt?
EDIT: Und du wirst so wie du veruscht, an das Handle der Konsole zu kommen, nix bekommen, da, soweit ich weiß, Programme, die man übers cmd startet nicht gleich auch Child des cmd-Fensters sind. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, sind sie. Problem ist das ich wahrscheinlich irgendwas an den Datenstrukturen vermassel.
Schafft es irgendjemand ein laufendes Beispiel zu coden oder was in ner DLL zu wrappen? |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich bin tatsächlich dafür, dass du mal anstatt api_WriteFile die oben angegebene Funktion "api_WriteConsole" verwendest:
Code: [AUSKLAPPEN] If Not api_AttachConsole (-1) Then RuntimeError "FUCK!" Local hconsole= api_GetStdHandle (-11) Local buffer= CreateBank(4) PokeByte buffer,0,Asc("T") PokeByte buffer,1,Asc("e") PokeByte buffer,2,Asc("s") PokeByte buffer,3,Asc("t") Local written= CreateBank(4) api_WriteConsole (hconsole,buffer,4,written,0) Notify PeekInt(written,0)+" written." und Userlibs: Zitat: .lib "kernel32.dll"
api_AttachConsole%(dwProcessId%) : "AttachConsole" api_GetStdHandle%(nStdHandle%) : "GetStdHandle" api_WriteConsole%(hConsoleOutput%,lpBuffer*,nNumberOfCharsToWrite%,lpNumberOfCharsWritten*,lpReserved%) : "WriteConsoleA" Das funktioniert nämlich so hervoragend. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
WTF!?
Ich hatte EINEN verdammten Tippfehler in meinen kernel32.decls! Sehr großen vielen dicken dank Eisvogel, du bist mein Vogel des Tages. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest dir per AllocConsole auch deinen eigene holen, dann musst du das Programm nicht über CMD starten.
P.S.: Das Ganze funktioniert unter Windows 7 nicht mehr! Edit: Hier noch eine Funktion dafür, mit Beispiel: BlitzBasic: [AUSKLAPPEN] AllocConsole() Decls: Code: [AUSKLAPPEN] AllocConsole() : "AllocConsole"
GetStdHandle%(nStdHandle%) : "GetStdHandle" WriteConsole%(hConsoleOutput%,lpBuffer*,nNumberOfCharsToWrite%,lpNumberOfCharsWritten*,lpReserved%) : "WriteConsoleA" SetConsoleTitle%(title$) : "SetConsoleTitleA" Achtung: Funktioniert nur bei der erstellten Exe! |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch Win7 kompatibel?
EDIT: Sinn der Aktion ist es ja in das Konsolenfenster von cmd.exe hineinzuschreiben, das funtioniert per AttachConsole und process id -1 (parent) sehr gut. Folgender Code rennt uner win7 genauso gut: BlitzBasic: [AUSKLAPPEN]
|
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, stimmt, ich hatte nen Fehler in der Decls ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mir mal erlaubt das in ein paar Funktionen zu packen ![]() ![]() BlitzBasic: [AUSKLAPPEN] CMD_Init ( ) Decls hat Folgendes geschrieben: .lib "kernel32.dll"
api_AttachConsole%(dwProcessId%):"AttachConsole" api_GetStdHandle%(nStdHandle%):"GetStdHandle" api_WriteConsole%(hConsoleOutput%,lpBuffer$,nNumberOfCharsToWrite%,lpNumberOfCharsWritten*,lpReserved%):"WriteConsoleA" |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, vielen herzlichen Dank.
Ich wurde auf den Thread nochmal aufmerksam als jemand ein ähnliches Problem postete. Habh den Thread hier ganz vergessen gehabt. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group