IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

équivalent de DisableProcessWindowsGhosting sous Win2000 ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Points : 61
    Points
    61
    Par défaut équivalent de DisableProcessWindowsGhosting sous Win2000 ?
    Bonjour,

    Voici mon problème, je travaille sur une application qui peut-être amené à exécuter de longs traitements de façon aléatoires... le problème c'est que ces traitements s'éxécutent dans la thread principale et du coup plus aucun messages windows n'est traités durant ce temps et du coup Windows considère l'application comme plantée. Windows XP crée alors une fausse fenêtre permettant de minimiser/fermer l'application qui ne réponds plus. Le problème de cette fausse fenêtre c'est qu'elle peut passer devant des boites de dialogues modales qui apparaissent justement après ce long traitement. Du coup l'utilisateur a l'impression que l'application est planté alors qu'il s'agit juste d'un message passé derrière (il faut faire alt-tab pour que celui-ci repasse devant mais ça l'utilisateur l'ignore).

    J'ai trouvé un moyen de contourner le problème avec l'appel de l'API DisableProcessWindowsGhosting dispo depuis Windows XP SP1, par contre pour WinXP sans SP1 ou Win2000 je n'ai pas trouvé d'équivalent, ce qui est plutôt très gênant, sous Windows 2000 le problème n'arrive que si on triture la fenêtre qui "ne répond pas" alors que sous XP cela est systématique...

    Quelqu'un a une solution à proposer ?

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    une recherche de 'DisableProcessWindowsGhosting' sur Yahoo renvoie vers QC de borland proposant une piste et vers un site ( http://www.reactos.com/en/content/view/full/4385 ) proposant des sources en C qui semble l'implémenter mais c'est une bonne partie de reverse

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Laurent Dardenne
    Salut,
    une recherche de 'DisableProcessWindowsGhosting' sur Yahoo renvoie vers QC de borland proposant une piste et vers un site ( http://www.reactos.com/en/content/view/full/4385 ) proposant des sources en C qui semble l'implémenter mais c'est une bonne partie de reverse
    Merci pour ton aide, désolé je répond tardivement (j'avais oublié le post) et du coup ton lien ne fonctionne plus. A l'heure actuelle je suis toujours embêté ...

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 744
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 744
    Points : 15 160
    Points
    15 160
    Par défaut
    le problème c'est que ces traitements s'éxécutent dans la thread principale et du coup plus aucun messages windows n'est traités durant ce temps et du coup Windows considère l'application comme plantée.
    Ça ne manquerait pas bêtement de "Application.ProcessMessages" ?
    (ou l'équivalent pour un thread - là ch'sais pas, j'connais quasiment pas ces bestiaux)

    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Utilise la fonction recherche de la page d'accueil du site

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jipété
    Ça ne manquerait pas bêtement de "Application.ProcessMessages" ?
    (ou l'équivalent pour un thread - là ch'sais pas, j'connais quasiment pas ces bestiaux)

    Mes 2 cts,
    --
    jp

    Personnellement je veux éviter autant que possible d'utiliser "Application.ProcessMessages" (en fait j'ai passé quelques temps à tous les virer du code) car je trouve qu'une application correctement écrit n'en a pas besoin bien que dans certains cas et par flemme il m'arrive d'utiliser le genre de code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Enabled:= false;
    try
       DoSomethingLong;
       Application.ProcessMessages;
       DoSomethingLong;
    finally
    Enable:= true;
    end;
    De plus il ne m'est pas toujours possible d'insérer un ProcessMessages ne serait-ce que lors de l'attente d'une connexion, et travailler avec les threads compliquerait bien trop le développement...

    Laurent Dardenne> j'ai fait une recherche dans le forum et je n'ai rien trouve d'interessant (idem avec google/googlegroup), mais je ne suis pas sur d'avoir effectuer la recherche dont tu parles (quelle page d'accueil ?).

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 744
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 744
    Points : 15 160
    Points
    15 160
    Par défaut
    Du post d'origine :
    le problème c'est que ces traitements s'éxécutent dans la thread principale
    De la dernière reply :
    travailler avec les threads compliquerait bien trop le développement...
    Faudrait voir à être cohérent !

    Ch'suis pas un spécialiste des arcanes de Windows et de Delphi, ce que je sais, c'est que dans une boucle longue style copie de fichiers avec form pour indiquer l'avancement et bouton "Annuler", si pas "Application.ProcessMessages" dans la boucle, pas moyen de cliquer sur "Annuler".

    Mes 2 cts,
    --
    jp

    PS: dans l'exemple que tu donnes, moi, le "Application.ProcessMessages" je l'aurais mis dans "DoSomethingLong"...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Jipété
    Du post d'origine :
    De la dernière reply :
    Faudrait voir à être cohérent !

    Ch'suis pas un spécialiste des arcanes de Windows et de Delphi, ce que je sais, c'est que dans une boucle longue style copie de fichiers avec form pour indiquer l'avancement et bouton "Annuler", si pas "Application.ProcessMessages" dans la boucle, pas moyen de cliquer sur "Annuler".

    Mes 2 cts,
    --
    jp

    PS: dans l'exemple que tu donnes, moi, le "Application.ProcessMessages" je l'aurais mis dans "DoSomethingLong"...

    Ben il n'y a rien d'incohérent dans ce que j'ai dis donc je répète : le traitement s'effectue dans la thread principale car travailler avec les threads (autre que la principale cela va de soi) est trop compliqué.

    Moi quand je fait un traitement long je préfère le faire dans une autre thread afin que la thread principale (et donc l'interface) réponde toujours à l'utilisateur. Se contenter de faire un appel à "ProcessMessages" c'est un peu la solution de facilité qui peut entraîner des bugs terribles (genre un timer ou autre événement qui passe en plein milieu de ton traitement alors que cela n'était pas prévu), je parle en connaissance de causes... et mettre un "ProcessMessages" à l'intérieur de "DoSomethingLong" je trouve ça quand même 'achement "trash" (tu perds toutes indépendance lors de l'utilisation de "DoSomethngLong"), enfin moi j'aime pas.

    Donc j'en suis toujours au même point moi ^^ ...

Discussions similaires

  1. fixer la taille des repectoires sous win2000
    Par nono26 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 15/05/2007, 08h57
  2. [Delphi 5] Service sous win2000 et XP
    Par Benat64 dans le forum Delphi
    Réponses: 2
    Dernier message: 24/08/2006, 13h40
  3. équivalent filter light sous firefox
    Par la.sophe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/03/2006, 21h14
  4. RT Access97 sous Win2000
    Par 33stef33 dans le forum Runtime
    Réponses: 5
    Dernier message: 23/09/2004, 20h02
  5. [TP]Perte souris - Prog Dos sous win2000/SP4
    Par PRAGMATIC00 dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 17/12/2003, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo