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

API, COM et SDKs Delphi Discussion :

Je reviens à la charge : focus d'une application


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Je reviens à la charge : focus d'une application
    Bonjour.

    J'avais déjà lancé ce topic il y a quelques temps et je m'étais certainement mal expliqué :

    J'ai une application en D6 avec une fenêtre unique qui réagit uniquement à des raccourcis-clavier (y compris pour quitter) via "OnKeyDown" pour commander un, on va dire, "appareil" (il s'agit de robotique). Le BorderStyle est "None" et le FormStyle "FsStayOnTop".

    Dans ma routine d'initialisation lancée au démarrage, il y a deux lignes : Application.OnDeactivate:= .... et Application.OnActivate:= ...., qui pointent toutes deux sur des routines Delphi du projet.

    Elles provoquent des changements de couleur au niveau de la fenêtre mais en plus la première arrête l'appareil (normal, il serait incontrôlable pendant le temps que l'appplication n'a pas le focus).

    Je voudrais maintenant simplement savoir s'il existe une instruction qui peut forcer l'environnement Windows, dans cette première routine, à remettre immédiatement le focus (via le handle de l'application ? ) sur l'application elle-même, bref, à empêcher l'application de ne pas être l'application active sur le bureau et ce jusqu'à ce qu'on la quitte au clavier (une application "égoïste" en quelque sorte ). Il n'y aurait alors plus de problème de nécessité d'arrêt entre autres, ni de "réactivation".

    Attention, je précise encore une fois, il ne s'agit pas d'UNE fenêtre d'une application donnée qui doit rester active à l'intérieur de l'application, mais bien de l'application elle-même (en un sens, cela contredit l'esprit du multitâche, je sais).

    Voilà, s'il n'y a pas de solution (ce que je crains) je resterai à la configuration actuelle sans me faire HaraKiri . Donc ne perdez pas trop de temps sur ce sujet ...

    Merci d'avance...

  2. #2
    Invité
    Invité(e)
    Par défaut Opération apparemment impossible ...
    Re-bonjour.

    Trouvé par Google :

    The problem is that the user has been giving input to a program that is not yours. You're not entitled to have focus just cause you want it.

    It may not be the answer you want, but it is the answer. And Microsoft has been working hard to thwart programs that try to steal focus. Any solution you come up with is breaking the rules, and might not work at any point in the future.
    The end ...
    Dernière modification par tourlourou ; 22/12/2013 à 12h15. Motif: balisage

  3. #3
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    La solution serait de faire un hook du clavier, comme un keylogger, sauf que là ça commanderait ton "appareil" au lieu d'enregistrer les frappes.

    Evidemment, c'est plus vite dit que fait : Il faut un hook bas niveau, ce qui nécessite de le faire dans une dll. Puis ensuite de faire remonter l'information vers ton programme par un moyen quelconque (callback, sockets, etc...).

    C'est logique que Windows ait interdit de "prendre" le focus : il suffit qu'il y ait deux application "égoïstes" qui, pour de bonnes ou mauvaises raisons, veuillent chacune prendre le focus, et le système serait bloqué à passer de l'une à l'autre.

  4. #4
    Invité
    Invité(e)
    Par défaut Halte aux usines à gaz !
    Merci pour ton tuyau, mais on sort du contexte dans lequel ce système a été développé. Il ne s'agit pas du tout d'un dispositif destiné à être "diffusé" dans un cadre traditionnel.

    Je suis un "bricoleur de coin de table" et pensais à une solution en 2 lignes : obtenir le handle de l'application et ensuite (re)donner le focus à l'application définie par le handle. Visiblement, cela ne fonctionne pas.

    Une démonstration a été faite dans un LEGT, et apparemment il serait concevable que des élèves (second cycle) se lancent dans ce type de projet. L'essentiel est alors que la perte de focus soit gérée et qu'ils ne se retrouvent pas avec un système "fou" ; cette sécurité est actuellement assurée ... et d'une manière compatible avec les idées du grand Bill

    PS : géniale, ton animation !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2013, 08h39
  2. Perte de focus d'une application
    Par dus dans le forum Visual C++
    Réponses: 12
    Dernier message: 20/10/2008, 10h08
  3. Donner le focus a une application
    Par HopeLeaves dans le forum Delphi
    Réponses: 12
    Dernier message: 22/06/2006, 10h43
  4. Mettre le focus sur une application
    Par Raylemon dans le forum Langage
    Réponses: 17
    Dernier message: 10/05/2006, 18h52
  5. Focus sur une application Windows
    Par mixi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2004, 20h57

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