Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
positionner la souris, simuler une frappe clavier et un clic
Auteur Message
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Bonjour,
J'aimerai savoir si c'est possible de déplacer la souris en un point donné de son écran de simuler un clic puis simuler des frappes clavier
Après quelques recherches j'ai d'abord essayé avec arduino. Je pensais que arduino pouvait contrôler la souris mais en vain (probleme de libraire et tt ca m'enerve)
Je sais aussi qu'il est possible en autoIT mais je ne m'y connais pas ...

Quelqu'un pourrait m'aider ?

Merci d'avance,




______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Salut Mr. Green

Dans ta situation, le powershell est d'après moi la meilleure solution Okay
Donc je t'ai fait quelques fonctions batch avec du powershell :

    - MoveMouseTo X,Y
    - MoveMouseBy X,Y
    - SimuleClick Left || Right || Middle
    - SimuleKeyboardKey "KEY"


Code:
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof



Voici un exemple d'utilisation :

Code:
@echo off

title By Flammrock :D

call :MoveMouseTo 1450 70
call :SimuleClick Left
start notepad
@ping localhost -n 2 >nul
call :SimuleKeyboardKey SALUT


echo;By Flammrock :D






>nul ping -n -1 localhost
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof



Pour simuler l'appui sur la tocuhe entrer, il faut mettre : {ENTER}
Je te conseil d'aller jeter un coup d'œil ici : https://technet.microsoft.com/en-us/library/ff731008.aspx


J'espère t'avoir aider Mr. Green



Dernière édition par Flammrock le Mer 24 Mai 2017 - 15:02; édité 2 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Salut,

Il existe des petites applications toutes faites, faut demander à google, genre
mouse keyboard recorder, mouse replay, mouse macro ...
ça enregistre ce que tu fais et ça le reproduit.

Autoit, peut être, mais il parait que autohotkey est plus adapté pour ça, en fait
c'est fait pour apparemment.



Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Flammrock a écrit:
Salut Mr. Green

Dans ta situation, le powershell est d'après moi la meilleure solution Okay
Donc je t'ai fait quelques fonctions batch avec du powershell :

    - MoveMouseTo X,Y
    - MoveMouseBy X,Y
    - SimuleClick Left || Right || Middle
    - SimuleKeyboardKey "KEY"


Code:
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof



Voici un exemple d'utilisation :

Code:
@echo off

title By Flammrock :D

call :MoveMouseTo 1450 70
call :SimuleClick Left
start notepad
@ping localhost -n 2 >nul
call :SimuleKeyboardKey SALUT LOL


echo;By Flammrock :D






>nul ping -n -1 localhost
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof



Pour simuler l'appui sur la tocuhe entrer, il faut mettre : {ENTER}
Je te conseil d'aller jeter un coup d'œil ici : https://technet.microsoft.com/en-us/library/ff731008.aspx


J'espère t'avoir aider Mr. Green


Bonjour Flammrock merci pour ta réponse ! Quand j'exécute ton programme il me donne cette erreur :

Saurais tu comment y remédier ?




______________________________________________________

Programme
Skype
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Oui Mr. Green
Je n'étais pas au courant de ça : http://go.microsoft.com/fwlink/?linkID=135170

Donc voici le script corrigé :

Code:
@echo off

title By Flammrock :D

call :MoveMouseTo 1450 70
call :SimuleClick Left
start notepad
@ping localhost -n 2 >nul
call :SimuleKeyboardKey {ENTER}


echo;By Flammrock :D






>nul ping -n -1 localhost
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof


p.s : j'ai update mon premier message




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Flammrock a écrit:
Oui Mr. Green
Je n'étais pas au courant de ça : http://go.microsoft.com/fwlink/?linkID=135170

Donc voici le script corrigé :

Code:
@echo off

title By Flammrock :D

call :MoveMouseTo 1450 70
call :SimuleClick Left
start notepad
@ping localhost -n 2 >nul
call :SimuleKeyboardKey {ENTER}


echo;By Flammrock :D

Un GRAND MERCI Flammrock !!!!!!!!!!
C'est un sujet plus que résolu encore un mystere du batch résolu pour moi !
Encore merci bonne fin de journée  :mdr:  :ok:






>nul ping -n -1 localhost
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof


p.s : j'ai update mon premier message





______________________________________________________

Programme
Skype
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
jay a écrit:
Salut,

Il existe des petites applications toutes faites, faut demander à google, genre
mouse keyboard recorder, mouse replay, mouse macro ...
ça enregistre ce que tu fais et ça le reproduit.

Autoit, peut être, mais il parait que autohotkey est plus adapté pour ça, en fait
c'est fait pour apparemment.

Bonjour,
Je travaille sur un logiciel dans lequel la reproduction d'actions n'est pas très pratique Very Happy
Merci de ta réponse c'est toujours bon à savoir !




______________________________________________________

Programme
Skype
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Flammrock a écrit:
Oui Mr. Green
Je n'étais pas au courant de ça : http://go.microsoft.com/fwlink/?linkID=135170

Donc voici le script corrigé :

Code:
@echo off

title By Flammrock :D

call :MoveMouseTo 1450 70
call :SimuleClick Left
start notepad
@ping localhost -n 2 >nul
call :SimuleKeyboardKey {ENTER}


echo;By Flammrock :D






>nul ping -n -1 localhost
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof


p.s : j'ai update mon premier message


Encore une petite question Embarassed
Est ce qu'il est possible de faire une sélection et de copier coller (appuyer sur le clic droit en meme temps que de déplacer le curseur puis relacher le clic et faire "ctrl" "c" ) ?




______________________________________________________

Programme
Skype
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Avec ce que je t'ai donné et avec l'aide de google, tu aurais pu trouver facilement Mr. Green
Mais comme je suis gentil Okay


Bon pour se faire, je dois t'expliquer cette partie :

Code:
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof



Si tu avais bien regardé, à un moment tu vois ça :

Code:
echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);


Je traduis :


    - on enfonce le click gauche/droit/milieu (1er ligne)
    - puis on relâche le click gauche/droit/milieu (2er ligne)


A t'on avis que se passe t-il si on met que :

Code:
echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);


Et bien ça maintient le click gauche/droit/milieu enfoncé
Une fois qu'on a ça, il reste plus qu'à bouger la souris aux coordonnées voulues puis de relâcher le click et d'envoyer les touches CTRL+C

Donc en gros ça donne ça :

Code:
:CopyAreaToClip X1,Y1,X2,Y2
  call :MoveMouseTo %~1 %~2
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000002, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :MoveMouseTo %~3 %~4
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000004, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :SimuleKeyboardKey ^^^^^^^^^^^^^^C
goto :eof




X1,Y1,X2,Y2 correspondent aux coordonnées des points de la zone à copier

Exemple :



Le code ci-dessous dépend donc de l'emplacement de la fenêtre du bloc-note (tu peux regarder sur google comment par exemple récupérer les coordonnées d'une fenêtre)

Code:
@echo off

title By Flammrock :D



start notepad
@ping localhost -n 2 >nul
call :SimuleKeyboardKey SALUT XDDD LOLLLLL

call :CopyAreaToClip 500 500 1000 1000

echo;By Flammrock :D






>nul ping -n -1 localhost
:MoveMouseTo X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(%~1,%~2);"
goto :eof
:MoveMouseBy X,Y
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;$Pos=[System.Windows.Forms.Cursor]::Position;[System.Windows.Forms.Cursor]::Position=New-Object System.Drawing.Point((($Pos.X) + %~1),(($Pos.Y) + %~2));"
goto :eof
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof
:SimuleKeyboardKey "KEY"
  set SKK=%*
  set SKK=%SKK:"=%
  powershell -noprofile -command "Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('%SKK%');"
goto :eof
:CopyAreaToClip X1,Y1,X2,Y2
  call :MoveMouseTo %~1 %~2
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000002, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :MoveMouseTo %~3 %~4
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000004, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :SimuleKeyboardKey ^^^^^^^^^^^^^^C
goto :eof






______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Flammrock a écrit:
Avec ce que je t'ai donné et avec l'aide de google, tu aurais pu trouver facilement Mr. Green
Mais comme je suis gentil Okay


Bon pour se faire, je dois t'expliquer cette partie :

Code:
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof



Si tu avais bien regardé, à un moment tu vois ça :

Code:
echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);


Je traduis :


    - on enfonce le click gauche/droit/milieu (1er ligne)
    - puis on relâche le click gauche/droit/milieu (2er ligne)


A t'on avis que se passe t-il si on met que :

Code:
echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);


Et bien ça maintient le click gauche/droit/milieu enfoncé
Une fois qu'on a ça, il reste plus qu'à bouger la souris aux coordonnées voulues puis de relâcher le click et d'envoyer les touches CTRL+C

Donc en gros ça donne ça :

Code:
:CopyAreaToClip X1,Y1,X2,Y2
  call :MoveMouseTo %~1 %~2
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000002, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :MoveMouseTo %~3 %~4
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000004, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :SimuleKeyboardKey ^^^^^^^^^^^^^^C
goto :eof




X1,Y1,X2,Y2 correspondent aux coordonnées des points de la zone à copier

Exemple :

{{{CODE COMPLET}}}


Ahhhhhhh Merciiiiiiii
C'est vrai que j'aurai du un peu regarder dsl
Encore merciii




______________________________________________________

Programme
Skype
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Flammrock a écrit:
Avec ce que je t'ai donné et avec l'aide de google, tu aurais pu trouver facilement Mr. Green
Mais comme je suis gentil Okay


Bon pour se faire, je dois t'expliquer cette partie :

Code:
:SimuleClick Left || Right || Middle
  if /i "%~1"=="left" (
    set down=0x00000002
   set up=0x00000004
  ) else if /i "%~1"=="right" (
   set down=0x00000008
   set up=0x00000010
  ) else if /i "%~1"=="Middle" (
    set down=0x00000020
   set up=0x00000040
  ) else goto :eof
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
    echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
goto :eof



Si tu avais bien regardé, à un moment tu vois ça :

Code:
echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);
echo;$SendMouseClick::mouse_event^(%up%, 0, 0, 0, 0^);


Je traduis :


    - on enfonce le click gauche/droit/milieu (1er ligne)
    - puis on relâche le click gauche/droit/milieu (2er ligne)


A t'on avis que se passe t-il si on met que :

Code:
echo;$SendMouseClick::mouse_event^(%down%, 0, 0, 0, 0^);


Et bien ça maintient le click gauche/droit/milieu enfoncé
Une fois qu'on a ça, il reste plus qu'à bouger la souris aux coordonnées voulues puis de relâcher le click et d'envoyer les touches CTRL+C

Donc en gros ça donne ça :

Code:
:CopyAreaToClip X1,Y1,X2,Y2
  call :MoveMouseTo %~1 %~2
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000002, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :MoveMouseTo %~3 %~4
  (
    echo;$signature=@'
    echo;[DllImport^("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall^)]
    echo;public static extern void mouse_event^(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo^);
    echo;'@
    echo;$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru;
    echo;$SendMouseClick::mouse_event^(0x00000004, 0, 0, 0, 0^);
    echo;exit;
  )> "%temp%\tmp.ps1"
  powershell -noprofile -executionpolicy unrestricted -command "%temp%\tmp.ps1"
  del /q "%temp%\tmp.ps1"
  call :SimuleKeyboardKey ^^^^^^^^^^^^^^C
goto :eof




X1,Y1,X2,Y2 correspondent aux coordonnées des points de la zone à copier

Exemple :

{{{CODE COMPLET}}}



Encore qq chose comment je peux définir une variable batch en utilisant une valeur que PowerShell retourne
J'ai essayé avec une boucle for mais jsp pourquoi ca marche pas




______________________________________________________

Programme
Skype
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
programme a écrit:
Encore qq chose comment je peux définir une variable batch en utilisant une valeur que PowerShell retourne
J'ai essayé avec une boucle for mais jsp pourquoi ca marche pas


Pour sa, faut comprendre un peu le système d'output du batch Mr. Green
C'est en fait le plus important je dirais Okay


Par exemple, pourquoi ceci ne m'affiche pas "SALUT" dans la console, j'ai mis echo;SALUT :

Code:
for /f "tokens=*" %%a in ('echo;SALUT') do (
  rem ceci c'est pour combler le vide
)


Et bien, la boucle for va capturer ce qui est censé être afficher à l'écran et l'enregistrer dans une variable temporaire qui change à chaque tour Okay



Ceci affiche bien "SALUT" :

Code:
for /f "tokens=*" %%a in ('echo;SALUT') do (
  echo;%%a
)


Tu comprends où je veux en venir ?
Si tu utilise le VBScript et que tu veux récupérer la valeur d'une variable sans passer par la création d'un fichier, il suffit de l'écrire dans la console en vbscript et de la récupérer dans une boucle for.
C'est pareil avec tout !
Si tu fait un call de ton programme en .bat qui est censé afficher "BONJOUR", et que tu le places dans la boucle for le "BONJOUR" afficher sera "capturer" par la boule for.



En gros, si tu veux récupérer la valeur d'une variable d'un autre langage et bin tu as juste à l'écrire dans la console puis de la récupérer avec la boucle for en mettant bien le commutateur /f et le "tokens=*"




Voici un exemple avec le powershell :

Code:
@echo off

set salut=0
for /f "tokens=*" %%a in ('powershell -c "$MaVariable=5;Write-Host $MaVariable"') do (
  set salut=%%a
)

echo;%salut%

pause>nul





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message positionner la souris, simuler une frappe clavier et un clic 
Flammrock a écrit:
programme a écrit:
Encore qq chose comment je peux définir une variable batch en utilisant une valeur que PowerShell retourne
J'ai essayé avec une boucle for mais jsp pourquoi ca marche pas


Pour sa, faut comprendre un peu le système d'output du batch Mr. Green
C'est en fait le plus important je dirais Okay


Par exemple, pourquoi ceci ne m'affiche pas "SALUT" dans la console, j'ai mis echo;SALUT :

Code:
for /f "tokens=*" %%a in ('echo;SALUT') do (
  rem ceci c'est pour combler le vide
)


Et bien, la boucle for va capturer ce qui est censé être afficher à l'écran et l'enregistrer dans une variable temporaire qui change à chaque tour Okay



Ceci affiche bien "SALUT" :

Code:
for /f "tokens=*" %%a in ('echo;SALUT') do (
  echo;%%a
)


Tu comprends où je veux en venir ?
Si tu utilise le VBScript et que tu veux récupérer la valeur d'une variable sans passer par la création d'un fichier, il suffit de l'écrire dans la console en vbscript et de la récupérer dans une boucle for.
C'est pareil avec tout !
Si tu fait un call de ton programme en .bat qui est censé afficher "BONJOUR", et que tu le places dans la boucle for le "BONJOUR" afficher sera "capturer" par la boule for.



En gros, si tu veux récupérer la valeur d'une variable d'un autre langage et bin tu as juste à l'écrire dans la console puis de la récupérer avec la boucle for en mettant bien le commutateur /f et le "tokens=*"




Voici un exemple avec le powershell :

Code:
@echo off

set salut=0
for /f "tokens=*" %%a in ('powershell -c "$MaVariable=5;Write-Host $MaVariable"') do (
  set salut=%%a
)

echo;%salut%

pause>nul


Merciii comme ca j'ai un bon bagage
C'est chouette de m'avoir aidé !
Encore merci et à la prochaine question !




______________________________________________________

Programme
Skype
Message positionner la souris, simuler une frappe clavier et un clic 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch