2017-07-05 1 views
0

J'essaie d'obtenir la taille et la position d'une certaine fenêtre attachée au processus javaw.exe.GetWindowRect renvoie NullReferenceException

Malheureusement, GetWindowRect renvoie une erreur: "NullReferenceException" - et j'ai vérifié, aucun de ses arguments == null.

Voici le morceau de code

échantillon Invoquer:

[DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool GetWindowRect(IntPtr handle, out WindowRect rect); 
    [StructLayout(LayoutKind.Sequential)] 
    private class WindowRect 
    { 
     public int Left; 
     public int Top; 
     public int Right; 
     public int Bottom; 
    } 

Exécution fonction statique processus joindre:

NB.Attach(Process.GetProcessesByName("javaw")[0]);

Exemple d'utilisation:

public static void Attach(Process process) 
    { 
     FocusProcess = process; 
     FocusWindow = FindWindow(null, process.MainWindowTitle); 
    } 

    public static int[] GetWindowPosition() 
    { 
     WindowRect rect = new WindowRect(); 

     Console.WriteLine(FocusProcess == null); 
     Console.WriteLine(FocusProcess.MainWindowHandle == null); 
     Console.WriteLine(rect==null); 
     GetWindowRect(FocusProcess.MainWindowHandle, out rect); 
     if (rect.Top != 0) 
     { 
      return new int[] { rect.Left, rect.Top }; 
     } 
     return new int[] { 0, 0 }; 
    } 

Merci d'avance, je suis totalement inexpérimenté en ce qui concerne l'utilisation des fonctions natives.

+0

Il y a certainement quelque chose qui manque ici car 'NullReferenceException' est une exception .Net et' GetWindowRect' ne le lancera pas. – DavidG

+0

C'est le code complet et les points d'erreur pour moi d'essayer d'utiliser GetWindowRect(); – Netheous

+0

Eh bien, ça ne peut pas être comme 'FocusProcess' n'est pas défini ici. Pouvez-vous publier la trace de pile complète de l'exception? – DavidG

Répondre

2

Vous avez déclaré la structure en tant que classe C#. C'est un type de référence déjà. Donc, quand vous le passez en paramètre, vous avez maintenant un double pointeur. Soit

  • changement de classe à struct,
  • ou passer la classe par valeur. Etes-vous sûr que c'est le code complet?
+1

Fonctionne parfaitement - vous n'avez aucune idée du nombre de combinaisons que j'ai essayé .. struct, class, out, ref - mais à tout moment, cela n'a pas fonctionné. Remerciements – Netheous

+0

Gagnant gagnant dîner au poulet –