Folgender Code zeigt meinen bisherigen Fortschritt; zum Testen normal als "Windows"-Executable kompilieren und dann per Konsole öffnen:
Code: Alles auswählen
Global ConsoleRID, ConsoleWID, ConsoleOldMode
Prototype AttachConsole(dwProcessId)
Procedure ConsoleInit()
Protected LibraryID, AttachConsole
Protected Result = #False
LibraryID = OpenLibrary(#PB_Any, "kernel32.dll")
If LibraryID
AttachConsole.AttachConsole = GetFunction(LibraryID, "AttachConsole")
If AttachConsole
If AttachConsole(-1) ; #ATTACH_PARENT_PROCESS
ConsoleRID = GetStdHandle_(#STD_INPUT_HANDLE)
ConsoleWID = GetStdHandle_(#STD_OUTPUT_HANDLE)
ConsoleOldMode = GetConsoleMode_(ConsoleRID, @ConsoleOldMode)
If ConsoleRID <> #INVALID_HANDLE_VALUE And ConsoleWID <> #INVALID_HANDLE_VALUE
Result = #True
SetConsoleMode_(ConsoleRID, ConsoleOldMode | #ENABLE_PROCESSED_INPUT)
EndIf
EndIf
EndIf
CloseLibrary(LibraryID)
EndIf
ProcedureReturn Result
EndProcedure
Procedure ConsolePrint(Text.s)
Protected nbWritten
WriteConsole_(ConsoleWID, @Text, Len(Text), @nbWritten, #Null)
EndProcedure
Procedure.s ConsoleInput()
Protected *CharacterBuffer, CharactersReaded
Protected Result.s
Beep_(250, 150)
*CharacterBuffer = AllocateMemory(256 * SizeOf(Character))
If *CharacterBuffer
ReadConsole_(ConsoleRID, *CharacterBuffer, 256, @CharactersReaded, #Null)
Result = PeekS(*CharacterBuffer, CharactersReaded)
FreeMemory(*CharacterBuffer)
EndIf
Beep_(500, 150)
ProcedureReturn Result
EndProcedure
Procedure ConsoleExit()
SetConsoleMode_(ConsoleRID, ConsoleOldMode)
FreeConsole_()
EndProcedure
If ConsoleInit() = #True
ConsolePrint("Etwas eingeben: ")
MessageRequester("Eingabe", ConsoleInput())
ConsoleExit()
Else
MessageRequester("", "Console nicht genutzt.")
EndIf
Weiß jemand wo der Fehler liegt bzw. wie ich eine richtig funktionierende Input-Funktion bekomme?