Aktuelle Zeit: 16.01.2019 13:44

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 06.01.2019 18:05 
Offline

Registriert: 08.09.2004 20:18
Wohnort: Zürich
Hallo,

wie die Beschreibung oben schon erahnen lässt. Möchte ich die KeyRepeat Funktion bei Tastatureingaben für mein Fenster abstellen.
Jemand eine Idee wie das zu machen ist?


Gruss TFT

_________________
TFT

Code faster than fast.
W10 ,i5 4*3.4 MHz,16 GB Ram,GTX Titan, 3 Monitore UHD
ARDUINO Freak :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 06.01.2019 21:57 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo tft,

ich bin mir auch noch nicht ganz sicher, aber es müsste evtl. über die Registry (HKEY_CURRENT_USER\Control Panel\Accessibility\...) gehen.

Du meinst doch garantiert die Windows-Anschlagverzögerung, oder ?

Ok!

Es sollte über diese API gehen:
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-systemparametersinfow

und mit dieser Structure:

https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagfilterkeys

über Set_FilterKeys

Hier eine mögliche Lösung: (geht bei mir)

Code:
Structure tagFILTERKEYS
  cbSize.l
  dwFlags.l
  iWaitMSec.l
  iDelayMSec.l
  iRepeatMSec.l
  iBounceMSec.l
EndStructure

Global FILTERKEYS.tagFILTERKEYS

FILTERKEYS\cbSize = SizeOf(tagFILTERKEYS)
FILTERKEYS\dwFlags = 127 ;= On / 126 = Off (Windows 10)
FILTERKEYS\iWaitMSec = 0
FILTERKEYS\iDelayMSec = 0
FILTERKEYS\iRepeatMSec = 0

SystemParametersInfo_(#SPI_SETFILTERKEYS, SizeOf(tagFILTERKEYS), @FILTERKEYS, #SPIF_UPDATEINIFILE)


Für Unwissende:

Damit wird beim gedrückten Halten einer Taste diese nicht mehr wiederholt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 07.01.2019 20:42 
Offline

Registriert: 08.09.2004 20:18
Wohnort: Zürich
Hallo,

ich werde das mal ausprobieren, ich habe mir .. weil ich gerade im Flow bin mit diesen Zeilen geholfen.
Code:

#NoKeyRepeat = 1075838977

If EventWindow() = #MainWindow
        Select Event
           Case #WM_KEYDOWN ; Taste wurde gedrückt
              ;Repeat unterdrückung
              If EventlParam()<>#NoKeyRepeat


_________________
TFT

Code faster than fast.
W10 ,i5 4*3.4 MHz,16 GB Ram,GTX Titan, 3 Monitore UHD
ARDUINO Freak :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 07.01.2019 21:28 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Schön,Schön, viele Wege führen zum Ziel, wenn man es dann doch genauer kennt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 08.01.2019 00:24 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
ich weiß zwar nicht wozu man es braucht

aber gut zu wissen, eines Tages vielleicht doch

vielen Dank für die Info :allright:

_________________
Purebasic 5.60 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 12.01.2019 16:29 
Offline

Registriert: 08.09.2004 20:18
Wohnort: Zürich
Hallo

@ ccode_new : Da meine Lösung eher unzuverlässig funktioniert. Habe ich diese eingebaut. Läuft tip top.
jetzt muss ich nur noch den Wert vorher Speichern, damit ich beim verlassen des Programms den Orginal
Zustand wider herstelle.

Gibt es nicht die Möglichkeit das auf ein Bestimmtes Fenster zu begrenzen.?

Gruss TFT

_________________
TFT

Code faster than fast.
W10 ,i5 4*3.4 MHz,16 GB Ram,GTX Titan, 3 Monitore UHD
ARDUINO Freak :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: KeyRepeat Funktion für ein Fenster abstellen
BeitragVerfasst: 12.01.2019 16:39 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
tft hat geschrieben:
Gibt es nicht die Möglichkeit das auf ein Bestimmtes Fenster zu begrenzen.?


Das ganze gehört zu den Windows Bedienungshilfe - Einstellungen.

Ich hätte hier einen kleinen Trick:

Code:
Structure tagFILTERKEYS
  cbSize.l
  dwFlags.l
  iWaitMSec.l
  iDelayMSec.l
  iRepeatMSec.l
  iBounceMSec.l
EndStructure

Global DefaultValues.tagFILTERKEYS

Procedure GetKeyRepeatState(*Filter.tagFILTERKEYS)
  *Filter\cbSize = SizeOf(tagFILTERKEYS)
  If *Filter <> 0
    SystemParametersInfo_(#SPI_GETFILTERKEYS, *Filter\cbSize, *Filter, #SPIF_UPDATEINIFILE)
  EndIf
EndProcedure

Procedure SetKeyRepeatState(*Filter.tagFILTERKEYS, state.b)
  Protected FILTERKEYS.tagFILTERKEYS
  If *Filter <> 0
    If state = 1
      GetKeyRepeatState(*Filter)
      FILTERKEYS\cbSize = SizeOf(tagFILTERKEYS)
      FILTERKEYS\dwFlags = 126
      FILTERKEYS\iWaitMSec = *Filter\iWaitMSec
      FILTERKEYS\iDelayMSec = *Filter\iDelayMSec
      FILTERKEYS\iRepeatMSec = *Filter\iRepeatMSec
      FILTERKEYS\iBounceMSec = *Filter\iBounceMSec
      SystemParametersInfo_(#SPI_SETFILTERKEYS, FILTERKEYS\cbSize, @FILTERKEYS, #SPIF_UPDATEINIFILE)
    Else
      FILTERKEYS\cbSize = SizeOf(tagFILTERKEYS)
      FILTERKEYS\dwFlags = 127
      FILTERKEYS\iWaitMSec = 0
      FILTERKEYS\iDelayMSec = 0
      FILTERKEYS\iRepeatMSec = 0
;       FILTERKEYS\iBounceMSec = 0
      SystemParametersInfo_(#SPI_SETFILTERKEYS, FILTERKEYS\cbSize, @FILTERKEYS, #SPIF_UPDATEINIFILE)
    EndIf
  EndIf
EndProcedure

Procedure IsActive(win_id)
  Protected hWnd
  hWnd = GetForegroundWindow_()
  If hWnd = win_id
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Global mywin.i, set_flag = #False

mywin = OpenWindow(#PB_Any, 0, 0, 600, 400, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

If mywin
  EditorGadget(0, 10, 10, 580, 380)
 
  Repeat
    If IsActive(WindowID(mywin)) = #True And GetActiveGadget() = 0 And set_flag = #False
      Debug "Aktiv"
      GetKeyRepeatState(@DefaultValues)
      ;Debug DefaultValues\dwFlags
      SetKeyRepeatState(@DefaultValues, 0)
      set_flag = #True
    ElseIf IsActive(WindowID(mywin)) = #False And set_flag = #True
      Debug "Inaktiv"
      SetKeyRepeatState(@DefaultValues, 1)
      ;Debug DefaultValues\dwFlags
      set_flag = #False
    EndIf
   
    Delay(20)
  Until WindowEvent() = #PB_Event_CloseWindow
  SetKeyRepeatState(@DefaultValues, 1)
  End
EndIf


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye