none
Capturer l'image d'une fenêtre alors que l'utilisateur est vérouillé RRS feed

  • Question

  • Bonjour,

    Une application DirectX ou OpenGL affiche une scène 3D dans une fenêtre.

    J'utilse BitBlt or GetDIBits (cf. msdn.microsoft.com dd183402 : Capturing an Image) pour capturer l'image de la fenêtre de mon application 3D à chaque frame et la transférer depuis la mémoire vidéo à la mémoire CPU.

    Ma capture fonctionne correctement si l'utilisateur n'est pas vérouillé.

    Lorsque l'utilisateur est vérouillé, je souhaiterais que mes captures continuent de fonctionner.

    Mes captures sont correctement dimentionnées mais capture le bureau au lieu de la fenêtre cible.

    Il est possible que device DirectX ou OpenGL soit réinitialisé, bloqué ou perdu.

    L'un de nos programmeurs m'indique que l'application 3D reçoit une exception Direct3D9Exception = DeviceLost

    Je suis conscient que cela peut poser des problèmes de sécurité mais mon besoin s'exprime dans la cadre d'une plateforme isolée d'internet avec une sécurité système métrisée localement.

    Quelqu'un aurait-il une solution permettant de maintenir l'accès au device DirectX ou OpenGL cible ?



    • Modifié BSERRE mercredi 13 janvier 2016 09:50 Add §sécurité
    mardi 12 janvier 2016 13:56

Réponses

Toutes les réponses

  • Ces devices n'existent plus, personne ne calcule les images que vous êtes sensé propager, même pas le jeu.

    Paul Bacelar, Ex - MVP VC++

    mercredi 13 janvier 2016 10:14
    Modérateur
  • Je ne comprends pas votre réponse.

    Ces Devices existent : lorsque mon application 3D tourne et que l'utilisateur n'est pas vérouillé, les captures fonctionnent très bien avec :

    Pour une application OpenGL : glReadPixels

    Pour une application 3D autre (DirectX par exemple) :  BitBlt et GetDIBits

    "personne ne calcule les images que vous êtes sensé propager"

    "personne ne calcule les images" : Si mes applications 3D OpenGL ou DirectX.

    "que vous êtes sensé propager" : Vous voulez dire capturer ?

    "même pas le jeu" : Vous voulez dire les applications dans le domaine du jeu ?

    Si Si la capture d'une fenêtre VBS2 ou VBS3 de Bohemia Interactive se fait très bien avec BitBlt or GetDIBits dans un plugin VBS en C++

    mercredi 13 janvier 2016 14:41
  • Comme l'indique votre programmeur, le programme n'a plus accès au contexte et ne peut donc pas demander à DirectX d'afficher la moindre chose à l'écran.

    DirectX et OpenGL demandent un contrôle complet sur le carte vidéo, contrôle qu'ils perdent dès l'activation de l'écran de log.

    L'application gère cela en désactivant l'affichage durant ce temps :

    https://msdn.microsoft.com/en-us/library/windows/desktop/bb174714%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    Donc non vos applications/drivers vidéo ne calculent pas les images pendant ce temps.

    Paul Bacelar, Ex - MVP VC++

    mercredi 13 janvier 2016 18:48
    Modérateur