Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 4 sur 5
Aller à la page: <  1, 2, 3, 4, 5  >
[Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher
Auteur Message
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Revue du message précédent :

taz8 a écrit:
J'ai réussi ! J'ai modifié la source pour y mettre une fonction repérant la position de la souris SANS cliquer !! (J'ai jamais codé en ASM xD)
La commande est
Code:
batbox /y

elle retourne exactement la même chose que le /m, sans le type de bouton pressé (une boucle for suffit donc à séparer le X et le Y).

Pas mal, franchement, j'ai pas eu le temps de me pencher sur le problème.

taz8 a écrit:
PS : @darkbatcher, si mes souvenirs sont bons, je peux diffuser une copie de batbox, mais sans donner les sources ? Si ce n'est pas le cas, j'enlèverai la pièce jointe !

Ca dépend. Je me souviens que j'avais distribué la version 2 sous licence BSD avant de switcher à la GPL pour la 2.1... Je veux bien te laisser la BSD (redistribution sans les sources autorisées) sur ce coup, mais tu seras d'accord que c'est pas très fair-play de modifier la source que tout le monde peut avoir, sans distribuer les modifications qui vont avec. Donc en résumé, j'aimerais bien que tu donnes les modifications de la sources (t'auras un copyright), mais si tu veux pas les donner, je vais pas te coller un procès au cul parce que tu violes la GPL Wink

@+

Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
dans le doute j'ai préféré ne pas faire ^^
Mais bon j'ai édité et mis la source !

Merci beaucoup !



Visiter le site web du posteur
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Re taz8 Very Happy

Est-ce que se serait possible de récupérer le clic de l'utilisateur avec batbox /y ? Wink




______________________________________________________
Site MagicDosYoutubeFacebookVietcong 2 OlympeVietcong 2 Alliance
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Ah oui je vois le problème ^^ en gros vu que /m fait pause, on peut pas le mettre dans une boucle avec le /y ^^

'vais voir ce que je peux y faire !

EDIT : ça fonctionne !! maintenant le /y renvoie tout comme le /m

Code:
@echo off

if not exist batbox_Copy.exe (call :batbox_Copy)

:Start

::Je l'ai appelée "batbox_Copy" pour ne pas me tromper avec l'original ^^
batbox_Copy /g 0 0

::la chaîne de charactères vide sert à "nettoyer" si les coordonnées sont plus courtes que les précédentes
batbox_Copy /y /d "     "

::Le /y retourne X:Y:M
::où X et Y sont les coordonnées
:: et M est le clic de la souris (0 = rien, 1 = gauche, 2 = droit ...
:: 23 quand vous sélectionnez la fenêtre, 7864320 = roulette haut, ...
:: -7864320 = roulette bas).

goto Start


:batbox_Copy
For %%b In (
    "535A444488F02733410001000800FF4D5A800001000000FF04001000FFFF00008940F4F1F5F04002030E0D1C0A80FEF5F00E1FBA0E00B409FFCD21B8014CCD21"
    "54FF6869732070726F67FF72616D2063616E6EFF6F74206265207275FF6E20696E20444F53FF206D6F64652E0D0AFD241C05504500004C01BF01006399C6531C"
    "05E0FF000F010B010146001106F5F08D01020110960807019901530200F3F20201041C0520AA031FF6E80000039509AF069F043E1C045513000073AD00F70DC0"
    "071D171D271D371D471D571D2E66376C6174F5F0FC0596048D0102F50C608201901DA01DB01DC01DD01D7EE01C68D81540006AEF13EB68CCF911C8F210FF1574"
    "FEF211F5FF1554144000ABA3D4F211F60E24D0F210E8FD9AAD00438A1380CA20FF31FF66B90B003A977F481340000F8479AD00FF4767E2F0E9DAFFFF77FFE857"
    "AD0050FF351521B7FF155C1120E9C3492080BF7B015F0F850EF5F0FFFB157CF21085C00F84ABAE4920FF1570F2103D8F110F93850B6A227D2105FDF050201575"
    "78232105AD000305073A20AD25FCF1A3DC2321F0F4F003FB050B3A20C1E0100105A6AF21FF35C3235423605B21483A4921C5F4F0C7050F3A200201B5A3E52168"
    "EE22F51204216C56F210E91F4921B9F4F053F729BD0949206A18FF352221FF7315581120F0130168E0C4229A2133641120833DF1113C20CDEE492066833D3331"
    "020F855DBF4920F705F0F210FD4920770F85AF49208B3DE4F2107F89FEC1EF1081E6FCF1ABA1E87024914920035F32506F575668F8F92781FE1B3DA02B3D3B35"
    "6E3D7E33923C32A230E855AF9423685B2121F1319EEA2166A521E894EA21BA21E908A230AB68F4CA28701120E86C11A3A9F8F9111F496C5B21D76430E84D54F5"
    "F089C70620112057972015105B21BD4C413A0501F0125126F5785B21A06645803B0075EB05BBEC1202AC006A005357FF15F016417E4C4118F5F0F56A994380F2"
    "1083C40CC3BFC1E702FFA7143A2083DD05FD11048B1DFD118B1B6F85DB0F84F4F1C36A7A417EF21025730025643AE8427CE743E01B73104000AE0550F5EE0550"
    "5C055017114000552D1550B5155015F92004F920552EF92096F9205FF92079F920FF6B676163646D796F7F77687370665015E017B5B9F1006C46502814E017C4"
    "AAF100545A50085A58D2F10010525A50E8F100E015DEF100F08258FE99594D53564352542EFF444C4C004B45524EEF454C3332AF52005553FB4552BA5557494E"
    "4D4DE2AF52F88254D8556E006C6179BF536F756E6441020118F85A54F8550A316F7757696EA7646F7728025A50905A50A2AA5A50BC5A50D85A50EC5A50F42A5A"
    "500C4650244650384654186DF8286D386941206574537464BF48616E646C65066265FF74436F6E736F6C65F94D61007E6B54657874417F747472696275747D61"
    "FE8267437572736F72507F6F736974696F6E0201EF526561648564496E70FB7574F351536C6565703CAB6DBB60496E666F6E64E96D78F96C0E67826744697370"
    "EB50AA8C628846509246509C4650AC8A4650B44650BE4654407D5079007F007072696E746602013F5F676574636880728471FF6D61696E61726773EEF5F06578"
    "696C11005F6BFB6268A073737472746F016C995DC57DD57DE077"
) Do >> "$" (Echo.For b=1 To len^(%%b^) Step 2
Echo WScript.StdOut.Write Chr^(Clng^("&H"^&Mid^(%%b,b,2^)^)^) : Next)
Cscript /b /e:vbs "$" > "batbox_Copy.ex_"
Del /f "$"
expand batbox_Copy.ex_ batbox_Copy.exe
del batbox_Copy.ex_
Goto :EOF


Code:
; BatBox.exe - copyleft (c) Darkbatcher 2011 - 2014 - copyright (c) Taz8 2014
; Cet source est distribuée sous licence GNU GPL

format PE CONSOLE 4.0

include 'win32a.inc'

struct INPUT_RECORD
     EventType dw ?
     nul dw ?
     dwMousePosition dd ?
     dwButtonState dd ?
     dwControlKeyState dd ?
     dwEventFlags dd ?
ends

struct CONSOLE_CURSOR_INFO
     dwSize dd ?
     bVisible dd ?
ends

SND_NODEFAULT=2
SND_FILENAME=$20000
;SND_ASYNC=1

EVENT_TYPE_MOUSE=2
COORD_MASK=$0000FFFF
EVENT_FLAG_MASK=$FFFFFFFD
; utilisation des registres
; ebx pointe sur l'argument courrant



; import data in the same section
    invoke __getmainargs,argc,argv,bin,0,bin
    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov   [hOut],eax
    invoke GetStdHandle,STD_INPUT_HANDLE
    mov   [hIn],eax
    argsLoop_:
      call   near GetNextArg_
      inc   ebx
      mov   byte dl,[ebx]
      or   dl,$20
      ; now seaching for the right label to follow
      xor   edi,edi
      mov   cx,11
      LabelLoop_:
         cmp byte dl,[jumpChar+edi]
         je  near ChooseJump_
         inc edi
         loopw LabelLoop_
         jmp near argsLoop_

            Color_:
                   call    near GetNextNumber_
                   invoke       SetConsoleTextAttribute,[hOut],eax
                   jmp     near argsLoop_

            Key_:
               cmp        byte [ebx+1],'_'
               jnz    near KeyNext_
                          invoke     _kbhit
                          test     eax,eax
                          jz      near argsLoop_
                   KeyNext_:
                   invoke       getch
                   cmp       eax,224
                   jnz     near KeyEnd_
                          invoke     getch
                          add     eax,255
                   KeyEnd_:
                   invoke       exit,eax

            Goto_:
               call   near GetNextNumber_
               add        eax,[dwXOffset]
               and        eax,$0000FFFF
               mov        [p],eax
               call   near GetNextNumber_
               add        eax,[dwYOffset]
               shl        eax,16
               add        [p],eax
               invoke        SetConsoleCursorPosition,[hOut],[p]
               jmp   near argsLoop_

            Char_:
               call   near GetNextNumber_
               mov    dword [pBuf],0
               mov    dword [pBuf],eax
               invoke        printf,strMask,pBuf
               jmp   near argsLoop_

            Disp_:
               call   near GetNextArg_
               invoke        printf,strMask,ebx
               jmp   near argsLoop_

            Mouse_:
               invoke        SetConsoleMode,[hIn],0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT
               invoke        ReadConsoleInput,[hIn],input,1,bin
               cmp        [bin],0
               jz   near Mouse_
               cmp        [input.EventType],EVENT_TYPE_MOUSE
               jne        near Mouse_

               test        [input.dwEventFlags],EVENT_FLAG_MASK
               jnz   near Mouse_
               mov        edi,[input.dwMousePosition]
               mov        esi,edi
               shr        edi,16
               and        esi,COORD_MASK
               mov        eax,[input.dwButtonState]
               test        eax,eax
               jz   near Mouse_
               add        eax,[input.dwEventFlags]
               invoke        printf,mouseMask,esi,edi,eax
               jmp   near argsLoop_

                Position_:
               invoke        SetConsoleMode,[hIn],0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT
               invoke        ReadConsoleInput,[hIn],input,1,bin
               mov        edi,[input.dwMousePosition]
               mov        esi,edi
               shr        edi,16
               and        esi,COORD_MASK
               mov        eax,[input.dwButtonState]
               invoke        printf,mouseMask,esi,edi,eax
               jmp   near argsLoop_

            Wait_:
               call   near GetNextNumber_
               invoke        Sleep,eax
               jmp   near argsLoop_

            Offset_:
               call   near GetNextNumber_
               mov        [dwXOffset], eax
               call   near GetNextNumber_
               mov        [dwYOffset], eax
               jmp   near argsLoop_

            Hide_:
               invoke        GetConsoleCursorInfo,[hOut],cursorInfo
               call   near GetNextNumber_
               mov        [cursorInfo.bVisible],eax
               invoke        SetConsoleCursorInfo,[hOut],cursorInfo
               jmp   near argsLoop_

            HideConsole_:

               call   near GetNextNumber_

               mov        edi,eax
               invoke        GetConsoleWindow
               invoke        ShowWindow,eax,edi
               jmp   near argsLoop_


            Fullscreen_:
               call   near GetNextNumber_
               inc       eax
               invoke       SetConsoleDisplayMode,[hOut],eax,bin
               jmp    near argsLoop_

            Sound_:
                call  near GetNextArg_
                cmp   byte [ebx],0
                jnz       Sound_Next_

                mov       ebx,0

                Sound_Next_:

                invoke     PlaySound, ebx, 0, SND_FILENAME + SND_NODEFAULT

                jmp   near argsLoop_



proc   GetNextNumber_
   call        GetNextArg_
   cinvoke       strtol,ebx,0,0
   ret
endp

ChooseJump_:
   shl edi,2
   jmp [jumpTable+edi]

GetNextArg_:
   add   [argv],4
   mov   ebx,[argv]
   mov   ebx,[ebx]
   test   ebx,ebx
   jz   near EndCommand_
   ret
EndCommand_:
   invoke   exit,0

strMask      db '%s',0
mouseMask    db '%d:%d:%d',0

dwXOffset    dd 0
dwYOffset    dd 0
pBuf        db 0,0,0,0,0
jumpTable    dd Key_,Goto_,Char_,Color_,Disp_,Mouse_,Position_,Offset_,Wait_,Hide_,Sound_,HideConsole_,Fullscreen_
jumpChar     db 'kgacdmyowhspf'

data import
 library msvcrt, 'MSVCRT.DLL',\
    kernel,'KERNEL32.DLL',\
    user, 'USER32.DLL',\
    winmm, 'WINMM.DLL'

 import winmm,\
   PlaySound,'PlaySoundA'

 import user,\
   ShowWindow,'ShowWindow'

 import kernel,\
   GetStdHandle,'GetStdHandle',\
   SetConsoleMode,'SetConsoleMode',\
   SetConsoleTextAttribute,'SetConsoleTextAttribute',\
   SetConsoleCursorPosition,'SetConsoleCursorPosition',\
   ReadConsoleInput,'ReadConsoleInputA',\
   Sleep,'Sleep',\
   SetConsoleCursorInfo,'SetConsoleCursorInfo',\
   GetConsoleCursorInfo,'GetConsoleCursorInfo',\
   GetConsoleWindow,'GetConsoleWindow',\
   SetConsoleDisplayMode,'SetConsoleDisplayMode'


 import msvcrt,\
   printf, 'printf',\
   getch,'_getch',\
   __getmainargs,'__getmainargs',\
   exit,'exit',\
   _kbhit,'_kbhit',\
   strtol,'strtol'


end data

argc     dd ?
argv     dd ?
hIn     dd ?
hOut     dd ?
bin     dd ?
p     dd ?

input       INPUT_RECORD ?
cursorInfo  CONSOLE_CURSOR_INFO ?




Dernière édition par taz8 le Jeu 17 Juil 2014 - 15:24; édité 2 fois
Visiter le site web du posteur
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
taz8 a écrit:
Ah oui je vois le problème ^^ en gros vu que /m fait pause, on peut pas le mettre dans une boucle avec le /y ^^


Oui voila c'est ça Very Happy Okay




______________________________________________________
Site MagicDosYoutubeFacebookVietcong 2 OlympeVietcong 2 Alliance
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Hello !

Pour y revenir, oublie pas de mettre ton copyright (j'vais pas dire que j'ai tout fait quand même Mr. Green)

Code:
Copyright (c) Taz8


Après, je le garde sous gpl, mais je pense que je vais passer à une License BSD (plus permissive).

J'vais modifier la source du premier message... Il reste à écrire l'aide....

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
taz8 a écrit:

EDIT : ça fonctionne !! maintenant le /y renvoie tout comme le /m


Excellent Okay Okay Okay La c'est THE BEST COMMANDE EVER Mort de Rire Merci beaucoup pour ton travail Very Happy




______________________________________________________
Site MagicDosYoutubeFacebookVietcong 2 OlympeVietcong 2 Alliance
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
.


salut,

j'ai pas tout lu le code, mais cette partie-là qui a très vite attiré mon attentionne me semble pas bonne :

Code:
   Position_:
               invoke        SetConsoleMode,[hIn],0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT
               invoke        ReadConsoleInput,[hIn],input,1,bin
               mov        edi,[input.dwMousePosition]
               mov        esi,edi
               shr        edi,16
               and        esi,COORD_MASK
               mov        eax,[input.dwButtonState]
               invoke        printf,mouseMask,esi,edi,eax
               


De toute évidence, elle doit retourner un résultat indéterminé.
oui parce que la structure input est la même pour tout événement input, or sans test préalable
sur le type d'événement, souris, clavier, fenêtre ou autre, on obtient forcément un résultat erroné,
sauf peut ête si on se contente d'utiliser exclusivement la souris, et encore, donc peut être remplacer
ENABLE_WINDOW_INPUT par ENABLE_EXTENDED_FLAGS (voir msdn)

Par ailleurs, ReadConsoleInput est un appel bloquant.

enfin voilà...


.



Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
temp a écrit:
.


salut,

j'ai pas tout lu le code, mais cette partie-là qui a très vite attiré mon attentionne me semble pas bonne :

Code:
   Position_:
               invoke        SetConsoleMode,[hIn],0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT
               invoke        ReadConsoleInput,[hIn],input,1,bin
               mov        edi,[input.dwMousePosition]
               mov        esi,edi
               shr        edi,16
               and        esi,COORD_MASK
               mov        eax,[input.dwButtonState]
               invoke        printf,mouseMask,esi,edi,eax


De toute évidence, elle doit retourner un résultat indéterminé.
oui parce que la structure input est la même pour tout événement input, or sans test préalable
sur le type d'événement, souris, clavier, fenêtre ou autre, on obtient forcément un résultat erroné,
sauf peut ête si on se contente d'utiliser exclusivement la souris, et encore, donc peut être remplacer
ENABLE_WINDOW_INPUT par ENABLE_EXTENDED_FLAGS (voir msdn)

Par ailleurs, ReadConsoleInput est un appel bloquant.


Ouaip, il manque un test en effet, le truc, c'est que /m rejette les fonctions qui ne sont pas un clic. Maintenant, je me souviens pas qu'on puisse obtenir des évenement sur la souris sans qu'elle bouge, donc voilà ...

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Salut !

J'avais pensé a mettre au point une nouvelle version de batbox qui utiliserait un pipe nomé... le principe serait d'écrire dans le pipe pour envoyer des commandes et de lire dans le pipe pour avoir le retour.

Par exemple:
Code:
@ECHO OFF

:: on met en route un espèce de serveur "batbox_plus"
batbox_plus

:: on crée une variable avec le nom du pipe
set bb=\\.\pipe\batbox_plus

:: on demande d'attendre une touche et on attend
echo /k >> %bb%
set /p touche= < %bb%

:: on demande un clic
echo /m >> %bb%
(set /p X=
set /p Y=
set /p Type= ) < %bb%

:: on ferme le serveur
echo /q >> %bb%


Après, c'est qu'une idée, et il faut faire un prototype ...

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
temp a écrit:
.


salut,

j'ai pas tout lu le code, mais cette partie-là qui a très vite attiré mon attentionne me semble pas bonne :

Code:
   Position_:
               invoke        SetConsoleMode,[hIn],0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT
               invoke        ReadConsoleInput,[hIn],input,1,bin
               mov        edi,[input.dwMousePosition]
               mov        esi,edi
               shr        edi,16
               and        esi,COORD_MASK
               mov        eax,[input.dwButtonState]
               invoke        printf,mouseMask,esi,edi,eax
               


De toute évidence, elle doit retourner un résultat indéterminé.
oui parce que la structure input est la même pour tout événement input, or sans test préalable
sur le type d'événement, souris, clavier, fenêtre ou autre, on obtient forcément un résultat erroné,
sauf peut ête si on se contente d'utiliser exclusivement la souris, et encore, donc peut être remplacer
ENABLE_WINDOW_INPUT par ENABLE_EXTENDED_FLAGS (voir msdn)

Par ailleurs, ReadConsoleInput est un appel bloquant.

enfin voilà...


.


euh pas sûr d'avoir tout compris mais c'est le meilleur résultat que j'ai eu après 2heures de test, sachant que je suis une quiche en ASM (j'ai 1 ou deux notions et c'est tout).
Par contre où as-tu trouvé la doc sur msdn ? à chaque fois que j'y vais c'est la galère. J'ai trouvé où est le C# et .Net, le C++, mais pas l'ASM !


Darkbatcher a écrit:
Ouaip, il manque un test en effet, le truc, c'est que /m rejette les fonctions qui ne sont pas un clic. Maintenant, je me souviens pas qu'on puisse obtenir des évenement sur la souris sans qu'elle bouge, donc voilà ...


de ce que j'ai pu trouver en doc, c'est en effet le cas ! si la souris ne bouge pas, et qu'aucun clic n'est reçu, alors cette fonction ne retourne rien.
J'ai vu aussi que selon les souris (et avec d'autre fonctions, mais c'est un peu le bazard dans ma tête) on peut recevoir les autres boutons (souris gamer par exemple) ce qui pourrait être sympa !

J'ai aussi lu qu'on pouvait, avec ConsoleInpt, lire depuis la console, ce qui pourrait être sympa pour faire des inputs dans les batchs !



Visiter le site web du posteur
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
.


taz8, y'a pas de doc en asm, juste sur les api


.



Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
même la doc sur les API je l'ai pas trouvée sur msdn !! heureusement il y a des site biens qui ont une doc plutôt poussée !



Visiter le site web du posteur
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
.

ben tu sais pour ça j'ai pas eu de mal, j'ai juste demandais à duckduckgo ou google ReadConsoleInput,
en générale la réponse msdn est dans le(s) premier(s) lien(s).



Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Ouaip tout est dans msdn Very Happy

Voilà le code (beta) de la prochaine version :


batbox.asm
Code:
; Batbox v2.5 - A graphical command for Windows batch
; Copyright (c) 2011, 2012, 2013, 2014, Romain GARBI (Darkbatcher)
; Copyright (c) 2014 Taz8
;
; All rights reserved.
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; * Redistributions of source code must retain the above copyright
;   notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
;   notice, this list of conditions and the following disclaimer in the
;   documentation and/or other materials provided with the distribution.
; * Neither the name of the name of Romain Garbi (Darkbatcher) nor the
;   names of its contributors may be used to endorse or promote products
;   derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY ROMAIN GARBI AND CONTRIBUTORS ``AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; Get support at :
; <http://batch.xoo.it/http://batch.xoo.it/t2243-Commande-Externe-Batbox-v1-0.htm>
;
; Report Bugs at :  <darkbatcher at dos9 dot org>
;
; USAGE:
; ------
;
;       BatBox [/d text] [/g X Y] [/m] [/k[_]] [/a char] [/w delay] [/f state]
;              [/o OffsetX OffsetY] [/h mode] [/p mode] [/y]
;
;       Tool for enhancing batch graphics
;
;       - /d text :     Display text at the console.
;       - /g X Y  :     Place console cursor's position at the coordinates
;                       (X,Y).
;       - /m      :     Get mouse user input. Blocking.
;       - /y      :     Get mouse user input. Non-blocking.
;       - /k      :     Get keyboard user input. Blocking.
;       - /k_     :     Get keyboard user input. Non-blocking.
;       - /w delay:     Wait for 'delay' milliseconds.
;       - /a char :     Display character associated to code char.
;       - /o X Y  :     Place console offset at coordinates (X,Y).
;       - /h mode :     Display or hide the console cursor.
;       - /p mode :     Changes console mode.
;       - /f state:     Changes to windowed or fullscreen mode. This mode is
;                       mode does nothing because, fullscreen mode is no more
;                       supported since Windows XP (3 version ago).

format PE CONSOLE 4.0

include 'win32a.inc'
include './batbox.inc'

; Code start
         invoke __getmainargs,\ ; get an array of command argument
                argc,\
                argv,\
                bin,\
                0,\
                bin

         invoke GetStdHandle,\ ; get handle on console output
                STD_OUTPUT_HANDLE

         mov    [hOut],eax

         invoke GetStdHandle,\ ; get handle on console input
                STD_INPUT_HANDLE

         mov    [hIn],eax

         argsLoop_:
                call near GetNextArg_
                inc       ebx ; Assume there is a slash here

                mov  byte dl,[ebx] ; approximate algorithm for getting
                or        dl,$20   ; uppercase value

                xor       edi,edi ; Setup registers before looping to
                mov       cx,jumpChar.size   ; find the right case

                LabelLoop_:
                        cmp   byte dl,[jumpChar+edi] ; loop to get the
                        je    near ChooseJump_       ; associated label
                        inc        edi
                        loopw      LabelLoop_
                        jmp   near argsLoop_

                                Color_:
                                       call    near GetNextNumber_

                                       invoke       SetConsoleTextAttribute,\ ; set the console attributes
                                                    [hOut],\
                                                    eax

                                       jmp     near argsLoop_

                                Key_:
                                       cmp     byte [ebx+1],'_'
                                       jnz     near KeyNext_

                                               invoke       _kbhit  ; if we use non - blocking version of /k
                                               test         eax,eax
                                               jz      near argsLoop_

                                       KeyNext_:
                                       invoke       getch   ; get the key that was hit
                                       cmp          eax,224
                                       jnz     near KeyEnd_

                                              invoke       getch ; get extended key
                                              add          eax,255

                                       KeyEnd_:
                                       invoke       exit,eax

                                Goto_:
                                        call    near GetNextNumber_  ; Add offsets
                                        add          eax,[dwXOffset]
                                        mov          [p.X],ax

                                        call    near GetNextNumber_  ; Add offsets
                                        add          eax,[dwYOffset]
                                        add          [p.Y],ax

                                        invoke       SetConsoleCursorPosition,\ ; set cursor position
                                                     [hOut],\
                                                     [p]

                                        jmp     near argsLoop_

                                Char_:
                                        call    near GetNextNumber_
                                        mov    dword [pBuf],0
                                        mov    dword [pBuf],eax

                                        invoke       printf,strMask,pBuf ; print a character

                                        jmp     near argsLoop_

                                Disp_:
                                        call    near GetNextArg_
                                        invoke       printf,strMask,ebx
                                        jmp     near argsLoop_

                                Mouse_:
                                        call    near GetMouseInput_ ; get input informations

                                        test         [input.dwEventFlags],EVENT_CLICK_MASK
                                        jnz     near Mouse_
                                        mov          eax,[input.dwButtonState]
                                        test         eax,eax
                                        jz      near Mouse_
                                        call    near PrintMouseCoord_

                                        jmp     near argsLoop_

                                Position_:
                                        call    near GetMouseInput_ ; get input informations

                                        call    near PrintMouseCoord_

                                        jmp     near argsLoop_


                                Wait_:
                                        call    near GetNextNumber_
                                        invoke       Sleep,eax
                                        jmp     near argsLoop_

                                Offset_:
                                        call    near GetNextNumber_
                                        mov          [dwXOffset], eax
                                        call    near GetNextNumber_
                                        mov          [dwYOffset], eax
                                        jmp     near argsLoop_

                                Hide_:
                                        invoke       GetConsoleCursorInfo,[hOut],cursorInfo
                                        call    near GetNextNumber_
                                        mov          [cursorInfo.bVisible],eax
                                        invoke       SetConsoleCursorInfo,[hOut],cursorInfo
                                        jmp     near argsLoop_

                                HideConsole_:

                                        call    near GetNextNumber_

                                        mov          edi,eax
                                        invoke       GetConsoleWindow
                                        invoke       ShowWindow,eax,edi
                                        jmp     near argsLoop_


                                Fullscreen_:
                                        call   near GetNextNumber_
                                        jmp    near argsLoop_

GetMouseInput_:
        invoke       SetConsoleMode,\ ;set the console mode
                     [hIn],\
                      0x0018 ;ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT

        invoke       ReadConsoleInput,\ ; get console input
                     [hIn],\
                     input,\
                     1,\     ; number of input to read
                     bin

        cmp          [bin],0
        jz      near GetMouseInput_
        cmp          [input.EventType],EVENT_TYPE_MOUSE
        jne     near GetMouseInput_
        ret

PrintMouseCoord_:
        mov          edi,[input.dwMousePosition]
        mov          esi,edi
        shr          edi,16
        and          esi,COORD_MASK
        add          eax,[input.dwEventFlags]

        cinvoke      printf,\
                     mouseMask,\
                     esi,\
                     edi,\
                     eax
        ret

GetNextNumber_:
        call     near GetNextArg_
        cinvoke       strtol,\
                      ebx,\
                      0,\
                      0
        ret

ChooseJump_:
        jmp [jumpTable+edi*4]

GetNextArg_:
        add     [argv],4
        mov     ebx,[argv]
        mov     ebx,[ebx]
        test    ebx,ebx
        jz      near EndCommand_
        ret

EndCommand_:
        invoke  exit,0

strMask      db '%s',0
mouseMask    db '%d:%d:%d',$0A,0

dwXOffset    dd 0
dwYOffset    dd 0
pBuf         db 0,0,0,0,0
jumpTable    dd Key_,Goto_,Char_,Color_,Disp_,Mouse_,Offset_,Wait_,Hide_,HideConsole_,Fullscreen_,Position_
jumpChar     db 'kgacdmowhpfy'

data import
 library msvcrt, 'MSVCRT.DLL',\
         kernel,'KERNEL32.DLL',\
         user, 'USER32.DLL'

 import user,\
        ShowWindow,'ShowWindow'

 import kernel,\
        GetStdHandle,'GetStdHandle',\
        SetConsoleMode,'SetConsoleMode',\
        SetConsoleTextAttribute,'SetConsoleTextAttribute',\
        SetConsoleCursorPosition,'SetConsoleCursorPosition',\
        ReadConsoleInput,'ReadConsoleInputA',\
        Sleep,'Sleep',\
        SetConsoleCursorInfo,'SetConsoleCursorInfo',\
        GetConsoleCursorInfo,'GetConsoleCursorInfo',\
        GetConsoleWindow,'GetConsoleWindow'


 import msvcrt,\
        printf, 'printf',\
        getch,'_getch',\
        __getmainargs,'__getmainargs',\
        exit,'exit',\
        _kbhit,'_kbhit',\
        strtol,'strtol'


end data

argc      dd ?
argv      dd ?
hIn       dd ?
hOut      dd ?
bin       dd ?
p         COORD ?

input       INPUT_RECORD ?
cursorInfo  CONSOLE_CURSOR_INFO ?


batbox.inc
Code:
; Copyright (c) 2014, Romain GARBI (Darkbatcher)
; All rights reserved.
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; * Redistributions of source code must retain the above copyright
;   notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
;   notice, this list of conditions and the following disclaimer in the
;   documentation and/or other materials provided with the distribution.
; * Neither the name of the name of Romain Garbi (Darkbatcher) nor the
;   names of its contributors may be used to endorse or promote products
;   derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;


; some structure used by winapi calls
struct COORD
     X dw ?
     Y dw ?
ends

struct INPUT_RECORD
     EventType dw ?
     nul dw ?
     dwMousePosition COORD ?
     dwButtonState dd ?
     dwControlKeyState dd ?
     dwEventFlags dd ?
ends

struct CONSOLE_CURSOR_INFO
     dwSize dd ?
     bVisible dd ?
ends

;some defs needed by winapi calls
SND_NODEFAULT=2
SND_FILENAME=$20000
SND_ASYNC=1

EVENT_TYPE_MOUSE=2
COORD_MASK=$0000FFFF

EVENT_CLICK_MASK=$FFFFFFFD ; ~MOUSE_DOUBLE_CLICK

ERROR_PIPE_CONNECTED=535

;redefine db to get the size constant
struc db [data]
{
        common
        . db data
        .size = $ - .
}






______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
temp a écrit:
ben tu sais pour ça j'ai pas eu de mal, j'ai juste demandais à duckduckgo ou google ReadConsoleInput



et mince alors !! dire que moi je rajoutais ASM ou assembly pour trouver les résultats ^^ (je met toujours le nom du langage en question dans mes recherches)



Visiter le site web du posteur
Répondre en citant
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 
Hello !

Nouvelle version disponible (version 3.0) ([troll]Pour faire comme Carlos Mort de Rire[/troll])

Les nouveautés sont :
  • La commande '/y' qui capte *tous* les évenements de la souris (un clic ou un scroll ou un déplacement de la souris).
  • La commande '/n' qui effectue un retour à la ligne en dessous de l'endroit du dernier goto.
  • Les offsets donnés par '/o' sont désormais permanents, c'est à dires qu'ils se transmettent aux instances suivantes de BatBox (via un fichier '.bb' dans le répertoire courant).
    Par exemple, dans ce script, l'offset se conserve :
    Code:
    batbox /o 1 1
    batbox /g 1 1 /d "test"

  • La suppression des commandes '/f' et '/s' (inutiles dans la plupart de cas) ('/f' ne pouvant marcher que sous XP)


Voili-voilou les amis, amusez vous bien Wink

@+




______________________________________________________
--
> Que pensez vous de l'ajout du repertoire point dans $PATH ?
Ma version de troll 18.0.32 beta 3 vient de me faire un core dump.
-+- SE in Guide du Linuxien Pervers : Bien développer son troll -+-

[Dos9]
Visiter le site web du posteur Skype
Message [Final] Batbox v3.0 / SpriteBox v1.1 - Darkbatcher 


Montrer les messages depuis:
Répondre au sujet Page 4 sur 5
Aller à la page: <  1, 2, 3, 4, 5  >
  



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