Probleme mit mehreren Desktops (erledigt)

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: Probleme mit mehreren Desktops

Beitrag von tft »

Hallo,

mit der Desktop Lib lässt sich kein Fenster expliziet an einen Desktop festmachen. Auch lässt sich nicht herausfinden welches Fenster sich auf welchem Desktop befindet.

Hier nochmal meinen Dank an Fabio und Ernst für die ausführliche Beschreibung der Problematik. Das werde ich mir nicht antun :-)

Zur Info an diejenigen die es Interessiert in der kurz Fassung. Seit Windows xp werden mullti Desktop Anwendungen sehr unterschiedlich vom System unterstützt. Daher ist die Desktop Lib auch so rudimentär. Fenster lassen sich beliebig verschieben und könne auch negative offsets vertragen. Die Zuordnung geschied über eine Berechnung der möglichen X Offsets je nach Auflösung der einzelnen Monitore. Bei einem 3 Fach FullHD Setup ist es einfach, X=0 ist der Center Bildschirm, X=-1980 ist der linke Bildschirm und grösser als 1980 ist der rechte. Es können aber je nach Grifikkarte und alter des System immense Probleme auftauchen. Daher wurde mir geraten die simpelste Möglichkeit zu verwenden und die Fenster mit MoveWindow_() zu verschieben und sie nicht an einen Desktop anzubinden.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Probleme mit mehreren Desktops

Beitrag von Derren »

X=0 wird durch die Reihenfolge in der Systemsteuerung festgelegt. Habe hier kein Multimonitorsetup, kann es daher nicht demonstrieren, aber in der Systemsteuerung kannst du auch solche Setups erstellen. Was du bei DesktopX(DesktopID) als ID eingeben musst korrespondiert mit der Zahl, die angezeigt wird wenn man "Desktop identifizieren" drückt in er Systemsteuerung.

Bild

W(n) soll hier DesktopWidth(#Desktop) sein und x' und y' sind halt die Fensterposition relativ zum Desktop Nullpunkt.

Keine Ahnung was du mit "an Desktop anbinden" meinst.
Kenne keinen PB-Befehl, der ein Fenster an einem Desktop festkettet oder was auch immer. Zumal der User doch bitte selber entscheiden soll, ob er deinen Player links oder rechts sehen möchte.
Signatur und so
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: Probleme mit mehreren Desktops

Beitrag von tft »

Hallo,

ja auch solche Konfigurationen sind möglich, diese werde ich fieleicht später mal berücksichtigen. Mein Grundfehler bei der Betrachtung des umgangs mit Mulltimonitoring war. Das zu WinXp Zeiten (Da habe ich das das letze mal gemacht) jeder Bildschirm einzeln gehandhabt wurde. Heute macht Win7 und höher einen gesamt Bildschirm daraus. Was die handhabung von Fenster extrem erleichtert.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Probleme mit mehreren Desktops

Beitrag von Derren »

Das halte ich auch für ein Gerücht. Hatte zwar nie mehrere Monitore an einem XP-Rechner, allerdings nen Fernseher an einer Videokarte (Composite Cinch output).
Konnte Fenster beliebig auf den Composite-Ausgang schieben, und zwar auch "halb". Also der Fernseher hat den Desktop einfach in eine Richtung erweitert. Das waren keine separaten Desktops. Ein Fenster zur Hälfte auf dem Monitor und zur anderen Hälfte auf dem Fernseher war gar kein Problem.

Mich würde ja echt mal der Code interessieren, der jetzt angeblich nich mehr läuft...
Signatur und so
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: AW: Probleme mit mehreren Desktops

Beitrag von Kurzer »

Was Derren schreibt ist richtig. Ich nutze Windows Xp mit zwei Monitoren und kann Fenster zwischen beiden nahtlos verschieben. die Einstellung ist "erweiterter Desktop".
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Probleme mit mehreren Desktops

Beitrag von ts-soft »

Crossplattform:

Code: Alles auswählen

Procedure DesktopFromPoint(x, y)
  Protected Count = ExamineDesktops()
  Protected i, dx, dy, dw, dh
  
  For i = 0 To Count - 1
    dx = DesktopX(i)
    dy = DesktopY(i)
    dw = DesktopWidth(i)
    dh = DesktopHeight(i)

    If x >= dx And x <= dx + dw And y >= dy And y <= dy + dh
      ProcedureReturn i
    EndIf 
  Next i 
 
  ProcedureReturn -1 ; point is outside of all monitors
EndProcedure

Code: Alles auswählen

EnableExplicit

Structure MaxDesktopsRes
  CountDesktops.w
  MinPos.w
  MaxPos.w
  MaxWidth.w
  MaxHight.w
EndStructure

Procedure DesktopsMaxRes(*r.MaxDesktopsRes)
  Protected Desktops.i = ExamineDesktops()
  Protected Desktop.i
  Protected X.i, Y.i, X1.i, Y1.i, X2.i, Y2.i

  For Desktop = 0 To Desktops-1
     If DesktopX(Desktop) < X
        X1 = DesktopX(Desktop)
     EndIf
     If DesktopY(Desktop) < Y
        Y1 = DesktopY(Desktop)
     EndIf
     If DesktopX(Desktop)+DesktopWidth(Desktop) > X2
        X2 = DesktopX(Desktop)+DesktopWidth(Desktop)
     EndIf
     If DesktopY(Desktop)+DesktopHeight(Desktop) > Y2
        Y2 = DesktopY(Desktop)+DesktopHeight(Desktop)
     EndIf
  Next
  
  *r\CountDesktops = Desktops
  *r\MinPos = X1
  *r\MaxPos = Y2
  *r\MaxWidth = X2-X1
  *r\MaxHight = Y2-Y1
EndProcedure

Define.MaxDesktopsRes r
DesktopsMaxRes(@r)

Debug r\CountDesktops
Debug r\MinPos
Debug r\MaxPos
; usw.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten