MoveWindow probleme [Résolu]

Signaler
Messages postés
63
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
17 janvier 2007
-
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
-
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
A voir également:

7 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
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.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Il vaut quoi ton h ???

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
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++
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
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.
Messages postés
63
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
17 janvier 2007

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?
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
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.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Oups, j'ai oublié l'essentiel : 

        Process.Start("c:\test")

Désolé pour vos boîtes à mail