MoveWindow probleme

Résolu
bimbo777 Messages postés 63 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 17 janvier 2007 - 8 janv. 2007 à 17:53
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 9 janv. 2007 à 10:15
Bonsoir à tous,

J'essaye d'ouvrir un dossier présent à la racine de mon C:\ et de redimenssioner cette fenêtre.
J'arrive bien à appeler le dossier mais le resize ne s'effectue pas.
Avez-vous une idée?
(je suis tjs débutant et je suis sous VS2005) Merci d'avance.

Module Module1

    Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nwidth As Integer, ByVal nHeight As Integer, ByVal brepaint As Boolean) As Boolean

    Public Declare Function FindWindow Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32

    Private Structure RECT
        Dim Left As Long
        Dim Top As Long
        Dim Right As Long
        Dim Bottom As Long
    End Structure

    Dim h As Int32

    Sub main()

        Process.Start("C:\test")
        System.Threading.Thread.Sleep(500)

        MoveWindow(h, 0, 50, 10, 90, False)
        System.Threading.Thread.Sleep(500)

    End Sub

End Module

7 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
9 janv. 2007 à 10:13
Voilà, ça marche mieux avec ce que propose BruNews :

  Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nwidth As Integer, ByVal nHeight As Integer, ByVal brepaint As Boolean) As Boolean
  Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim h As IntPtr
    System.Threading.Thread.Sleep(500)
    h = FindWindow(Nothing, "test")
    h = h.ToInt64 Or FindWindow(Nothing, "C:\test")
    MoveWindow(h, 0, 0, 100, 100, True)
    System.Threading.Thread.Sleep(500)
  End Sub, ----
(Coloration syntaxique automatique par Kenji)

Tu remarqueras qu'il fait 2 FindWindows, une fois avec le chemin complet, une fois sans, c'est simplement parce que l'affichage du chemin complet est une option de l'explorer et que c'est plus facile de faire comme ça que de savoir comment l'utilisateur l'a définie...

Julien.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 18:48
Il vaut quoi ton h ???

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:07
h doit avoir une valeur cohérente avant d'être envoyé à MoveWindow().

par exemple:
h = FindWindow(CeQueTuVeuxIci, idemCeQueTuVeux);
if h Then MoveWindow(...)

ciao...
BruNews, MVP VC++
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
8 janv. 2007 à 22:14
Moi je ferais :

        Dim p As Process
        p = Process.Start("C:\test")
        System.Threading.Thread.Sleep(500)

        MoveWindow(p.MainWindowHandle, 0, 50, 10, 90, False)
        System.Threading.Thread.Sleep(500)

Julien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bimbo777 Messages postés 63 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 17 janvier 2007
9 janv. 2007 à 10:00
Bonjour et merci encore de vos réponses.
J'ai toujours un prblm avec la solution de Julien:

System.NullReferenceException was unhandled
  Message="La référence d'objet n'est pas définie à une instance d'un objet."
(sur la ligne MoveWindow(p.MainWindowHandle, 0, 50, 10, 90, False))

Avez-vous une idée?
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
9 janv. 2007 à 10:06
Ouaip le problème est plus subtil qu'il n'y parait.
En fait, l'erreur ne vient pas vraiment du code, essaie le avec n'importe quel programme (par exemple avec p = Process.Start("calc.exe")) et tu verras qu'il fonctionne...
Le problème vient de l'explorateur windows, ca m'était déjà arrivé, il a quelque chose de "non-standard"...
Je fais quelques test et je reviens ...

Julien.
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
9 janv. 2007 à 10:15
Oups, j'ai oublié l'essentiel : 

        Process.Start("c:\test")

Désolé pour vos boîtes à mail
0
Rejoignez-nous