Ruby : liste des Win32API
Résolu/Fermé
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
-
30 déc. 2008 à 16:17
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 - 12 févr. 2009 à 10:18
gagner79 Messages postés 261 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 20 décembre 2009 - 12 févr. 2009 à 10:18
Bonjour !
J'aimerais trouvé une liste des Win32API, comme par exemple :
Win32API.new("user32", "FindWindow", 'l, l', 'l')
Ca existe une liste de tout ça ?
Merci d'avance !
J'aimerais trouvé une liste des Win32API, comme par exemple :
Win32API.new("user32", "FindWindow", 'l, l', 'l')
Ca existe une liste de tout ça ?
Merci d'avance !
18 réponses
déja, il y a un argument de trop dans ton appel d'api
une liste d'apis... ca n'existe pas vraiment....
t'as le site de microsoft: msdn
mais il faut faire la conversion basic/c en ruby
les plus courantes que j'utilise:
@getprivatestring=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l')
@findwindow=Win32API.new('user32','FindWindow',%w(p p),'i')
@createwindow=Win32API.new("user32","CreateWindowEx",'lpplllllllll','l')
@showwindow=Win32API.new('user32','ShowWindow',%w(l l),'l')
@destroywindow=Win32API.new('user32','DestroyWindow','p','l')
@iswindow=Win32API.new('user32','IsWindow','p','l')
@getwindowtext=Win32API.new('user32','GetWindowText',%w(n p n ),'l')
@dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i')
@getwindowrect=Win32API.new('user32','GetWindowRect',%w(l p),'i')
@updatewindow=Win32API.new('user32','UpdateWindow','p','i')
@setwindowtext=Win32API.new('user32','SetWindowText',%w(p p),'i')
@state = Win32API.new("user32","GetKeyState",['i'],'i')
@key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
mais apres... t'en a plein d'autres... vu que celles sus-citées sont les officielles de ms... rien ne t'empeche de compiler ta dll toi meme et de l'importer dans ruby
une liste d'apis... ca n'existe pas vraiment....
t'as le site de microsoft: msdn
mais il faut faire la conversion basic/c en ruby
les plus courantes que j'utilise:
@getprivatestring=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l')
@findwindow=Win32API.new('user32','FindWindow',%w(p p),'i')
@createwindow=Win32API.new("user32","CreateWindowEx",'lpplllllllll','l')
@showwindow=Win32API.new('user32','ShowWindow',%w(l l),'l')
@destroywindow=Win32API.new('user32','DestroyWindow','p','l')
@iswindow=Win32API.new('user32','IsWindow','p','l')
@getwindowtext=Win32API.new('user32','GetWindowText',%w(n p n ),'l')
@dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i')
@getwindowrect=Win32API.new('user32','GetWindowRect',%w(l p),'i')
@updatewindow=Win32API.new('user32','UpdateWindow','p','i')
@setwindowtext=Win32API.new('user32','SetWindowText',%w(p p),'i')
@state = Win32API.new("user32","GetKeyState",['i'],'i')
@key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
mais apres... t'en a plein d'autres... vu que celles sus-citées sont les officielles de ms... rien ne t'empeche de compiler ta dll toi meme et de l'importer dans ruby
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
5 janv. 2009 à 16:30
5 janv. 2009 à 16:30
merci pour ta réponse, je n'y croyais plus ^^
pour l'argument de trop, j'ai mis Win32API.new("user32", "FindWindow", 'l, l', 'l') avec le 1er : "user32", le 2nd "FindWindow", le 3ème 'l, l' et le 4ème 'l', j'en ai donc mis 4, et c'est ce qui faut, nan ?
je veux insistaer sur le 3ème, qui équivaut à ['l', 'l'] ou encore 'll'
j'ai une petite question à te poser, il y a une différence entre "user32" et "kernel32" ?
@dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i') c'est pour savoir la résolution de l'écran ?
en fait je fais un jeu et je voulais une liste pour pouvoir :
- mettre la fenêtre (le jeu ici) en plein écran
- connaitre et changer la résolution de l'écran
- connaitre et changer la vitesse du curseur
- connaitre le répertoire des polices (car ça change en fonction du système d'exploiation)
et est-ce que tout ça ça marchera sur n'importe quel système d'exploitation ?
pour l'argument de trop, j'ai mis Win32API.new("user32", "FindWindow", 'l, l', 'l') avec le 1er : "user32", le 2nd "FindWindow", le 3ème 'l, l' et le 4ème 'l', j'en ai donc mis 4, et c'est ce qui faut, nan ?
je veux insistaer sur le 3ème, qui équivaut à ['l', 'l'] ou encore 'll'
j'ai une petite question à te poser, il y a une différence entre "user32" et "kernel32" ?
@dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i') c'est pour savoir la résolution de l'écran ?
en fait je fais un jeu et je voulais une liste pour pouvoir :
- mettre la fenêtre (le jeu ici) en plein écran
- connaitre et changer la résolution de l'écran
- connaitre et changer la vitesse du curseur
- connaitre le répertoire des polices (car ça change en fonction du système d'exploiation)
et est-ce que tout ça ça marchera sur n'importe quel système d'exploitation ?
désolé pour le retard
il suffit de regarder dans le dossier system32 de windows.
user32: gere l'interface utilisateur, les fenetres, les periphériques, les graphics
kernel32: gere, comme son nom l'indique, le noyau de windows, les variables, le registre, les programmes...
apres tu as
gdi32: les graphics, formes...
socket32: ben les sockets
...
Premier avertissement: les win32api, sont des libs de windows 32bits, donc elles ne sont pas intégrées dans les os linux, unix, mac... d'où le win-32-bits-api
ensuite, il n'y a que 4 arguments dans la classe Win32API:
Win32API.new("dll", "fonction", "entrées', "retour")
je suppose que tu utilises rmxp/vx ^^ parfait,
@dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i') ca peut retourner les dims de l'écran selon l'appel
pour mettre le jeu en plein écran:
pour connaitre la résolution de l'ecran:
pour ce qui est de modifier la resolution de window... il doit y avoir un moyen... j'ai pas encore cherché, mais je ne te le conseille pas, car en cas de plantage du jeu toute ta config est dégagée...
pour la vitesse de la souris, je ne sais pas
pour les polices:
voila!
berka
il suffit de regarder dans le dossier system32 de windows.
user32: gere l'interface utilisateur, les fenetres, les periphériques, les graphics
kernel32: gere, comme son nom l'indique, le noyau de windows, les variables, le registre, les programmes...
apres tu as
gdi32: les graphics, formes...
socket32: ben les sockets
...
Premier avertissement: les win32api, sont des libs de windows 32bits, donc elles ne sont pas intégrées dans les os linux, unix, mac... d'où le win-32-bits-api
ensuite, il n'y a que 4 arguments dans la classe Win32API:
Win32API.new("dll", "fonction", "entrées', "retour")
je suppose que tu utilises rmxp/vx ^^ parfait,
@dim_ecran=Win32API.new('user32','GetSystemMetrics','i','i') ca peut retourner les dims de l'écran selon l'appel
pour mettre le jeu en plein écran:
@full = Win32API.new('user32','keybd_event','%w(l,l,l,l)','') @full.call(18,0,0,0) @full.call(13,0,0,0) @full.call(18,0,2,0) @full.call(13,0,2,0)
pour connaitre la résolution de l'ecran:
l =Win32API.new('user32', 'GetSystemMetrics', 'i', 'i').call(0) h = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i').call(1) print("#{l}:#{h}")
pour ce qui est de modifier la resolution de window... il doit y avoir un moyen... j'ai pas encore cherché, mais je ne te le conseille pas, car en cas de plantage du jeu toute ta config est dégagée...
pour la vitesse de la souris, je ne sais pas
pour les polices:
print Dest=ENV['SystemRoot']+'\Fonts\\'
voila!
berka
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
16 janv. 2009 à 12:42
16 janv. 2009 à 12:42
Merci !!!!
C'est exactement ce que je voulais !
oui en effet j'utilise RMXP
Par contre j'ai un problème :
Je met la taille de la fenêtre du jeu en 800*600
Je met le jeu en plein écran et là la résolution se met en 640*480, pourquoi ?
Si je met dans le répertoire du jeu user32.dll et les autres, ça marchera sur les autres systèmes d'exploitations ?
Et c'est possible de changer l'image du curseur ?
C'est exactement ce que je voulais !
oui en effet j'utilise RMXP
Par contre j'ai un problème :
Je met la taille de la fenêtre du jeu en 800*600
Je met le jeu en plein écran et là la résolution se met en 640*480, pourquoi ?
Si je met dans le répertoire du jeu user32.dll et les autres, ça marchera sur les autres systèmes d'exploitations ?
Et c'est possible de changer l'image du curseur ?
pour le plein ecran... je ne sais pas trop, il faut que tu me donnes ta manip
les apis windows ne marchent que sur windows, vu qu'elles récuperent des fonction internes
changer l'icone du curseur:
la méthode la plus courante est de masquer le curseur, et d'afficher un sprite aux coord de la souris
les apis windows ne marchent que sur windows, vu qu'elles récuperent des fonction internes
changer l'icone du curseur:
la méthode la plus courante est de masquer le curseur, et d'afficher un sprite aux coord de la souris
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
20 janv. 2009 à 19:38
20 janv. 2009 à 19:38
voici mon script de plein écran :
mais après la fenêtre se remet en 640*480 (mais est en plein écran)
j'ai essayé d'inverser en mettant plein écran avant 800*600, mais ça donne pareil.
au fait à quoi correspondent les nombres dans full.call ?
pour le curseur de la souris pour le moment ce que je fais c'est que je le cache en le remplacant par une image, mais le problème, c'est que je perds les traces de la souris (c'est pas bien grave mais bon)
#On met la fenêtre en 800*600 : val = "\0"*256 gpps = Win32API.new('kernel32', 'GetPrivateProfileString', ['p', 'p', 'p', 'p', 'l', 'p'], 'l') gpps.call("Game", "Title", "", val, 256, "./Game.ini") val.delete!("\0") fw = Win32API.new('user32', 'FindWindow', 'p, p', 'i') win = fw.call("RGSS Player", val) swp = Win32API.new('user32', 'SetWindowPos', 'l, l, i, i, i, i, i', 'i') x = 0 y = 0 width = 800 height = 600 swp.call(win, -1, x, y, width+6, height+32, 0) #On met la fenetre en plein ecran : full = Win32API.new('user32','keybd_event','%w(l,l,l,l)','') full.call(18,0,0,0) full.call(13,0,0,0) full.call(18,0,2,0) full.call(13,0,2,0)
mais après la fenêtre se remet en 640*480 (mais est en plein écran)
j'ai essayé d'inverser en mettant plein écran avant 800*600, mais ça donne pareil.
au fait à quoi correspondent les nombres dans full.call ?
pour le curseur de la souris pour le moment ce que je fais c'est que je le cache en le remplacant par une image, mais le problème, c'est que je perds les traces de la souris (c'est pas bien grave mais bon)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
en gros, les nombres sont des valeurs de touches en décimal et l'api est un emulation du clavier, cela fait comme quand tu fais Alt+Entree, mais automatiquement.
Le probleme c'est que le rgss player change soi-meme sa resolution lors de sa mise en plein ecran... donc ton ancienne résolution de 800*600px est changée automatiquement.
pour ton curseur... t'as vraiment besoin d'afficher les traces de la souris ? je crois que t'es la premiere personne que j'ai rencontré qui l'utilise...
Le probleme c'est que le rgss player change soi-meme sa resolution lors de sa mise en plein ecran... donc ton ancienne résolution de 800*600px est changée automatiquement.
pour ton curseur... t'as vraiment besoin d'afficher les traces de la souris ? je crois que t'es la premiere personne que j'ai rencontré qui l'utilise...
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
24 janv. 2009 à 11:09
24 janv. 2009 à 11:09
pour les traces de la souris c'est pas super grave, mais pour le fait que la résolution se change en 640*480 toute seule, c'est un vrai problème, il n'y a vraiment aucune solution avec rpg maker ?
le problème c'est que je ne connait aucun autre logiciel qui a Graphics et Audio, en ruby en plus il doit pas en en avoir des masses, tu en connais ?
quoi qu'il en soit, tu seras dans les crédits de mon jeu ^^, merci
le problème c'est que je ne connait aucun autre logiciel qui a Graphics et Audio, en ruby en plus il doit pas en en avoir des masses, tu en connais ?
quoi qu'il en soit, tu seras dans les crédits de mon jeu ^^, merci
Tu peux coder ton jeu en ruby "pur", avec des librairies: Gosu pour la 2d, sinon t'as Rudl, rubygame, et des moteurs physiques comme Chipmunk
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
25 janv. 2009 à 11:50
25 janv. 2009 à 11:50
donc RPG Maker est irrécupérable ?
irrécupérable dans la mesure ou c'est un logiciel propriétaire non libre... sans code source on est toujours limité.
Disons que RpgMaker est une forme de plus en plus réduite de ruby... ils on bridé le kernel, désactivant jusqu'a la Kernel#require qui permettant l'import de fichiers rb et so...
Tu n'auras jamais de "logiciel" fournissant des modules Audio et Graphics... il va falloir que tu te fasses ton propre moteur de jeu en ruby... je te conseille Gosu qui est très simple et qui ressemble beaucoup a rgss...
Disons que RpgMaker est une forme de plus en plus réduite de ruby... ils on bridé le kernel, désactivant jusqu'a la Kernel#require qui permettant l'import de fichiers rb et so...
Tu n'auras jamais de "logiciel" fournissant des modules Audio et Graphics... il va falloir que tu te fasses ton propre moteur de jeu en ruby... je te conseille Gosu qui est très simple et qui ressemble beaucoup a rgss...
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
28 janv. 2009 à 18:23
28 janv. 2009 à 18:23
ok bah je vais essayer de voir avec gosu alors...
sinon je voulais savoir :
j'ai trouvé un truc pour mettre mon jeu dans le system-tray (c'est ce que j'appelle la fonction "hiberner")
cepandant j'ai un problème :
je dois créer une nouvelle fenêtre pour mettre un "trayicon". Mais le problème c'est que je ne peux pas cacher mon jeu, mais que la nouvelle fenêtre, existe t-il un API pour cacher une fenêtre ou une solution pour mettre un traicon sans créer une nouvelle fenêtre ?
sinon je voulais savoir :
j'ai trouvé un truc pour mettre mon jeu dans le system-tray (c'est ce que j'appelle la fonction "hiberner")
cepandant j'ai un problème :
je dois créer une nouvelle fenêtre pour mettre un "trayicon". Mais le problème c'est que je ne peux pas cacher mon jeu, mais que la nouvelle fenêtre, existe t-il un API pour cacher une fenêtre ou une solution pour mettre un traicon sans créer une nouvelle fenêtre ?
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
31 janv. 2009 à 10:08
31 janv. 2009 à 10:08
je l'ai déjà celui-là, ça crée une nouvelle fenêtre, et je ne peux pas cacher mon jeu.
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
2 févr. 2009 à 09:44
2 févr. 2009 à 09:44
je voulais savoir, avec
@showwindow=Win32API.new('user32','ShowWindow',%w(l l),'l')
je pourrais pas cacher la fenêtre de mon jeu ?
@showwindow=Win32API.new('user32','ShowWindow',%w(l l),'l')
je pourrais pas cacher la fenêtre de mon jeu ?
en théorie oui:
tu récupère le handle de la fenetre, puis
Win32API.new("user32.dll","ShowWindow","ll","").call(handle, mode)
avec mode=
SW_FORCEMINIMIZE=11
SW_HIDE=0
SW_MAXIMIZE=3
SW_MINIMIZE=6
SW_RESTORE=9
SW_SHOW=5
SW_SHOWDEFAULT=10
SW_SHOWMAXIMIZED=3
SW_SHOWMINIMIZED=2
SW_SHOWMINNOACTIVE=7
SW_SHOWNOACTIVATE=4
SW_SHOWNORMAL=1
tu récupère le handle de la fenetre, puis
Win32API.new("user32.dll","ShowWindow","ll","").call(handle, mode)
avec mode=
SW_FORCEMINIMIZE=11
SW_HIDE=0
SW_MAXIMIZE=3
SW_MINIMIZE=6
SW_RESTORE=9
SW_SHOW=5
SW_SHOWDEFAULT=10
SW_SHOWMAXIMIZED=3
SW_SHOWMINIMIZED=2
SW_SHOWMINNOACTIVE=7
SW_SHOWNOACTIVATE=4
SW_SHOWNORMAL=1
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
4 févr. 2009 à 15:34
4 févr. 2009 à 15:34
j'ai réussi à cacher la fenêtre mais j'ai un autre problème :
pour mettre une icône dans le systray j'ai besoin des fichiers "vrtray" et "vrcontrol", seulement ces 2 fichiers requièrent eux-mêmes d'autres fichiers qui requièrent eux aussi des fichiers...
Quels fichiers dois-je prendre pour avoir juste ce que je veux ?
pour mettre une icône dans le systray j'ai besoin des fichiers "vrtray" et "vrcontrol", seulement ces 2 fichiers requièrent eux-mêmes d'autres fichiers qui requièrent eux aussi des fichiers...
Quels fichiers dois-je prendre pour avoir juste ce que je veux ?
je ne sais pas la façon dont tu procèdes... donc comment veux tu que je t'aide ?
d'apres ce que je crois avoir compris, tu utilises le code suivant:
le probleme, c'est que la fonction require a été supprimée (ou plutot dé-définie) sous rmvx...
sous rmxp, cela peut marcher, mais si tu compte dffuser ton jeu, il faudra que le joueur installe ruby.
donc impossible d'appeler ces fichiers ruby !
je te propose une autre solution, codée à l'arrache. Il faut encore trouver le moyen de retrouver la fenetre en cliquant de le systemtray:
d'apres ce que je crois avoir compris, tu utilises le code suivant:
require 'vr/vrcontrol' require 'vr/vrtray' module TrayHandler include VRTrayiconFeasible include VRMenuUseable LoadIcon = Win32API.new("user32","LoadIcon","II","I") QUESTION_ICON= LoadIcon.call(0,32514) EXCLAMATION_ICON = LoadIcon.call(0,32515) def construct self.caption="Good Stuff" # trayicon menu @traymenu = newPopupMenu @traymenu.set([ ["Do Stuff","stuff"],["Update Me","update"],["Exit","exit"] ]) create_trayicon(EXCLAMATION_ICON,"installr",0) end def stuff_clicked puts "Stuff done!" end def update_clicked modify_trayicon(QUESTION_ICON,"modified",0) end def self_traylbuttondown(iconid) end def self_trayrbuttonup(iconid) showPopup @traymenu end def exit_clicked delete_trayicon(0) exit end end frm = VRLocalScreen.newform frm.extend TrayHandler frm.create VRLocalScreen.messageloop
le probleme, c'est que la fonction require a été supprimée (ou plutot dé-définie) sous rmvx...
sous rmxp, cela peut marcher, mais si tu compte dffuser ton jeu, il faudra que le joueur installe ruby.
donc impossible d'appeler ces fichiers ruby !
je te propose une autre solution, codée à l'arrache. Il faut encore trouver le moyen de retrouver la fenetre en cliquant de le systemtray:
#------------------------------------------------------------------------------ # par berka: compatible rgss 1&2 #------------------------------------------------------------------------------ def handle @jeu="\0"*256 ini=Win32API.new('kernel32','GetPrivateProfileStringA','pppplp', 'l') ini.call('Game','Title','',@jeu,255,".\\Game.ini") @jeu.delete!("\0") return Win32API.new('user32','FindWindowEx','llpp','l').call(0,0,nil,@jeu) end ExtractIcon=Win32API.new('shell32','ExtractIcon','lp','l') Shell_NotifyIcon=Win32API.new('shell32','Shell_NotifyIconA','lp','i') args=[88,handle,'ruby'.hash,2|4,0,ExtractIcon.call(0,'Game.exe')].pack('l2I3l') args<<@jeu<<"\0"*(64-@jeu.size) Shell_NotifyIcon.call(0,args) #~ Win32API.new('user32','ShowWindow','l','l').call(handle)
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
5 févr. 2009 à 16:38
5 févr. 2009 à 16:38
ouais merci c'est pas mal.
par contre je suis juste obligé d'arrêter le processus moi-même, vu que la fenêtre disparaît.
à quoi sert la vague ici ? : "~ Win32API.new('user32','ShowWindow','l','l').call(handle)"
ça serait bien de trouver le truc pour cliquer sur le trayicon pour que ça revienne.
En ce qui concerne la liste des Win32API, j'ai fait un petit programme pour lire tous les fichiers de ruby et me donner les Win32API qu'ils trouvaient. Voici la liste, ça pourra peut-être te servir :
https://app.box.com/s/qqc3agu62l
par contre je suis juste obligé d'arrêter le processus moi-même, vu que la fenêtre disparaît.
à quoi sert la vague ici ? : "~ Win32API.new('user32','ShowWindow','l','l').call(handle)"
ça serait bien de trouver le truc pour cliquer sur le trayicon pour que ça revienne.
En ce qui concerne la liste des Win32API, j'ai fait un petit programme pour lire tous les fichiers de ruby et me donner les Win32API qu'ils trouvaient. Voici la liste, ça pourra peut-être te servir :
https://app.box.com/s/qqc3agu62l
merci pour le fichier, ca va m'aider, je puise mes idées de scripts dans les apis !
a propos du #~ c'est juste un commentaire automatique d'une ligne sous rmvx, avec CTRL+Q
amicalement, berka
a propos du #~ c'est juste un commentaire automatique d'une ligne sous rmvx, avec CTRL+Q
amicalement, berka
gagner79
Messages postés
261
Date d'inscription
mercredi 28 mai 2008
Statut
Membre
Dernière intervention
20 décembre 2009
40
12 févr. 2009 à 10:18
12 févr. 2009 à 10:18
ok bah merci pour tout !
16 janv. 2009 à 15:10
Bein sur que si, il y a évidemment la liste alphabétique ou par thèmes dans MSDN !
16 janv. 2009 à 18:11