2009-03-19 8 views
0

Si j'ai une poignée dans une fenêtre, comment puis-je prendre une capture d'écran de toutes les nouvelles fenêtres enfants lorsqu'elles apparaissent? À l'heure actuelle, j'ai un code qui prend une capture d'écran toutes les 0,1 secondes d'un formulaire Windows. Lorsque je clique sur une liste déroulante, les captures d'écran suivantes ne l'incluent pas. En utilisant spy ++, je peux voir qu'une nouvelle fenêtre enfant a été créée mais je ne sais pas trop comment m'assurer qu'elle est incluse dans mes captures d'écran. Quelqu'un a-t-il du code qui pourrait inclure des fenêtres enfants?Obtention d'une capture d'écran de la fenêtre enfant

Merci à l'avance,

Bob

+1

Quelle technique utilisez-vous pour créer la capture d'écran? Avez-vous essayé d'utiliser form.DrawToBitmap? – stuartd

Répondre

1

Oui, le menu déroulant d'une zone de liste déroulante est une fenêtre spéciale, une zone de liste. .NET ne fournit pas un moyen intégré pour obtenir le handle pour cela, vous pouvez P/Invoke SendMessage et envoyer le message CB_GETCOMBOBOXINFO. COMBOBOXINFO.hwndList contient le handle.

Notez qu'il existe d'autres commandes qui se comportent de cette façon, par exemple DateTimePicker. Notez également que la fenêtre peut s'étendre au-delà des limites de votre formulaire.

Le code dans this thread devrait être utile pour obtenir le droit P/Invoke.