Hintergrundprogramm per Shortcut aufrufen

Anfängerfragen zum Programmieren mit PureBasic.
pws32
Beiträge: 52
Registriert: 27.09.2004 12:33

Hintergrundprogramm per Shortcut aufrufen

Beitrag 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
ich weis das ich nix weis
sim0n
Beiträge: 131
Registriert: 12.09.2004 13:18
Kontaktdaten:

Beitrag 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
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Da fällt mir spontan GetAsyncKeyState_() ein
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Das GetAsyncKeyState_() ein Focus auf das Fenster benötigt wäre mir
jetzt aber neu :?.
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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."
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
pws32
Beiträge: 52
Registriert: 27.09.2004 12:33

Beitrag 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 
ich weis das ich nix weis
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag 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...
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Antworten