Programm trotz Bildschirmsperre

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Then
Beiträge: 278
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Programm trotz Bildschirmsperre

Beitrag von Then »

Hallo,

ist es möglich, auch bei einem Sperrbildschirm (Windows + L) die Tastatur abzufragen ?

In meinem Programm muss man 1 Sekunde F4 gedrückt halten, damit sich etwas bestimmtes ereignet.
Leider sperrt sich der Bildschirm nach 10 Minuten und ich muss mich dann erst einloggen, um die F4 zu drücken. Kann man das nicht auch im Sperrbildschirm abfragen ? Ich kann die Sperre nicht ändern, wurde vom Admin extra so eingerichtet. Was kann man tun, um die Tastatur dennoch abzufragen ?
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: Programm trotz Bildschirmsperre

Beitrag von Axolotl »

Hi,
Hast du schon irgend etwas ausprobiert?
Ich habe es bis jetzt nur mit einem Low Level Hook hinbekommen....

Code: Alles auswählen

Enumeration Window 1
  #WND_Main 
EndEnumeration 
Enumeration Gadget 1 
  #GDT_btnClear 
  #GDT_lstOutput 
EndEnumeration 


Structure KEYBOARDHOOKSTRUCTURE
  vkCode.l
  scanCode.l
  flags.l
  time.l
  dwExtraInfo.l
EndStructure

#WM_HOOKEDKEY        = #WM_USER + 123 

Global Hotkey_hWnd 

; --- 

Procedure Hotkey_KeyboardProc(nCode, wParam, *kb.KEYBOARDHOOKSTRUCTURE) 
  Static fMod = 0, vkCode = 0  

  If (nCode = #HC_ACTION And (wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP))
    PostMessage_(Hotkey_hWnd, #WM_HOOKEDKEY, *kb\vkCode, (wParam & 1))  ; here: send all keys to main loop 
    If *kb\vkCode = #VK_F4 
      ; move the PostMessage_() to this position to send the F4 only !!!! 
      ProcedureReturn #True  ; 
    EndIf 
  EndIf 
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam) ;:: hhk is ignored 
EndProcedure 

; --- 

Procedure SetKeyboardHook(State)  
  Static hKeyboardHook = 0 

  If State = #False  ;:: unhook 
    If hKeyboardHook 
      UnhookWindowsHookEx_(hKeyboardHook)  
      hKeyboardHook = 0 
    EndIf 
  ElseIf State = #True ;:: hook 
    If hKeyboardHook 
      UnhookWindowsHookEx_(hKeyboardHook) 
    EndIf 
    hKeyboardHook = SetWindowsHookEx_(#WH_KEYBOARD_LL, @Hotkey_KeyboardProc(), GetModuleHandle_(0), 0) 
  EndIf
EndProcedure 

; --- 

Procedure Main() 
  Protected fHook, dbg.s  

  If OpenWindow(#WND_Main, 40, 40, 600, 300, "Low Level Hook", #PB_Window_SystemMenu) 
    Hotkey_hWnd = WindowID(#WND_Main) 

    ButtonGadget(#GDT_btnClear, 8, 4, 96, 24, "Clear") 
    ListViewGadget(#GDT_lstOutput, 8, 32, 584, 260, $4000) 
    PostEvent(#PB_Event_Gadget, #WND_Main, #GDT_btnClear) 

    SetKeyboardHook(#True) 

    Repeat 
      Select WaitWindowEvent() 
        Case #WM_HOOKEDKEY 
          dbg = "Hook Key Info: " 
          If EventwParam() = #VK_F4 
            dbg + "F4 " 
          Else 
            dbg + "KEY 0x" + Hex(EventwParam()) + " ("+ Str(EventwParam()) +")  "  
          EndIf 
          If EventlParam() 
            dbg + "released"  
          Else 
            dbg + "pressed" 
          EndIf 
          AddGadgetItem(#GDT_lstOutput, -1, dbg) 
          SetGadgetState(#GDT_lstOutput, CountGadgetItems(#GDT_lstOutput) - 1)  

        Case #PB_Event_Gadget  
          Select EventGadget() 
            Case #GDT_btnClear 
              ClearGadgetItems(#GDT_lstOutput) 
              AddGadgetItem(#GDT_lstOutput, -1, "Press F4 on Lock Screen .... :) ") 

          EndSelect 

        Case #PB_Event_CloseWindow 
          Break  
      EndSelect 
    ForEver 
    SetKeyboardHook(#False)  ;:: do not forget to unhook :)  
  EndIf 
  ProcedureReturn 0 
EndProcedure 

End Main() 
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
Then
Beiträge: 278
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Programm trotz Bildschirmsperre

Beitrag von Then »

Ich danke dir !!!! :bounce:

Genau das ist es. Habe es etwas an meinen Kram angepasst, aber genau das habe ich gesucht !!!!! Vielen Dank :allright:
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Antworten