OVH Cloud OVH Cloud

Lancer un processus en redimensionnant sa fenêtre

2 réponses
Avatar
ThierryP
Environnement : VS2003/framework.net 1.1/C#/winForm

Comment lancer une appli en précisant la taille et la position précise de la
fenêtre ainsi ouverte ?
Par exemple :
Process.Start("iexplore");


--
Thierry PAUL

2 réponses

Avatar
Zoury
Salut Thierry!

Comment lancer une appli en précisant la taille et la position précise de


la
fenêtre ainsi ouverte ?



Je ne sais pas s'il existe une méthode entièrement .NET, mais tu peux
employer l'API SetWindowPos() pour parvenir à cette fin.

L'exemple suivant démarre IE, le positionne et le redimensionne :
'***
Option Explicit On

Imports System.Runtime.InteropServices
Imports System.ComponentModel

Module MainModule

Private Const HWND_TOP As Int32 = 0
Private Const SWP_SHOWWINDOW As Int32 = &H40

<DllImport("user32.dll", SetLastError:=True)> _
Private Function SetWindowPos(ByVal hwnd As IntPtr, _
ByVal hWndInsertAfter As Int32, _
ByVal x As Int32, _
ByVal y As Int32, _
ByVal cx As Int32, _
ByVal cy As Int32, _
ByVal wFlags As Int32) As Int32
'
End Function

Public Sub Main()

Dim p As Process = Process.Start("iexplore")

' Ici on positionne la fenêtre au point (100, 100) avec une taille
de (100, 100)
' La fonction renvoit 0 si elle plante,
' on renvoit donc une Win32Exception afin de récupérer l'erreur
survenue
' Le paramètre SetLastError de l'attribute DLLImport, doit être
initialiser à True si on veut que Marshal.GetLastWin32Error()
' nous renvoit le numéro de l'erreur Win32.
If (SetWindowPos(p.MainWindowHandle, HWND_TOP, 100, 100, 100, 100,
SWP_SHOWWINDOW) = 0) Then
Throw New Win32Exception(Marshal.GetLastWin32Error())
End If

End Sub

End Module
'***


--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Zoury
naa! mauvais groupe.

voici le même exemple en C# pour les non-initiés à VB.NET
//***
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace SetWindowPosProject
{
public class MyApp
{

private const Int32 HWND_TOP = 0;
private const Int32 SWP_SHOWWINDOW = 0x40;
[DllImport("user32.dll", SetLastError=true)]
private static extern Int32 SetWindowPos(IntPtr hwnd,
Int32 hWndInsertAfter,
Int32 x,
Int32 y,
Int32 cx,
Int32 cy,
Int32 wFlags);

[STAThread]
static void Main()
{
Process p = Process.Start("iexplore");
// ici on positionne la fenêtre au point (100, 100)
// avec une taille de (100, 100)
// la fonction renvoit 0 si elle plante, on renvoit
// donc une Win32Exception afin de récupérer l'erreur survenue
// le paramètre SetLastError de l'attribute DLLImport, doit être
// initialiser à True si on veut que Marshal.GetLastWin32Error()
// nous renvoit le numéro de l'erreur Win32.
if (SetWindowPos(p.MainWindowHandle, HWND_TOP, 100, 100, 100, 100,
SWP_SHOWWINDOW) == 0)
throw new Win32Exception(Marshal.GetLastWin32Error());
}
}
}
//***

--
Cordialement
Yanick
MVP pour Visual Basic
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%23k4P$8$
Salut Thierry!

> Comment lancer une appli en précisant la taille et la position précise


de
la
> fenêtre ainsi ouverte ?

Je ne sais pas s'il existe une méthode entièrement .NET, mais tu peux
employer l'API SetWindowPos() pour parvenir à cette fin.

L'exemple suivant démarre IE, le positionne et le redimensionne :
'***
Option Explicit On

Imports System.Runtime.InteropServices
Imports System.ComponentModel

Module MainModule

Private Const HWND_TOP As Int32 = 0
Private Const SWP_SHOWWINDOW As Int32 = &H40

<DllImport("user32.dll", SetLastError:=True)> _
Private Function SetWindowPos(ByVal hwnd As IntPtr, _
ByVal hWndInsertAfter As Int32, _
ByVal x As Int32, _
ByVal y As Int32, _
ByVal cx As Int32, _
ByVal cy As Int32, _
ByVal wFlags As Int32) As Int32
'
End Function

Public Sub Main()

Dim p As Process = Process.Start("iexplore")

' Ici on positionne la fenêtre au point (100, 100) avec une taille
de (100, 100)
' La fonction renvoit 0 si elle plante,
' on renvoit donc une Win32Exception afin de récupérer l'erreur
survenue
' Le paramètre SetLastError de l'attribute DLLImport, doit être
initialiser à True si on veut que Marshal.GetLastWin32Error()
' nous renvoit le numéro de l'erreur Win32.
If (SetWindowPos(p.MainWindowHandle, HWND_TOP, 100, 100, 100, 100,
SWP_SHOWWINDOW) = 0) Then
Throw New Win32Exception(Marshal.GetLastWin32Error())
End If

End Sub

End Module
'***


--
Cordialement
Yanick
MVP pour Visual Basic