Dans mon application, je suis en train de lire le texte d'une fenêtre pour le même processus. J'utilise GetWindowText de User32.dll. Mais quand il essaie d'appeler la méthode, j'obtiens l'exception "Une exception non gérée de type 'System.ExecutionEngineException' s'est produite dans aaaa.exe". Où puis-je voir l'erreur exacte? Et pourquoi je reçois cette exception.Une exception non gérée du type 'System.ExecutionEngineException' se produit lors de la tentative de lecture de la fenêtre à partir de GetWindowText() de user32.dll
Mon code est le suivant.
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd,
[Out] StringBuilder lpString, int nMaxCount);
EnumDelegate enumfunc = new EnumDelegate(EnumWindowsProc);
private bool EnumWindowsProc(IntPtr win, int lParam)
{
StringBuilder sb = new StringBuilder();
GetWindowText(win, sb, 100);
if (sb.Length > 0)
{
// do something
}
}
Pourriez-vous nous montrer un (réduit) présentant l'exception? Cela peut être un problème avec la façon dont vous appelez 'GetWindowText'. Puisque vous voulez lire le texte d'une fenêtre du même processus, pourquoi n'utilisez-vous pas l'API managée à la place? –
@AvidProgrammer: Votre code est différent de celui de nobugz. Il vous manque pour initialiser 'StringBuilder' avec une capacité initiale et passer exactement cette capacité comme valeur de' nMaxCount' à la fonction 'GetWindowText'. Cela devrait faire l'affaire. Si vous ne le faites pas, votre objet String Builder a un tampon vide et GetWindowText ne parvient pas à écrire dessus (et en tant que nœud secondaire pour les écritures futures: indentez votre code de 4 espaces ou appuyez sur le bouton * Format as Code * le code bien formaté). –
@divo: Merci de montrer la différence. Définir la capacité du générateur de chaînes et envoyer le même à la fonction api a fait l'affaire. –