Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Envoyer un programme en arriere plan

2 réponses
Avatar
JB
Bonjour,=20
ca fait quelques temps que je cherche une solution a ce=20
probleme mais je n'en voit aucune. J'ai un programme=20
(compos=E9 de petites fenetres) et j'aimerais bien que ce=20
programme reste toujours en arrire plan (derreire tous=20
les autres programmes, meme si on lui donne le focus). En=20
avant plan c facile, c pr=E9vu par C# mais pour qu'il soit=20
en arriere plan je ne trouve pas.
Une solution possible serait de rappeller tous les autres=20
programmes ouverts et de leur donner le focus pour qu'ils=20
se placent devant le mien mais a mon avis ca va etre=20
assez lent.
Est-ce que C# pr=E9voit de jouer avec un z-index (comme en=20
HTML) ?
A la limite j'aimerais que ce programme soit directement=20
incrust=E9 dans le fond d'ecran :) mais bon fo pas rever...
Merci d'avance !

2 réponses

Avatar
Fabrice MALAINGRE
Bonsoir JB,

La solution à votre problème réside dans la surcharge de la méthode
"WndProc" !

En effet, lorsqu'il est nécessaire de prévenir/modifier le comportement
natif d'une fenêtre, il n'existe rien de mieux que d'intercepter le message
correspondant à ce comportement.

Dans le cas qui nous occupe, il s'agit du message "WM_WINDOWPOSCHANGING".

La marche à suivre est donc la suivante :

1. Ajouter un using des "System.Runtime.InteropServices".

2. Déclarer deux constantes :
private const UInt32 WM_WINDOWPOSCHANGING = 0x46;
private const UInt32 HWND_BOTTOM = 0x01;

3. Déclarer la structure associée au message WINDOWPOSCHANGING :
[StructLayout(LayoutKind.Sequential)]
private struct WINDOWPOS
{
public UInt32 hwnd;
public UInt32 hwndInsertAfter;
public Int32 x;
public Int32 y;
public Int32 cx;
public Int32 cy;
public UInt32 flags;
}

4. Et enfin surcharger la méthode WndProc de votre formulaire :
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_WINDOWPOSCHANGING)
{
unsafe
{
WINDOWPOS* positionInfoPtr = (WINDOWPOS*) m.LParam;
// Always be at the bottom of the Z-Order
positionInfoPtr->hwndInsertAfter = HWND_BOTTOM;
}
}
else
{
base.WndProc(ref m);
}
}


Et voilà ! Le tour est joué.

Ah ! Ne pas oublier d'autoriser le code unsafe dans votre projet (Propriétés
du projet => Propriétés de configuration => Générer)

Cordialement

____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr
Avatar
Salut !
C'est impeccable ! je ne pense pas assez souvent à
utiliser les fonctionnalités de bases.. et c'est bien
dommage ! Ton code marche à merveille et il est d'une
simplicité déconcertante.
Merci beaucoup
JB.


-----Message d'origine-----
Bonsoir JB,

La solution à votre problème réside dans la surcharge de


la méthode
"WndProc" !

En effet, lorsqu'il est nécessaire de prévenir/modifier


le comportement
natif d'une fenêtre, il n'existe rien de mieux que


d'intercepter le message
correspondant à ce comportement.

Dans le cas qui nous occupe, il s'agit du


message "WM_WINDOWPOSCHANGING".

La marche à suivre est donc la suivante :

1. Ajouter un using des "System.Runtime.InteropServices".

2. Déclarer deux constantes :
private const UInt32 WM_WINDOWPOSCHANGING = 0x46;
private const UInt32 HWND_BOTTOM = 0x01;

3. Déclarer la structure associée au message


WINDOWPOSCHANGING :
[StructLayout(LayoutKind.Sequential)]
private struct WINDOWPOS
{
public UInt32 hwnd;
public UInt32 hwndInsertAfter;
public Int32 x;
public Int32 y;
public Int32 cx;
public Int32 cy;
public UInt32 flags;
}

4. Et enfin surcharger la méthode WndProc de votre


formulaire :
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_WINDOWPOSCHANGING)
{
unsafe
{
WINDOWPOS* positionInfoPtr = (WINDOWPOS*)


m.LParam;
// Always be at the bottom of the Z-Order
positionInfoPtr->hwndInsertAfter = HWND_BOTTOM;
}
}
else
{
base.WndProc(ref m);
}
}


Et voilà ! Le tour est joué.

Ah ! Ne pas oublier d'autoriser le code unsafe dans


votre projet (Propriétés
du projet => Propriétés de configuration => Générer)

Cordialement

____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr



.