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 :

handle à n'importe quelle app ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut handle à n'importe quelle app ?
    bonjour ! je souhaiterai pouvoir faire éxécuter une commande de keybd_event pour n'importe quelle programme ayant le focus.

    Déjâ le probleme à l'origine, c'est que sa ne fonctionne que sur ma form.
    Le 2ieme probleme est que si mon application perds le focus, sa ne marche plus du tout; ni dans ma form, ni dans n'importe quelle programme.

    Hors je veux donc pouvoir envoyer mon keybd_event partout, zone de texte ou non.

    Une idée ?
    J'ai déja éssayer sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Procedure sendkeys();
         var hWindow: HWND;
         begin
      hWindow := GetForegroundWindow();
      keybd_event(VK_space, 0, 0, 0);
      sleep(30);
      keybd_event(VK_space, 0, KEYEVENTF_KEYUP, 0);
      sleep(200);
    end;
    mais sa ne fonctionne pas mieu que s'ils n'y étaient pas .

    J'utilise aussi des hooks, cela doit changer quelque chose ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Essayes avec AttachThreadInput() puis GetFocus().

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Procedure GetSysFocus;
    var
      hFgWin, FgThreadID: Integer;
    begin
      hFgWin     := GetForegroundWindow;
      FgThreadID := GetWindowThreadProcessID(hFgWin, nil);
      if AttachThreadInput(GetCurrentThreadID, FgThreadID, True) then
      GetFocus;
    end;
     
    Procedure sendkeys();
    begin
    getsysfocus();
      keybd_event(VK_space, 0, 0, 0);
      sleep(30);
      keybd_event(VK_space, 0, KEYEVENTF_KEYUP, 0);
      sleep(200);
    Ne fonctionne pas

    Erf, dur dur le focus global ...

  4. #4
    Membre éclairé Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut focus global
    J'ai à peu près le même problème...

    Je cherche de mon côté, mais ça ne donne pas grand chose.

    Si j'ai du nouveau je te tiens au courant.

    ++

    ps: je viens de lire ton message et je n'ai pas msn jss au taf.. :s

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Tu peux toujours essayer avec
    SendInput...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    var
      Input:TInput;
    begin
      Input.Itype := INPUT_KEYBOARD;
      Input.ki.wVk := VK_CONTROL;
      Input.ki.wScan := 0;
      Input.ki.time := 0;
      Input.ki.dwExtraInfo := 0;
     
      Input.ki.dwFlags := 0;    // Preparation pour envoi Key DOWN
      SendInput(1, Input, SizeOf(Input));  //Send Key DOWN
      //Lecture de l'etat de VK_CONTROL
      if GetAsyncKeyState(VK_CONTROL) <> 0 then
      begin
          //Vk_Control est down! remet a UP!
          Input.ki.dwFlags := KEYEVENTF_KEYUP; // preparation pour envoi Key UP
          SendInput(1, Input, SizeOf(Input)); //Send Key UP
      end;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Par défaut
    Sa ne fonctionne pas mieu, si ma forme n'a pas le focus, l'envoi ne marche plus, sendinput ou autre...

    Je me pose des questions, tel que est-ce que le fait d'utiliser des hooks claviers peuvent poser ce probleme.

    Si c'est le cas, comment remedier à cela tout en gardant mes hooks ?

Discussions similaires

  1. Comment surcharger (hook) n'importe quelle API windows ?
    Par RazielReaver dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 05/07/2020, 18h41
  2. l'appel de n importe quelle fct lors de l'excution
    Par dalhia dans le forum Windows
    Réponses: 3
    Dernier message: 12/09/2006, 09h56
  3. Réponses: 20
    Dernier message: 16/08/2006, 15h32
  4. Réponses: 13
    Dernier message: 12/06/2006, 15h31
  5. Imprimer un canvas sous n'importe quelle imprimante
    Par Bily.sdi dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/12/2005, 13h02

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