comprehensible ?
les APIs windows !
Sam 3 Mai 2008 - 13:51
Ce tutoriel n'est destiné qu'à des utilisateurs du ruby/ rgss confirmés, étant donné sa difficulté. (je ne veux décourager personne)
J'essaye de le faire le plus simple possible, peut etre au détriment de son exhaustivité...
Tout d'abord, qu'est-ce qu'une api windows ?
C'est un moyen très direct d'agir, de controler le systeme d'exploitation windows.
Et bien sur, cela nous interresse très fortement pour personnaliser notre jeu !
Windows (ouh qu'il est gentil) nous offre donc plusieurs types d'apis, presentes dans le dossier d'installation de l'OS windows, sous forme de dlls, Dynamic Link Library.
en voici les principales et les plus utilisées:
(pour windows 32 bits, pour XP, je ne connais pas encore très bien vista)
mais cette liste est loin d'etre complete, etant donné toutes les possibilités qu'offrent les apis.
passons maintenant a leur utilisation:
RGSS possède bel et bien une classe, nommée Win32API, gerant l'importation de dlls.
interressons nous a un code très court, permmetant d'emuler une combinaison de touches:
ceci: @clavier = Win32API.new(user32.dll', 'keybd_event', ['i', 'i', 'l'], 'v')
ne nous sert a rien pour l'instant, ce n'est qu'une variable, il faut l'appeler pour qu'elle agisse sur le systeme:
on fait donc ca:
ben il faut faire de l'anglois
donc: @clavier.call(0xA4, 0, 2)
0xA4: numero de la touche
0 : "code matériel d'analyse"
2; etat de la touche (pressée ou pas)
par contre d'une dll a l'autre, ou meme d'une fonction d'une dll a l'autre les arguments changent
exemples:
@readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
@findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
@desktop = Win32API.new("user32", "SystemParametersInfo", ['L','L','P','L'] , 'L')
... ...
mais comment trouver le nombre d'arguments et de parametres, ainsi que leur forme ?
il n'y a pas d'autres moyens que de faire une recherche sur le web
je vous conseille le site de microsoft: msdn2
et ce site très complet: allapis
voici un p'tit script d'exemple, que widow reconnaitra surement
necessite cette dll ici meme
car avec les apis, on peut meme importer ses propres dlls, placées au prealable dans son projet
voila, en espérant avoir été le plus clair possible !
commentaires:
les apis sont propres a windows... de nombreuses apis ont été rajoutées dans vista
les apis sont utilisables dans n'importe quel script
par contre faites attention, avant des les utiliser, regardez quels sont leurs effets, ce serait bete de passer 1/2 heure a remettre normal son clavier (c'est du vecu )
regardez bien les messages d'erreur, ils peuvent vous indiquer le probleme !
J'essaye de le faire le plus simple possible, peut etre au détriment de son exhaustivité...
Tout d'abord, qu'est-ce qu'une api windows ?
C'est un moyen très direct d'agir, de controler le systeme d'exploitation windows.
Et bien sur, cela nous interresse très fortement pour personnaliser notre jeu !
Windows (ouh qu'il est gentil) nous offre donc plusieurs types d'apis, presentes dans le dossier d'installation de l'OS windows, sous forme de dlls, Dynamic Link Library.
en voici les principales et les plus utilisées:
(pour windows 32 bits, pour XP, je ne connais pas encore très bien vista)
user32.dll interface utilisateur: etat du clavier, souris ...
kernel32.dll gere les periferiques: imprimante, et permet de modifier la base de registre...
shell32.dll reseau, redemarrer, quitter windows ...
gdi32.dll affichage: ecran...
comctl32.dll affiche des elements de controle: progressbar, barres d'outils...
comdlg32.dll boites de dialogue: manipulation de fichiers...
winmm.dll gestion multimedia, implantée a windows
mais cette liste est loin d'etre complete, etant donné toutes les possibilités qu'offrent les apis.
passons maintenant a leur utilisation:
RGSS possède bel et bien une classe, nommée Win32API, gerant l'importation de dlls.
interressons nous a un code très court, permmetant d'emuler une combinaison de touches:
- Code:
@clavier = Win32API.new(user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v')
- on assigne a une variable @ clavier toute l'api:
- on appelle la classe Win32API, avec comme arguments ceci: (user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v')
- user32.dll : nom de la dll
- keybd_event : fonction de la dll (en effet la dll user32 est comme une boite, regroupant de nombreuses fonctions comme keybd_event, SetCursorPos etc...)
- ['i', 'i', 'l', 'l'] ou %w(i i l l) (meme chose): plus compliqué: on crees un tableau comportant tous les parametres a entrer dans la focntion de la dll, on y reviendra...
- 'v', la sortie de l'api, on y reviendra aussi...
ceci: @clavier = Win32API.new(user32.dll', 'keybd_event', ['i', 'i', 'l'], 'v')
ne nous sert a rien pour l'instant, ce n'est qu'une variable, il faut l'appeler pour qu'elle agisse sur le systeme:
on fait donc ca:
- Code:
@clavier.call(0xA4, 0, 2)
ben il faut faire de l'anglois
- i = integer, c'est un entier, commme 1, 5, 123, 34453 ...
- l = long, c'est un nombre: 155,552, 542,458888, 1,00
il existe aussi: - p = texte, contiendra un string (c'est un pointeur...)
- v = void type, variable reservée a la sortie, donc au dernier argument de @clavier = Win32API.new(user32.dll', 'keybd_event', ['i', 'i', 'l'], 'v')
donc: @clavier.call(0xA4, 0, 2)
0xA4: numero de la touche
0 : "code matériel d'analyse"
2; etat de la touche (pressée ou pas)
par contre d'une dll a l'autre, ou meme d'une fonction d'une dll a l'autre les arguments changent
exemples:
@readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
@findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
@desktop = Win32API.new("user32", "SystemParametersInfo", ['L','L','P','L'] , 'L')
... ...
mais comment trouver le nombre d'arguments et de parametres, ainsi que leur forme ?
il n'y a pas d'autres moyens que de faire une recherche sur le web
je vous conseille le site de microsoft: msdn2
et ce site très complet: allapis
voici un p'tit script d'exemple, que widow reconnaitra surement
necessite cette dll ici meme
car avec les apis, on peut meme importer ses propres dlls, placées au prealable dans son projet
- Spoiler:
- Code:
module Fond_d_ecran_Berka
@screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), '' # dll de capture d'ecran
@readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l' # dll de lecture d'un fichier
@findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l' # dll pour trouver la position de la fenetre a traiter
@desktop = Win32API.new("user32", "SystemParametersInfo", ['L','L','P','L'] , 'L') # dll changeant le papier peint du bureau
module_function
def shot(file = "Screen", type = 0)
if type == 0
typname = ".bmp"
end
dir = ""
file_name = dir+file.to_s+typname.to_s
@screen.call(0,0,640,480,file_name,handel,type) # on appelle le handel (position de la fenetre) puis on capture le contenu de la fentre de jeu, on enrgistre l'image sous .\\Screen.bmp
@desktop.Call(20,0,".\\Screen.bmp",0) # on attibue l'image .\\Screen.bmp comme papier peint
print ("Retournez voir votre Bureau maintenant ! ")
end
def handel
game_name = "\0" * 256 #on creer un string de 256 caracteres qui contiendra le titre du projet
@readini.call('Game','Title','',game_name,255,".\\Game.ini") #on lit le fichier Game, a la ligne où est inscrit Title, on ecrit cette ligne dans la variable game_name
game_name.delete!("\0")
return @findwindow.call('RGSS Player',game_name)
end
end
- Spoiler:
- Code:
begin
MessageBox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')
choix = MessageBox.call(0,
"bonjour rmvx \n
voici un exemple des possibilites des apis\n
j'espere que vous avez compris mon tuto",
"berka", 49)
if choix == 1
MessageBox.call(0, "parfait", "berka", 0)
else
MessageBox.call(0, "on recommence...", "berka", 0)
end
end
voila, en espérant avoir été le plus clair possible !
commentaires:
les apis sont propres a windows... de nombreuses apis ont été rajoutées dans vista
les apis sont utilisables dans n'importe quel script
par contre faites attention, avant des les utiliser, regardez quels sont leurs effets, ce serait bete de passer 1/2 heure a remettre normal son clavier (c'est du vecu )
regardez bien les messages d'erreur, ils peuvent vous indiquer le probleme !
Re: les APIs windows !
Sam 3 Mai 2008 - 17:15
Voila ! Berka c'est le type qui en a plein le ciboulot, mais qui nous sort que des scripts inutiles ! xD
Non, j'déconne , une fois posé sur le papier c'est très intéressant ce ptit cours (c'est plus clair que sur la chatbox à 2h du mat....).
Merci Berka !
Non, j'déconne , une fois posé sur le papier c'est très intéressant ce ptit cours (c'est plus clair que sur la chatbox à 2h du mat....).
Merci Berka !
_________________
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
Re: les APIs windows !
Sam 3 Mai 2008 - 17:37
Yeah, tu roxx berka!
Pour une fois que je comprends quelque chose!
Pour une fois que je comprends quelque chose!
Re: les APIs windows !
Sam 3 Mai 2008 - 21:26
merci pour vos commentaires... bien sur, si vous avez des questions n'hesitez pas...
berka, qui continue son periple, en quete d'une utilisation utile de l'api...
je vais faire une liste des apis les plus utilisées et leur utilisation...
berka, qui continue son periple, en quete d'une utilisation utile de l'api...
je vais faire une liste des apis les plus utilisées et leur utilisation...
Re: les APIs windows !
Sam 3 Mai 2008 - 21:36
Ouais, juste une tite question, aurais tu un tableau avec les codes de chaque touches ?
Ce serais intéressant, merci d'avance.
Ce serais intéressant, merci d'avance.
_________________
Re: les APIs windows !
Sam 3 Mai 2008 - 21:47
je n'ai que ceci sous la main:
c'est de l'hexadecimal:
c'est de l'hexadecimal:
- Spoiler:
- Code:
0x08 # BACKSPACE key
0x09 # TAB key
0x0D # ENTER key
0x10 # SHIFT key
0x11 # ALTGR key
0x12 # ALT key
0x13 # PAUSE key
0x14 # CAPS LOCK key
0x1B # ESC key
0x20 # SPACEBAR
0x21 # PAGE UP key
0x22 # PAGE DOWN key
0x23 # END key
0x24 # HOME key
0x25 # LEFT ARROW key
0x26 # UP ARROW key
0x27 # RIGHT ARROW key
0x28 # DOWN ARROW key
0x29 # SELECT key
0x2A # PRINT key
0x2C # PRINT SCREEN key
0x2D # INS key
0x2E # DEL key
#--------------------------------------------------------------------------
0x30 # 0 key
0x31 # 1 key
0x32 # 2 key
0x33 # 3 key
0x34 # 4 key
0x35 # 5 key
0x36 # 6 key
0x37 # 7 key
0x38 # 8 key
0x39 # 9 key
#--------------------------------------------------------------------------
0x41 # A key
0x42 # B key
0x43 # C key
0x44 # D key
0x45 # E key
0x46 # F key
0x47 # G key
0x48 # H key
0x49 # I key
0x4A # J key
0x4B # K key
0x4C # L key
0x4D # M key
0x4E # N key
0x4F # O key
0x50 # P key
0x51 # Q key
0x52 # R key
0x53 # S key
0x54 # T key
0x55 # U key
0x56 # V key
0x57 # W key
0x58 # X key
0x59 # Y key
0x5A # Z key
#--------------------------------------------------------------------------
0x5B # Left Windows key (Microsoft Natural keyboard)
0x5C # Right Windows key (Natural keyboard)
0x5D # Applications key (Natural keyboard)
#--------------------------------------------------------------------------
0x60 # Numeric keypad 0 key
0x61 # Numeric keypad 1 key
0x62 # Numeric keypad 2 key
0x63 # Numeric keypad 3 key
0x64 # Numeric keypad 4 key
0x65 # Numeric keypad 5 key
0x66 # Numeric keypad 6 key
0x67 # Numeric keypad 7 key
0x68 # Numeric keypad 8 key
0x69 # Numeric keypad 9 key
0x6A # Multiply key (*)
0x6B # Add key (+)
0x6C # Separator key
0x6D # Subtract key (-)
0x6E # Decimal key
0x6F # Divide key (/)
#--------------------------------------------------------------------------
0x70 # F1 key
0x71 # F2 key
0x72 # F3 key
0x73 # F4 key
0x74 # F5 key
0x75 # F6 key
0x76 # F7 key
0x77 # F8 key
0x78 # F9 key
0x79 # F10 key
0x7A # F11 key
0x7B # F12 key
#--------------------------------------------------------------------------
0x90 # NUM LOCK key
0x91 # SCROLL LOCK key
#--------------------------------------------------------------------------
0xA0 # Left SHIFT key
0xA1 # Right SHIFT key
0xA2 # Left CONTROL key
0xA3 # Right CONTROL key
0xA4 # Left ALT key
0xA5 # Right ALT key
#-------------------------------------------------------------------------
0xBC # , key
0xBD # - key
0xBE # . Key
Re: les APIs windows !
Sam 3 Mai 2008 - 21:52
Mais c'est parfait !
Bon bah je vais essayer de bricoler un RMVX Guitar Hero en Ruby..... xD
Bon bah je vais essayer de bricoler un RMVX Guitar Hero en Ruby..... xD
_________________
Re: les APIs windows !
Sam 3 Mai 2008 - 22:00
eh ! ca peut etre sur-stylé, ca !
bonne chance, n'hesite pas a me demander quelques apis !
bonne chance, n'hesite pas a me demander quelques apis !
- freeziaStaffeux retraité
- Nombre de messages : 1734
Distinction : Elu membre de l'année 2009 haut la main.
Inventeur du Mapping Show.
caricaturatationeur de la comu'
[ Dudu']
Date d'inscription : 18/02/2008
Re: les APIs windows !
Sam 3 Mai 2008 - 22:03
Je crois qu'il disais ça pour plaisanter
Sinon t'as vraiment du te creusé la cervelle pour nous pondre un tuto aussi explicite .
Bien joué !
Sinon t'as vraiment du te creusé la cervelle pour nous pondre un tuto aussi explicite .
Bien joué !
Re: les APIs windows !
Sam 3 Mai 2008 - 23:54
liste d'applications api utiles et recurentes:
determiner la fenetre de jeu (ou handle)
afficher un message, via une petite fenetre:
son multimédia:
determiner la fenetre de jeu (ou handle)
- Spoiler:
- Code:
title = "\0" * 256
Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l').call("Game", "Title", "", title, 256, ".//Game.ini")
title.delete!("\0")
@handle= Win32API.new('user32', 'FindWindow', "p, p", 'i').call("RGSS Player", title)
très utile dès qu'on touche a la fenetre de jeu
afficher un message, via une petite fenetre:
- Spoiler:
- Code:
@fenetre = Win32API.new('user32', 'MessageBoxEx', %w(i p p i ), 'i')
@resultat = @fenetre.call(@handle, "message a afficher", "titre de la fenetre", 1)
le dernier chiffre: de 1 a 50: permet de modifier le type de la fenetre
if @resultat == 1 ou /2/3/... >>condition a executer lors de la validation du bouton 1/2/3/...
neccessite la presence du premier exemple
son multimédia:
- Spoiler:
- Code:
@lect = Win32API.new('winmm','mciSendStringA','%w(p,p,l,l)','V')
@lect.call("open \""+@lecture+"\" alias FILE style 1073741824 parent " + @handle.to_s,0,0,0)
@lect.call("play FILE",0,0,0)
ensuite:
@lect.call("close FILE",0,0,0) pour arreter
@lect.call("pause FILE",0,0,0) pour la pause
@lecture = "c:\Musique\tralala.mp3"
neccessite la presence du premier exemple
lourd a mettre en place
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum