MoveWindow probleme [Résolu]

bimbo777 63 Messages postés mercredi 25 janvier 2006Date d'inscription 17 janvier 2007 Dernière intervention - 8 janv. 2007 à 17:53 - Dernière réponse : Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 9 janv. 2007 à 10:13
3
Merci
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.

Merci Julien237 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de Julien237
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 8 janv. 2007 à 18:48
0
Merci
Il vaut quoi ton h ???

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 8 janv. 2007 à 19:07
0
Merci
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++
Commenter la réponse de BruNews
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 8 janv. 2007 à 22:14
0
Merci
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.
Commenter la réponse de Julien237
bimbo777 63 Messages postés mercredi 25 janvier 2006Date d'inscription 17 janvier 2007 Dernière intervention - 9 janv. 2007 à 10:00
0
Merci
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?
Commenter la réponse de bimbo777
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 9 janv. 2007 à 10:06
0
Merci
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.
Commenter la réponse de Julien237
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 9 janv. 2007 à 10:15
0
Merci
Oups, j'ai oublié l'essentiel : 

        Process.Start("c:\test")

Désolé pour vos boîtes à mail
Commenter la réponse de Julien237

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.