Fokus auf eigenes Fenster verhindern

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fokus auf eigenes Fenster verhindern

Beitrag 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.?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Fokus auf eigenes Fenster verhindern

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Fokus auf eigenes Fenster verhindern

Beitrag 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
(\/) (°,,,°) (\/)
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Fokus auf eigenes Fenster verhindern

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten