Fråga: Hur kan jag få mina fönster att alltid ta en bestämd yta av skärmen utan "intrång" av andra fönster?


Jag fick frågan under Microsoft Live i Göteborg och satt och sökte runt lite på nätet, lyckades till slut knåpa ihop lite kod som gör det som efterfrågades. Hemligheten var att anropa en icke hanterad metode som heter SystemParametersInfo som har möjlighet att specificera hur stor del av skärmen som alla applikationer kan betrakta som arbetsyta.


Koden bifogas men observera att en applikation som använder det här sättet på att begränsa ytan av skärmen inte uppträder på ett korrekt “cooperative” uppträdande vilket gör att om två likadana applikationer startas så kan det uppstå oväntade resultat.


Hittade också en artikel som beskriver hur detta ska göras “på riktigt”, inte med C#, men ändå värt läsningen och titta då speciellt på “deskband”.

Form1.cs

Comments (2)

  1. Tobias says:

    Jag fick en lustig effekt och störande efter jag testat koden.

    Allt verkade funka bra, tills jag kommenterade bort //GetWorkspace(ref oldRect); och testade köra.

    Då fick alla mina fönster spel, när jag startade applikationer så blev dom otroligt smala och gick inte att få upp i stort fönster igen…för att få "resettat" allt fick jag logga ut och in igen…

    Orkade inte grotta ner mig mer i detta, men jag antar den sätter ett helt nytt workspace och detta slår helt enkelt överallt..t om på fönster utanför applikationen.

    Eller?

  2. JohanLindfors says:

    Du måste spara undan "den gamla ytan" som applikationer får använda sig av, annars kan du aldrig få tillbaka den.

    Observera igen att detta är lite av en nödlösning.