Pour obtenir la zone de travail de l'écran non obscurci par la barre des tâches du système ou par des barres d'outils de bureau d'application, vous pouvez utiliser SystemParametersInfo() avec SPI_GETWORKAREA
comme paramètre uiAction. Le paramètre pvParam doit pointer vers une structure RECT
qui reçoit les coordonnées de la zone de travail, exprimées en coordonnées d'écran virtuelles. Par exemple:
RECT rectWorkArea;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rectWorkArea, 0);
Comme vous l'avez dit dans le commentaire, pour obtenir le rectangle de délimitation de la barre des tâches, nous pouvons appeler SHAppBarMessage(ABM_GETTASKBARPOS, ...)
Pour déterminer la position de la barre des tâches (si elle est actuellement en bas, en haut, à gauche ou à droite de l'écran), vous pouvez utiliser le calcul suivant:
type
TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT);
var
iScrW, iScrH: Longint;
iScrW := GetSystemMetrics(SM_CXSCREEN);
iScrH := GetSystemMetrics(SM_CXSCREEN);
if (rectTaskbar.Top > iScrH div 2) and (rectTaskbar.Right >= iScrW) then
Result := _BOTTOM
else if (rectTaskbar.Top < iScrH div 2) and (rectTaskbar.Bottom <= iScrW div 2) then
Result := _TOP
else if (rectTaskbar.Left < iScrW div 2) and (rectTaskbar.Top <= 0) then
Result := _LEFT
else
Result := _RIGHT;
Ils devraient être assez pour résoudre votre problème actuel. Toutefois, si vous avez besoin de connaître (pour une autre raison) les paramètres actuels de la barre des tâches des états autohide et always-on-top, vous pouvez utiliser SHAppBarMessage(ABM_GETSTATE, ...)
.
Si vous avez besoin d'être averti que l'état de masquage automatique de la barre des tâches ou de l'état toujours actif a changé, vous devez intercepter le message ABN_STATECHANGE.
hmm Je n'ai pas de .NET, mais je pourrais être en mesure d'obtenir cette information avec des appels api win32 old-school .. – Claudiu
Je pense que la barre des tâches prend quelques pixels même lorsqu'elle est cachée. Et quand la barre des tâches n'est pas présente, comment obtenez-vous sa hauteur afin que vous puissiez le soustraire? –
bon point .. j'allais juste supposer la barre des tâches standard de win98 un-unité-élevée – Claudiu