Seite 2 von 2

Re: Fokus auf eigenes Fenster verhindern

Verfasst: 30.05.2014 10:52
von RSBasic
@KeyKon
Meinst du so?

Code: Alles auswählen

ParantWindow = FindWindow_("notepad", #Null);Dein Zielfenster auswählen

OpenWindow(0,0,0,200,200,"Help",#PB_Window_WindowCentered|#PB_Window_BorderLess, ParantWindow)

CreateImage(0,200,200,24,#Red)

ImageGadget(0,0,0,200,200,ImageID(0))

oldStyle=GetWindowLongPtr_(WindowID(0),#GWL_STYLE)
SetWindowLongPtr_(WindowID(0),#GWL_STYLE,oldStyle|#WS_CHILD &(~#WS_POPUP))
SetWindowPos_(WindowID(0), 0,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOZORDER|#SWP_FRAMECHANGED)

Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      If EventGadget() = 0 And EventType() = #PB_EventType_LeftClick
        Debug "Klick"
      EndIf
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
PS: Funktioniert nur, wenn dein Hilfsfenster keine Titelleiste hat. Ist es trotzdem i.O.?

Re: Fokus auf eigenes Fenster verhindern

Verfasst: 26.02.2015 10:04
von Thorium
Man könnte das mit nem Window Hook lösen.
Dort kannst du die Message fürs Fokus setzen abfangen und den Fokus wieder auf die andere Anwendung setzen. Dadurch hat die andere Anwendung wieder den Fokus bevor dein Fenster überhaupt merkt das es den Fokus bekommen hatte.

Re: Fokus auf eigenes Fenster verhindern

Verfasst: 26.02.2015 18:25
von KeyKon
Ja sowas hatte ich versucht, aber es ging nicht.
Mir ging es ja darum dass das andere Fenster nicht merkt dass es den Fokus verliert, da es sonst die Ansicht ändert. Aber das war so scheinbar nicht Möglich da sich die Events beim anderen Programm ja aufstauen, egal ob sie wieder "rückgängig" gemacht werden.

Ich habe das Problem inzwischen etwas unschön mit globalen Hotkeys gelöst. Mein Fenster ist jetzt nur noch zum anguggen da, mit ein bisschen Eingewöhnung erfüllt das jetzt den Zweck den ich verfolgt habe. Ist vermutlich sogar schneller zu bedienen als mit den Schaltflächen die ich ursprünglich geplant hatte.

LG KeyKon

Re: Fokus auf eigenes Fenster verhindern

Verfasst: 27.02.2015 14:41
von Thorium
KeyKon hat geschrieben:Ja sowas hatte ich versucht, aber es ging nicht.
Mir ging es ja darum dass das andere Fenster nicht merkt dass es den Fokus verliert, da es sonst die Ansicht ändert. Aber das war so scheinbar nicht Möglich da sich die Events beim anderen Programm ja aufstauen, egal ob sie wieder "rückgängig" gemacht werden.
Achso, da hab ich nicht richtig gelesen.
Das könnte man mit einem Window Hook auf die andere Anwendung lösen. Dafür müsstest du allerdings eine DLL injizieren, was nicht jede Anwendung mag.

Also DLL mit deiner Window Procedure in den Prozess der fremden Anwendung injizieren.
Die Attach Prozedur der DLL installiert dann den Window Hook mittels SetWindowLongPtr.
Nun kannst du in deiner injizierten Window Procedure auf WM_KILLFOCUS prüfen. Wenn dieses Event auftaucht, verschluckst du es einfach. Alle anderen Events leitest du normal weiter.
Die Anwendung sollte dann nicht mehr mitbekommen, dass sie den Fokus verloren hat. Esseiden sie prüft nochmal extra darauf.