[Delphi] Capturer le clavier et la souris en tâche de fond

Capturer le clavier et la souris en tâche de fond [Delphi] - Programmation

Marsh Posté le 10-01-2002 à 08:49:48    

Bonjour,
 
C'est toujours moi avec mon programme de limitation de Windows !
En fait mon programme doit s'afficher lorsque je tappe un code dans le vide dans windows ou que je fais un mouvement de souris mais comment faire pour que le clavier soit capturé de mannière transparente lorsque mon programme tourne en tâche de fond ?
 
a++
 
Darx


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 10-01-2002 à 08:49:48   

Reply

Marsh Posté le 10-01-2002 à 09:02:18    

tu créé un timer avec interval 100 ms, puis une zone de texte edit1.
 
ensuite dans le timer tu mets :
 

Code :
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. var
  3. a: integer;
  4. arret:boolean;
  5. begin
  6. timer1.enabled := false;
  7. arret := false;
  8. while Arret = False do
  9.   begin
  10.   if (GetAsyncKeyState(27) and 32768) <> 0 then
  11.    begin
  12.    arret := true;
  13.    sleep (110);
  14.    edit1.text := edit1.text + '[Back]';
  15.    end
  16.   else
  17.   if (GetAsyncKeyState(8) and 32768) <> 0 then
  18.    begin
  19.    sleep (110);
  20.    edit1.text := edit1.text + '[Back]';
  21.    end
  22.   else
  23.   if (GetAsyncKeyState(46) and 32768) <> 0 then
  24.    begin
  25.    sleep (110);
  26.    edit1.text := edit1.text + '[Suppr]';
  27.    end
  28.   else
  29.   if (GetAsyncKeyState(112) and 32768) <> 0 then
  30.    begin
  31.    sleep (110);
  32.    edit1.text := edit1.text + '[F1]';
  33.    end
  34.   else
  35.   if (GetAsyncKeyState(113) and 32768) <> 0 then
  36.    begin
  37.    sleep (110);
  38.    edit1.text := edit1.text + '[F2]';
  39.    end
  40.   else
  41.   if (GetAsyncKeyState(114) and 32768) <> 0 then
  42.    begin
  43.    sleep (110);
  44.    edit1.text := edit1.text + '[F3]';
  45.    end
  46.   else
  47.   if (GetAsyncKeyState(115) and 32768) <> 0 then
  48.    begin
  49.    sleep (110);
  50.    edit1.text := edit1.text + '[F4]';
  51.    end
  52.   else
  53.   if (GetAsyncKeyState(116) and 32768) <> 0 then
  54.    begin
  55.    sleep (110);
  56.    edit1.text := edit1.text + '[F5]';
  57.    end
  58.   else
  59.   if (GetAsyncKeyState(117) and 32768) <> 0 then
  60.    begin
  61.    sleep (110);
  62.    edit1.text := edit1.text + '[F6]';
  63.    end
  64.   else
  65.   if (GetAsyncKeyState(118) and 32768) <> 0 then
  66.    begin
  67.    sleep (110);
  68.    edit1.text := edit1.text + '[F7]';
  69.    end
  70.   else
  71.   if (GetAsyncKeyState(119) and 32768) <> 0 then
  72.    begin
  73.    sleep (110);
  74.    edit1.text := edit1.text + '[F8]';
  75.    end
  76.   else
  77.   if (GetAsyncKeyState(120) and 32768) <> 0 then
  78.    begin
  79.    sleep (110);
  80.    edit1.text := edit1.text + '[F9]';
  81.    end
  82.   else
  83.   if (GetAsyncKeyState(121) and 32768) <> 0 then
  84.    begin
  85.    sleep (110);
  86.    edit1.text := edit1.text + '[F10]';
  87.    end
  88.   else
  89.   if (GetAsyncKeyState(122) and 32768) <> 0 then
  90.    begin
  91.    sleep (110);
  92.    edit1.text := edit1.text + '[F11]';
  93.    end
  94.   else
  95.   if (GetAsyncKeyState(123) and 32768) <> 0 then
  96.    begin
  97.    sleep (110);
  98.    edit1.text := edit1.text + '[Suppr]';
  99.    end
  100.   else
  101.   if (GetAsyncKeyState(124) and 32768) <> 0 then
  102.    begin
  103.    sleep (110);
  104.    edit1.text := edit1.text + '[F12]';
  105.    end
  106.   else
  107.   if (GetAsyncKeyState(145) and 32768) <> 0 then
  108.    begin
  109.    sleep (110);
  110.    edit1.text := edit1.text + '[Arr déf]';
  111.    end
  112.   else
  113.   if (GetAsyncKeyState(19) and 32768) <> 0 then
  114.    begin
  115.    sleep (110);
  116.    edit1.text := edit1.text + '[Pause]';
  117.    end
  118.   else
  119.   if (GetAsyncKeyState(36) and 32768) <> 0 then
  120.    begin
  121.    sleep (110);
  122.    edit1.text := edit1.text + '[Début]';
  123.    end
  124.   else
  125.   if (GetAsyncKeyState(33) and 32768) <> 0 then
  126.    begin
  127.    sleep (110);
  128.    edit1.text := edit1.text + '[Pge Up]';
  129.    end
  130.   else
  131.   if (GetAsyncKeyState(34) and 32768) <> 0 then
  132.    begin
  133.    sleep (110);
  134.    edit1.text := edit1.text + '[Pge Dwn]';
  135.    end
  136.   else
  137.   if (GetAsyncKeyState(35) and 32768) <> 0 then
  138.    begin
  139.    sleep (110);
  140.    edit1.text := edit1.text + '[Fin]';
  141.    end
  142.   else
  143.   if (GetAsyncKeyState(38) and 32768) <> 0 then
  144.    begin
  145.    sleep (110);
  146.    edit1.text := edit1.text + '[Flèche Haut]';
  147.    end
  148.   else
  149.   if (GetAsyncKeyState(40) and 32768) <> 0 then
  150.    begin
  151.    sleep (110);
  152.    edit1.text := edit1.text + '[Flèche Bas]';
  153.    end
  154.   else
  155.   if (GetAsyncKeyState(37) and 32768) <> 0 then
  156.    begin
  157.    sleep (110);
  158.    edit1.text := edit1.text + '[Flèche Gauche]';
  159.    end
  160.   else
  161.   if (GetAsyncKeyState(39) and 32768) <> 0 then
  162.    begin
  163.    sleep (110);
  164.    edit1.text := edit1.text + '[Flèche Droite]';
  165.    end
  166.   else
  167.   if (GetAsyncKeyState(13) and 32768) <> 0 then
  168.    begin
  169.    sleep (110);
  170.    edit1.text := edit1.text + '[Entrée]';
  171.    end
  172.   else
  173.   if (GetAsyncKeyState(160) and 32768) <> 0 then
  174.    begin
  175.    sleep (110);
  176.    edit1.text := edit1.text + '[L. Maj]';
  177.    end
  178.   else
  179.   if (GetAsyncKeyState(161) and 32768) <> 0 then
  180.    begin
  181.    sleep (110);
  182.    edit1.text := edit1.text + '[R. Maj]';
  183.    end
  184.   else
  185.   if (GetAsyncKeyState(20) and 32768) <> 0 then
  186.    begin
  187.    sleep (110);
  188.    edit1.text := edit1.text + '[Maj Lock]';
  189.    end
  190.   else
  191.   if (GetAsyncKeyState(9) and 32768) <> 0 then
  192.    begin
  193.    sleep (110);
  194.    edit1.text := edit1.text + '[Tab]';
  195.    end
  196.   else
  197.   if (GetAsyncKeyState(17) and 32768) <> 0 then
  198.    begin
  199.    sleep (110);
  200.    edit1.text := edit1.text + '[L. Ctrl]';
  201.    end
  202.   else
  203.   if (GetAsyncKeyState(91) and 32768) <> 0 then
  204.    begin
  205.    sleep (110);
  206.    edit1.text := edit1.text + '[L. Win]';
  207.    end
  208.   else
  209.   if (GetAsyncKeyState(92) and 32768) <> 0 then
  210.    begin
  211.    sleep (110);
  212.    edit1.text := edit1.text + '[R. Win]';
  213.    end
  214.   else
  215.   if (GetAsyncKeyState(64) and 32768) <> 0 then
  216.    begin
  217.    sleep (110);
  218.    edit1.text := edit1.text + '[L. Alt]';
  219.    end
  220.   else
  221.   if (GetAsyncKeyState(45) and 32768) <> 0 then
  222.    begin
  223.    sleep (110);
  224.    edit1.text := edit1.text + '[Inser]';
  225.    end
  226.   else
  227.   if (GetAsyncKeyState(162) and 32768) <> 0 then
  228.    begin
  229.    sleep (110);
  230.    edit1.text := edit1.text + '[Alt Gr]';
  231.    end
  232.   else
  233.   if (GetAsyncKeyState(222) and 32768) <> 0 then
  234.    begin
  235.    sleep (110);
  236.    edit1.text := edit1.text + '[²]';
  237.    end
  238.   else
  239.   if (GetAsyncKeyState(1) and 32768) <> 0 then
  240.    begin
  241.    sleep (110);
  242.    edit1.text := edit1.text + '[Clic Gauche]';
  243.    end
  244.   else
  245.   if (GetAsyncKeyState(2) and 32768) <> 0 then
  246.    begin
  247.    sleep (110);
  248.    edit1.text := edit1.text + '[Clic Droit]';
  249.    end
  250.   else
  251.   if (GetAsyncKeyState(44) and 32768) <> 0 then
  252.    begin
  253.    sleep (110);
  254.    edit1.text := edit1.text + '[Impr écran]';
  255.    end
  256.   else
  257.     for a := 0 to 255 do
  258.      begin
  259.      if (GetAsyncKeyState(a) and 32768) <> 0 then
  260.       begin
  261.       sleep (110);
  262.       edit1.text := edit1.text + chr(a);
  263.       end;
  264.      end;
  265.   application.ProcessMessages;
  266.   end;
  267. close;
  268. end;


 
voilà dès que tu tapes qqchose au clavier tu le vois dans edit1 :hello:
Il est pas parfait, mais si tu le veux en mieux la seule soluce que j'ai trouvait prenait des dizaines de Ko et une DLL à part.

 

[edtdd]--Message édité par juju_le_barbare--[/edtdd]


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 10-01-2002 à 09:10:57    

Merci a toi !
 
c'est du service rapide :)
 
Juste une question, pourquoi tu met un "and 32768" à chaque test ?
 
a++
 
Darx


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 10-01-2002 à 09:13:24    

sans l'opérateur and ça marche aussi mais c'est une protection contre les erreurs.
Au fait tu peux rétrécire le code ainsi :
 

Code :
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. var
  3. a: integer;
  4. arret:boolean;
  5. begin
  6. timer1.enabled := false;
  7. arret := false;
  8. while Arret = False do
  9. begin
  10.    for a := 0 to 255 do
  11.     begin
  12.     if (GetAsyncKeyState(a) and 32768) <> 0 then
  13.      begin
  14.      sleep (110);
  15.      edit1.text := edit1.text + chr(a);
  16.      end;
  17.     end;
  18. application.ProcessMessages;
  19. end;
  20. close;
  21. end;


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 10-01-2002 à 09:16:12    

Arf merci à toi !
 
Je me sent un peu tout petit là... :)


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 10-01-2002 à 09:33:02    

Darxmurf a écrit a écrit :

Arf merci à toi !
 
Je me sent un peu tout petit là... :)  




lol
au fait t'as remarqué j'ai fait une erreur dans le code long, j'ai mis [back] aux 2 premières conditionnelles, j'aurais du mettre [suppr] et [back]...
 
@+


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 10-01-2002 à 11:40:33    

Ouaip mais en fait j'ai just besoin de ['A'..'Z'] et ['0'..'9'] donc c'est bon :)
 
Merci encore !
 
a++
 
Darx


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 10-01-2002 à 13:33:58    

Darxmurf a écrit a écrit :

Ouaip mais en fait j'ai just besoin de ['A'..'Z'] et ['0'..'9'] donc c'est bon :)
 
Merci encore !
 
a++
 
Darx  



Salut,
 
Le code des chiffes de 0 à 9 est 48 à 57, celui des lettres de 65 à 90. Donc la boucle for tu peux la mettre de For i := 48 to 90 do etc...
 
Question con : Comment dire :
 
Pour i de 48 à 57 et de 65 à 90 ?  J'en ait jamais eu besoin, et j'ai pas delphi sous les yeux donc pas de fichier d'aide. Merci
 
@+
 :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 14-01-2002 à 10:35:33    

Arf tu dois faire 2 boucles...
 
a+++
 
Darx


---------------
Des trucs - flickr - Instagram
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed