Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] à propos d'insertbmp.exe
Auteur Message
Répondre en citant
Message [R] à propos d'insertbmp.exe 
Bonjour,
je travaille sur Batch United OS et j'ai sélectionné dans le programme :

Je me suis dit :
Citation:
Waaaath? à la base,c'est impossible de mettre des images dans une console.Comment est-il possible que une simulation comme celle-ci peut être aussi réaliste

En effet,j'avais appris des choses sur ce forum:
Citation:
Il est impossible de mettre une image dans une console ,sinon,c'est une simulation.


Mais ce qui m'intrigue ,c'est :
    en quel langage est fait réellement cette commande externe.
    Comment ce truc à été créé ?
    On dirais que ce n'est pas du tout une simulation,quant on regarde dans la tasklist,il n'y a pas de processus de "insertbmp".
    Tout est vraiment dans la console,on sélectionne,on peut cliquer dessus et batbox /m marche,on peut metre du texte dessus,quant on déplace la fenêtre,c'est pas aussi lent qu'affpng
    Enfin bref,je suis paumé,quelqu'un peu vraiment m’expliquer comment une telle commande externe peut exister.


PS : j'ai testé Batch Untied OS 5.1 que je viens de mettre en ligne,il est possible que il y ait un gros bug dans le recovery.info à revoir.Je me prépare pour l'alpha 5.2 pour corriger ce gros bug.



Dernière édition par logan T le Dim 4 Sep 2016 - 18:40; édité 1 fois

______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] à propos d'insertbmp.exe 
Bonne question.

Citation:
en quel langage est fait réellement cette commande externe.
La commande est écrite en C (preuve plus bas grâce aux appels sur les libs standard C).
Citation:
Tout est vraiment dans la console,on sélectionne,on peut cliquer dessus et batbox /m marche,on peut metre du texte dessus,quant on déplace la fenêtre,c'est pas aussi lent qu'affpng
affpng est écrit en AutoIt, qui est interprété (même dans un .exe), il ne peut donc pas rivaliser avec du C.

La commande n'a rien à voir avec le dos, le dos passe par le framebuffer, ce qui est uniquement possible sur windows au niveau du noyau (drivers).
Or, on passe par un périphérique GDI généré avec une fenêtre, en gros, on écrit sur les pixels de conhost.

Avec le .exe, j'ai récupérer plusieurs informations.


Déjà, j'ai trouvé des informations (très) utiles : 
Code:
FILEVERSION    1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK  0x3F
FILEFLAGS      0x0
FILEOS         VOS_NT_WINDOWS32
FILETYPE       VFT_APP
FILESUBTYPE    0x0
{
  BLOCK "StringFileInfo"
  {
    BLOCK "040904E4"
    {
      VALUE "Build",             "September 2014"
      VALUE "Comments",          "Insert Picture Into Console Window"
      VALUE "Developer",         "Steffen Illhardt"
      VALUE "FileDescription",   "Insert Picture Into Console Window"
      VALUE "FileVersion",       "1.0.0.0"
      VALUE "InternalName",      "INSERTBMP"
      VALUE "LegalCopyright",    "(C) 2014 Steffen Illhardt"
      VALUE "OriginalFilename",  "insertbmp.exe"
      VALUE "ProductName",       "INSERTBMP"
      VALUE "ProductVersion",    "1.0.0.0"
    }
  }
  BLOCK "VarFileInfo"
  {
    VALUE "Translation", 0x409, 1252
  }
}

Cela nous dis que la commande à été faite par Steffen Illhardt en Septembre 2014.

Mais j'ai trouvé d'autres informations dans les sections de l'executable.

Compilé avec : GNU/GCC 4.8.3 (Mingw-w64)

Dans son fonctionnement, il importe une image avec GDI, et l'insère directement dans le périphérique de la console (le buffer en gros) par BitBlt.
Pour récupérer le périphérique du buffer de la console, il utilise GetDC avec le HWND de conhost.
C'est le fonctionnement bref de la commande, il y a beaucoup de contournements pour par exemple rendre la surface de cmd dessinable.

J'ai les fonctions et .dll utilisées dans le programme si tu veux :
Code:
BitBlt
CreateCompatibleDC
DeleteObject
GetObjectW
SelectObject
DeleteCriticalSection
EnterCriticalSection
GetConsoleWindow
GetCurrentProcess
GetCurrentProcessId
GetCurrentThreadId
GetLastError
GetModuleHandleA
GetProcAddress
GetStartupInfoA
GetSystemTimeAsFileTime
GetTickCount
InitializeCriticalSection
LeaveCriticalSection
QueryPerformanceCounter
SetUnhandledExceptionFilter
Sleep
TerminateProcess
TlsGetValue
UnhandledExceptionFilter
VirtualProtect
VirtualQuery
__dllonexit
__getmainargs
__initenv
__lconv_init
__set_app_type
__setusermatherr
__wgetmainargs
_acmdln
_amsg_exit
_cexit
_errno
_fmode
_initterm
_iob
_lock
_onexit
_unlock
calloc
exit
fprintf
free
fwrite
malloc
memcpy
signal
strlen
strncmp
abort
vfprintf
wcscat
wcscpy
wcslen
wcstol
wprintf
_wcsnicmp
CopyImage
GetDC
LoadImageW
ReleaseDC
GDI32.dll
KERNEL32.dll
msvcrt.dll
USER32.dll
Aussi les chaines de caractères :
Code:
libgcj-13.dll
_Jv_RegisterClasses
Unknown error
_matherr(): %s in %s(%g, %g)  (retval=%g)
Argument domain error (DOMAIN)
Argument singularity (SIGN)
Overflow range error (OVERFLOW)
The result is too small to be represented (UNDERFLOW)
Total loss of significance (TLOSS)
Partial loss of significance (PLOSS)
Mingw-w64 runtime failure:
Address %p has no image-section
  VirtualQuery failed for %d bytes at address %p
  VirtualProtect failed with code 0x%x
  Unknown pseudo relocation protocol version %d.
  Unknown pseudo relocation bit size %d.
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [R] à propos d'insertbmp.exe 
TSnake41 a écrit:
Bonne question.

Citation:
en quel langage est fait réellement cette commande externe.
La commande est écrite en C (preuve plus bas grâce aux appels sur les libs standard C).
Citation:
Tout est vraiment dans la console,on sélectionne,on peut cliquer dessus et batbox /m marche,on peut metre du texte dessus,quant on déplace la fenêtre,c'est pas aussi lent qu'affpng
affpng est écrit en AutoIt, qui est interprété (même dans un .exe), il ne peut donc pas rivaliser avec du C.

La commande n'a rien à voir avec le dos, le dos passe par le framebuffer, ce qui est uniquement possible sur windows au niveau du noyau (drivers).
Or, on passe par un périphérique GDI généré avec une fenêtre, en gros, on écrit sur les pixels de conhost.

Avec le .exe, j'ai récupérer plusieurs informations.


Déjà, j'ai trouvé des informations (très) utiles : 
Code:
FILEVERSION    1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK  0x3F
FILEFLAGS      0x0
FILEOS         VOS_NT_WINDOWS32
FILETYPE       VFT_APP
FILESUBTYPE    0x0
{
  BLOCK "StringFileInfo"
  {
    BLOCK "040904E4"
    {
      VALUE "Build",             "September 2014"
      VALUE "Comments",          "Insert Picture Into Console Window"
      VALUE "Developer",         "Steffen Illhardt"
      VALUE "FileDescription",   "Insert Picture Into Console Window"
      VALUE "FileVersion",       "1.0.0.0"
      VALUE "InternalName",      "INSERTBMP"
      VALUE "LegalCopyright",    "(C) 2014 Steffen Illhardt"
      VALUE "OriginalFilename",  "insertbmp.exe"
      VALUE "ProductName",       "INSERTBMP"
      VALUE "ProductVersion",    "1.0.0.0"
    }
  }
  BLOCK "VarFileInfo"
  {
    VALUE "Translation", 0x409, 1252
  }
}

Cela nous dis que la commande à été faite par Steffen Illhardt en Septembre 2014.

Mais j'ai trouvé d'autres informations dans les sections de l'executable.

Compilé avec : GNU/GCC 4.8.3 (Mingw-w64)

Dans son fonctionnement, il importe une image avec GDI, et l'insère directement dans le périphérique de la console (le buffer en gros) par BitBlt.
Pour récupérer le périphérique du buffer de la console, il utilise GetDC avec le HWND de conhost.
C'est le fonctionnement bref de la commande, il y a beaucoup de contournements pour par exemple rendre la surface de cmd dessinable.

J'ai les fonctions et .dll utilisées dans le programme si tu veux :
Code:
BitBlt
CreateCompatibleDC
DeleteObject
GetObjectW
SelectObject
DeleteCriticalSection
EnterCriticalSection
GetConsoleWindow
GetCurrentProcess
GetCurrentProcessId
GetCurrentThreadId
GetLastError
GetModuleHandleA
GetProcAddress
GetStartupInfoA
GetSystemTimeAsFileTime
GetTickCount
InitializeCriticalSection
LeaveCriticalSection
QueryPerformanceCounter
SetUnhandledExceptionFilter
Sleep
TerminateProcess
TlsGetValue
UnhandledExceptionFilter
VirtualProtect
VirtualQuery
__dllonexit
__getmainargs
__initenv
__lconv_init
__set_app_type
__setusermatherr
__wgetmainargs
_acmdln
_amsg_exit
_cexit
_errno
_fmode
_initterm
_iob
_lock
_onexit
_unlock
calloc
exit
fprintf
free
fwrite
malloc
memcpy
signal
strlen
strncmp
abort
vfprintf
wcscat
wcscpy
wcslen
wcstol
wprintf
_wcsnicmp
CopyImage
GetDC
LoadImageW
ReleaseDC
GDI32.dll
KERNEL32.dll
msvcrt.dll
USER32.dll
Aussi les chaines de caractères :
Code:
libgcj-13.dll
_Jv_RegisterClasses
Unknown error
_matherr(): %s in %s(%g, %g)  (retval=%g)
Argument domain error (DOMAIN)
Argument singularity (SIGN)
Overflow range error (OVERFLOW)
The result is too small to be represented (UNDERFLOW)
Total loss of significance (TLOSS)
Partial loss of significance (PLOSS)
Mingw-w64 runtime failure:
Address %p has no image-section
  VirtualQuery failed for %d bytes at address %p
  VirtualProtect failed with code 0x%x
  Unknown pseudo relocation protocol version %d.
  Unknown pseudo relocation bit size %d.
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3
GCC: (GNU) 4.8.3


Bonjour,
merci pour ta réponse très complête.J'e n'ai compris que 50% mais assez pour savoir comment ça marchais.
Encore merci pour cette réponse,le sujet est mis en [R]




______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Message [R] à propos d'insertbmp.exe 


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