Seite 1 von 1

Hintergrundprogramm per Shortcut aufrufen

Verfasst: 17.08.2005 19:07
von pws32
Hallo,

ich habe da ein kleines Programm welches im Hintergrund minimiert läuft und darauf wartet das es manchmal benutzt wird, nun möcht ich gerne das Programm mit einem Shortcut CTRL-S etc. aus dem Hintergrund nach vorne holen und maximieren, einen Shortcut im Programm zu definieren bringt leider nichts weil das Programm im Hintergrund ja keinen Focus hat,
hat jemand eine Idee ?

Gruss Peter

Verfasst: 17.08.2005 19:35
von sim0n
Wieso trägst du denn dein Programm nicht einfach in die SysTray ein?
Dann kannst du wenn nötig mit nem Mausklick aufrufen

Verfasst: 17.08.2005 23:02
von bluejoke
Da fällt mir spontan GetAsyncKeyState_() ein

Verfasst: 17.08.2005 23:09
von Deeem2031
GetAsyncKeyState_() wird auch nicht helfen, da es auch den Focus auf das Fenster benötigt.
Ich würde einen KeyboardHook in Verbindung mit "GetKeyState_(#VK_...) & $F0000000" benutzen, so wie ich es auch bei EasyKill gemacht habe.

Verfasst: 17.08.2005 23:17
von MVXA
Das GetAsyncKeyState_() ein Focus auf das Fenster benötigt wäre mir
jetzt aber neu :?.

Verfasst: 17.08.2005 23:26
von Deeem2031
Jedenfalls funktionierte es, als ich es in EasyKill eingebaut hatte nur als ich das Fenster geöffnet hatte. Kann aber auch sein das es an etwas anderem lag..

In der PSDK steht jedenfalls: "Windows NT/2000/XP: The return value is zero for the following cases: The foreground thread belongs to another process and the desktop does not allow the hook or the journal record."

Verfasst: 18.08.2005 00:48
von pws32
Hi,

Problem gelöst !, habe einen Code von Sparkie im englishen Forum gefunden den man einfach auf die eigenen Bedürfnisse anpassen kann.

Gruss Peter

Code: Alles auswählen

#VK_O = $4F
#MOD_WIN = $8
; --> We use this as our HotKey ID. It must be between 0 and $BFFF
; --> I'll just add #MOD_WIN + #VK_O for thhis ID
#HOTKEY_WIN_O = #MOD_WIN + #VK_O
quit = #False

Procedure myWindowCallback(hwnd, msg, wparam, lparam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_HOTKEY
      ; --> Is this our HotKey
      If wparam = #HOTKEY_WIN_O
        beep_(100,100)
        SetForegroundWindow_(WindowID())
        MessageRequester("Info", "Hotkey pressed")
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure

If OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "HotKey test") And CreateGadgetList(WindowID())
  SetWindowCallback(@myWindowCallback())
  ; --> Hotkey is WinKey + letter "O"
  If RegisterHotKey_(WindowID(), #HOTKEY_WIN_O, #MOD_WIN, #VK_O)
    MessageRequester("Info", "HotKey is registered")
    TextGadget(0, 0, 90, 300, 20, "Press WinKey+O", #PB_Text_Center)
  Else
    MessageRequester("Error", "Unable to register HotKey")
    quit = #True
  EndIf
  Repeat
    event = WaitWindowEvent()
    Select event
      Case #PB_Event_CloseWindow
        UnregisterHotKey_(WindowID(), #HOTKEY_WIN_O)
        quit = #True
    EndSelect
  Until quit
EndIf 

Verfasst: 18.08.2005 00:55
von vonTurnundTaxis
Deeem2031 hat geschrieben:Jedenfalls funktionierte es, als ich es in EasyKill eingebaut hatte nur als ich das Fenster geöffnet hatte. Kann aber auch sein das es an etwas anderem lag..

In der PSDK steht jedenfalls: "Windows NT/2000/XP: The return value is zero for the following cases: The foreground thread belongs to another process and the desktop does not allow the hook or the journal record."
Ich habe ein Programm, das Shortcuts per GetAsyncKeystate_() verwendet, um sich in den Vordergrund zu schieben...