Win 8: BlitzPlus nimmt keine Tastatureingaben an

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

funkmaster5000

Betreff: Win 8: BlitzPlus nimmt keine Tastatureingaben an

BeitragSa, Aug 03, 2013 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem wird schon bei folgendem und simplen Programm deutlich:

Code: [AUSKLAPPEN]

While Not KeyHit(1)

Print "a"

Wend
End


Ich kann wie verrückt auf ESC hauen, es passiert nichts! 2 Tastaturen habe ich bereits durchprobiert! Hat jemand ähnliche Erfahrungen?

EDIT:
Betroffen ist wohl nur der reine Textmodus. Das funktioniert:
Code: [AUSKLAPPEN]
Graphics 640,480,32,2
SetBuffer BackBuffer()

While Not KeyHit(1)
Cls

Text 0,0, "a"

Flip
Wend

End


2 EDIT:
Es ist tatsächlich nur die Konsole betroffen. Input funktioniert komischerweise!

count-doku

BeitragSa, Aug 03, 2013 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Erstes Beispiel würde doch bei BlitzPlus in der Console ausgeführt, richtig?
Dann ists klar, dass es nicht geht, denn die KeyHit/KeyDown nutzen die DirectX Input funktionen -> diese werden für die Console nicht geladen....

Das war aber nicht erst unter 8 so, sondern afaik immer. Ist halt so.



lg,
Count-Doku
 

funkmaster5000

BeitragSa, Aug 03, 2013 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh mann! Das macht natürlich Sinn! Das ist mir noch nie aufgefallen, man macht ja eigentlich selten (nie) was im Textmodus. Danke.

EDIT:
Wobei sich der Textmodus doch mit ESC beenden lassen sollte? Wie soll ich das denn anders machen? Getkey basiert wohl auch auf DirectX, ich bekomme nämlich ebenfalls keinen Wert zurückgeliefert.

count-doku

BeitragSo, Aug 04, 2013 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm nein, die Konsole kriegst du nicht mit ESC zu. Entweder halt das "Schliessen"-Kreuz oder per Input.
Müsstest das ganze halt entweder A) mit mehreren Threads laufen lassen ( FastPointer Lib kann das), B) dir iwie ein eigenes Input schreiben oder C) einfach regelmäßig bei Benutzereingabe per Input eine möglichkeit zum beenden geben.

lg,
Count-Doku

KnorxThieus

BeitragSo, Aug 04, 2013 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Graphics 800, 600


Function Print(txt$)
Text 0, 0, txt$
Flip
End Function



While Not KeyHit(1)

Print "a"

Wend
End
Wink
Version: BlitzPlus / Blitz+

count-doku

BeitragSo, Aug 04, 2013 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was genau soll das bringen Knorx Question

KnorxThieus

BeitragMo, Aug 05, 2013 7:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Das er mit "Print" ins Grafikfenster schreibt und so KeyHit empfängt.

EDIT: Halt wieder zwei Parameter (0, 0) weniger... war nur als Scherz gemeint Laughing
Version: BlitzPlus / Blitz+

count-doku

BeitragMo, Aug 05, 2013 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Natürlich kann man mit Graphics ein Fenster aufmachen und dann Print und Input und Keyhit/Keydown anwenden. Aber es gibt nunmal Anwendungen für die es nicht erforderlich oder nicht möglich ist ein DX Fenster aufzumachen - schonmal an Server gedacht? Die haben unter Umständen keine Graka und machen alles mit der CPU, dann für eine einfache Ausgabe ein DX fenster? Omg

@funkmaster,
wenn ich dazu komme schreibe ich nachher ein Multithreaded Programm für Input in der Console...
 

funkmaster5000

BeitragDi, Aug 06, 2013 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht übrigens um einen Server...
Das Problem ist, dass ich ihn natürlich sauber herunterfahren will, damit er auch CloseTCPStream ordentlich ausführt. Nur steht dieser Befehl außerhalb meiner Schleife, die mit ESC beendet werden soll. Ich weiß nicht, was ein Druck auf das Kreuz für Auswirkungen hat. Ich denke, CloseTCPStream wird schon seine Daseinsberechtigung haben, deswegen würde ich es gerne ausführen lassen. Außerdem habe ich eine Art Protokoll, das den Clients dann mitteilt, dass der Server geschlossen wurde. Das wird ebenfalls erst nach der Schleife ausgeführt.

count-doku

BeitragDi, Aug 06, 2013 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
So habe jetzt ein Proggi dafür geschrieben. Ist reichlich kommentiert, sollte also eigentlich verständlich sein.
Zum auführen brauchst du die Fastpointer DLL
https://www.blitzforum.de/foru...hp?t=36160
ganz oben ist der Download, aber auch ruhig den Thread durchlesen, Pummelie erklärt da ganz gut wies
funktioniert, das ganze läuft auch mit b+.

Hier mein Code:
BlitzBasic: [AUSKLAPPEN]

; FPS Counter für den Serverthread
Global fps


; siehe FastPointer DLL -- holt den Pointer zum Serverthread in pointer1
Local pointer1 = FunctionPointer()
Goto skip1
ServerThread()
.skip1


; Hier die ganzen anderen Variablen
; und der Serverinit krams (alternativ im Thread)


;Hier wird dann der Server gestartet...
Write "Starting server..."
Local ServerThread = CreateThread(pointer1, 0)
Print "OK"


; Der Hauptthread bietet dann per Input die möglichkeit der Kontrolle
Print "Starting control panel..."
Repeat
Local cmd$=Lower(Input(">"))
Select cmd
Case "quit"
Exit
Case "fps"
Print "ServerFPS: "+fps
Default
Print "unknown cmd"
End Select
Forever

; Verbindungen etc beenden....
; Der ganze schmuu

; Thread beenden
FreeThread(ServerThread)
End


Function ServerThread(var%=0)
Local ms=MilliSecs()+1000,count

; Hier variablen oder Serverinit kram ( Alternativ zu oben)

Repeat
; Ein fps counter
count=count+1
If MilliSecs()>ms Then
fps=count
count=0
ms=MilliSecs()+1000
EndIf

; Hier dann der eigentliche Servercode


; Hier muss zumindest unter B+ und Win7 ein Delay statt nem Waittimer hin.
; Bei XP ging es noch mit Timer. Weiß nicht wies bei winserver ist....
Delay 16
Forever
End Function


Schaus dir mal an - ist sicher keine superlösung aber funktioniert.


lg,
Count-Doku

DAK

BeitragDi, Aug 06, 2013 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst auch die GetAsyncKeyState von der Winapi nehmen.

BlitzMax: [AUSKLAPPEN]
Extern
Function api_GetAsyncKeyState(vKey%) = "GetAsyncKeyState@4"
EndExtern


Die liefert dir true zurück, wenn die gewählte Taste gedrückt wurde. Musst aber aufpassen: diese Funktion ignoriert, ob dein Fenster im Vordergrund ist oder nicht, das heißt, wenn du ESC drückst, während ein anderes Fenster im Vordergrund ist, dann schließt sich dein Programm trotzdem!
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group