Domanda

È possibile prenotare un'area dello schermo vicino a un bordo dello schermo per l'app in Windows 7? Si comporterebbe in modo simile alla barra delle applicazioni di Windows (vale a dire che le finestre ingrandite non si sovrappongono con essa).

Sto scrivendo un'app sulla barra delle applicazioni con il supporto adeguato per più monitor. Lo scopo principale è mostrare una barra delle applicazioni su ogni schermata contenente solo le app su quella schermata. Nessuna delle soluzioni esistenti ( Ulltramon , DisplayFusion ) Conosco il lavoro per Win 7 e nessuno è open source.

Il codice C # sarebbe carino, ma anche i suggerimenti sono apprezzati.

È stato utile?

Soluzione

Non sono sicuro di come farlo direttamente in C #, ma nel codice nativo puoi chiamare SystemParametersInfo con SPI_SETWORKAREA. Questo è il modo in cui app come la barra delle applicazioni, la barra laterale e così via possono impedire la sovrapposizione di finestre ingrandite.

http://msdn.microsoft.com/en-us/library /ms724947.aspx è la documentazione per SystemParametersInfo.

http: //social.msdn.microsoft.com/forums/en-US/winforms/thread/9fe831e5-ccfb-4e8d-a129-68c301c83acb / mostra le firme P / Invoke per questo metodo.

Altri suggerimenti

Mi sento sciocco a rispondere alla mia domanda, ma grazie al suggerimento di Michael, ho trovato un Esempio di codice C # .

using System;
using System.Runtime.InteropServices;

public class WorkArea
{
  [System.Runtime.InteropServices.DllImport("user32.dll",  EntryPoint="SystemParametersInfoA")]
  private static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, IntPtr lpvParam, Int32 fuWinIni);

  private const Int32 SPI_SETWORKAREA = 47;
  public WorkArea(Int32 Left,Int32 Right,Int32 Top,Int32 Bottom)
  {
    _WorkArea.Left = Left;
    _WorkArea.Top = Top;
    _WorkArea.Bottom = Bottom;
    _WorkArea.Right = Right;
  }

  public struct RECT
  {
    public Int32 Left;
    public Int32 Right;
    public Int32 Top;
    public Int32 Bottom;
  }

  private RECT _WorkArea;
  public void SetWorkingArea()
  {
    IntPtr ptr = IntPtr.Zero;
    ptr = Marshal.AllocHGlobal(Marshal.SizeOf(_WorkArea));
    Marshal.StructureToPtr(_WorkArea,ptr,false);
    int i = SystemParametersInfo(SPI_SETWORKAREA,0,ptr,0);
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top