Seite 1 von 1

[Gelöst] StickyWindow auf Win10 erscheint nicht auf Desktop

Verfasst: 06.10.2017 14:03
von TheCube
Hallo zusammen,
ich habe mir eine (immer auf dem Desktop sichtbare) Balkenanzeige gebastelt. (x86 compiliert)
Was unter Win7 (x86 & x64) wie erwartet funktioniert, erscheint unter Win10 (x64) nur als
Programmicon in der Taskleite. Hält man mit der Maus länger darauf, erscheint das Minifenster
immerhin/nur in der korrekt laufenden Voransicht.
Es gibt hier einen Thread mit einem Stickwindow/Toolbar Problem, der half mir aber nicht.

Hat jemand einen Zaubertrick mein Stickywindow nach Programmstart auch unter Win10
direkt auf dem Desktop erscheinen zu lassen ?

Beispielprogramm:

Code: Alles auswählen

Enumeration
   #Window
   #ImageGadget
   #Image
   #Font
EndEnumeration

#DarkGreen  = $004400
#DarkYellow = $004040
#DarkRed    = $000044
#HiGreen    = #Green
#HiYellow   = $00dddd   ; Weil #Yellow zu grell ist
#HiRed      = #Red

; =========================================== MAIN ====================================================

Value=68

ExamineDesktops()
OpenWindow(#Window, DesktopWidth(0)-330, 2, 126, 14, "Fenster", #PB_Window_BorderLess) : StickyWindow(#Window, #True) 

If LoadFont(#Font, "Arial", 8)  : Else : End: EndIf
If CreateImage(#Image, 126, 14) : ImageGadget(#ImageGadget, 0, 0, 126, 14, ImageID(#Image)) : Else : End: EndIf

If StartDrawing(ImageOutput(#Image))
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(#Font))
  Box(0,0,126,14,$000000)
  Box( 2,2,50,10,#HiGreen)
  Box(52,2,30,10,#DarkYellow)
  Box(82,2,19,10,#DarkRed)
  Box(52,2,Value-50,10,#HiYellow)
  DrawText(104,0,Str(Value),$CCCCCC)
  StopDrawing()
EndIf

SetGadgetState(#ImageGadget, ImageID(#Image))

Repeat
  
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_CloseWindow
      
      End
      
    Case #PB_Event_LeftDoubleClick  ; Ins Fenster (ohne Gadget) doppelklicken (Aktuell unmöglich da Fenster auf imagegadget-Größe.)
      End
         
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #ImageGadget 
          Select EventType()
            Case #PB_EventType_LeftClick        : Debug "Klick mit der linken Maustaste"
            Case #PB_EventType_RightClick       : Debug "Klick mit der rechten Maustaste"
            Case #PB_EventType_LeftDoubleClick  : Debug "Doppelklick mit der linken Maustaste" : End
            Case #PB_EventType_RightDoubleClick : Debug "Doppelklick mit der rechten Maustaste"
          EndSelect
      EndSelect
      
  EndSelect
  
ForEver

Re: StickyWindow auf Windows10 erscheint nicht auf Desktop

Verfasst: 06.10.2017 14:17
von RSBasic
Bei mir funktioniert es unter Windows 10.
Bei dir ist die Balkenanzeige nicht sichtbar? Wenn du auf den Taskleisteneintrag klickst, erscheint das kleine Fenster oben danach oder nie?
Verwendest du bei deinem Windows 10 spezielle Programme, die die Titelleiste der Fenster modifiziert wie z.B. Ultramon o.ä.?

Re: StickyWindow auf Windows10 erscheint nicht auf Desktop

Verfasst: 06.10.2017 18:27
von tft
Hallo,
kann es sein das du mehr Monitore als einen hast. Bei multi Monitoring funktioniert einiges nicht ganz so wie man denkt.
Bei mir erscheint der Balken im Desktop 2. Dieser ist der in der Mitte. Bei Negativem offset funktioniert es nicht.

Gruss TFT

Re: StickyWindow auf Windows10 erscheint nicht auf Desktop

Verfasst: 06.10.2017 18:49
von TheCube
Danke für eure Antworten ... hat mir insofern geholfen das es eben funktionieren müsste.

Es handelt sich nur um einen Monitor, nämlich das Laptop-TFT selbst.
Stimmt, mehrere Monitore müsste ich später auch handlen.

>>Bei dir ist die Balkenanzeige nicht sichtbar? Nein.
>>Wenn du auf den Taskleisteneintrag klickst, erscheint das kleine Fenster oben danach oder nie? Nie.
>>Verwendest du bei deinem Windows 10 spezielle Programme, die die Titelleiste der Fenster modifiziert? Nein.

Die Lösung des unsichtbaren Balkens ist jedoch peinlich einfach (gerade gefunden):
DesktopWidth(0) gibt bei mir korrekte 1920 zurück.
Abzüglich der 330 sollte Openwindow also ziemlich rechts fast ganz oben das Fenster zeigen.
Leider war der Darstellungsgrössenregler in den Windowseinstellungen auf 125% eingestellt, das Stickywindow
wurde deshalb ausserhalb des sichtbaren Bereiches geöffnet.
:coderselixir:

Wenn jemand ein Codeschnipsel für das Auslesen des Darstellungsgrössenregler hätte,
würde es meinem Post immerhin einen schönen Abschluß geben :wink:

Re: [Gelöst] StickyWindow auf Win10 erscheint nicht auf Desk

Verfasst: 06.10.2017 19:00
von RSBasic
TheCube hat geschrieben:Wenn jemand ein Codeschnipsel für das Auslesen des Darstellungsgrössenregler hätte
http://www.rsbasic.de/winapi-library/ Bild http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb

Re: [Gelöst] StickyWindow auf Win10 erscheint nicht auf Desk

Verfasst: 06.10.2017 19:18
von TheCube
:allright: Danke.
Ach, in Winapi/Desktop/DPI ermitteln ist es gelistet ... hatte ich zu schludrig gesucht und übersehen.

Re: [Gelöst] StickyWindow auf Win10 erscheint nicht auf Desk

Verfasst: 07.10.2017 03:23
von TheCube
Hmm, zu früh gefreut. :(
Egal ob Win10 auf 100% oder 125% Darstellung eingestellt, es wird bei mir immer 96 DPI zurückgegeben.
Ist das WinAPI-Codeschnipsel "DPI ermitteln.pb" nicht immer (oder nicht mehr) verlässlich ?
Btw., welcher Indexparameter ist 88 eigentlich ?

Code: Alles auswählen

; GetDeviceCaps:  https://msdn.microsoft.com/en-us/library/windows/desktop/dd144877(v=vs.85).aspx

MessageRequester("","DPI: "+Str(GetDeviceCaps_(GetDC_(GetDesktopWindow_()),88)),0)  ; WinAPI-Library
MessageRequester("","DPI: "+Str(GetDeviceCaps_(GetDC_(#Null),88)),0)                ; Nach MSDN genauso ok ?

; DPI   Setting
; 96 =  100%       Umrechnung DPI->Setting : Faktor ca. 1,043
; 120 = 125%
; 144 = 150%
; 192 = 200%
; 240 = 250%
; 288 = 300%

Re: [Gelöst] StickyWindow auf Win10 erscheint nicht auf Desk

Verfasst: 07.10.2017 14:50
von ccode_new
Hallo TheCube,

Das beschriebene Verhalten ist normal.
Die API-Funktion gibt normal immer 96 DPI zurück.

Siehe hier: https://msdn.microsoft.com/de-de/library/dn528846.aspx
Diese API gibt immer 96 zurück, außer das Tool, mit dem sie aufgerufen wird, ist als nicht mit DPI-Werten kompatibel registriert. Dies erfordert das Hinzufügen der folgenden XML-Datei zum Manifest für das Hilfsprogramm.

<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>Per monitor</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
> Der Wert "88" entspricht übrigens der Konstante: #LOGPIXELSX

Re: [Gelöst] StickyWindow auf Win10 erscheint nicht auf Desk

Verfasst: 07.10.2017 20:45
von TheCube
Danke ccode_new, deine Infos waren sehr erhellend ...
die Manifest-Sache probiere ich mal aus, ist ja nochmal eine ganz eigene Baustelle.

Aber ich glaube immernoch das das Auslesen des %-Reglers (bzw. der Wert in der Registry)
eine direktere Alternative wäre ....