class Win32API
Lun 7 Juil 2008 - 22:04
et voila...
j'en ai eu marre de devoir recreer constamment mes apis avant de les utiliser...
j'ai donc fait ce script, permettant (voir l'entete) de recupérer facilement des apis/fonctions pour scripter...
ce script s'adresse donc aux rubystes...
j'en ai eu marre de devoir recreer constamment mes apis avant de les utiliser...
j'ai donc fait ce script, permettant (voir l'entete) de recupérer facilement des apis/fonctions pour scripter...
ce script s'adresse donc aux rubystes...
- Code:
#===========================================
# Win32API v1.0
# par berka
#
# Torturons la fenetre de jeu...
#--------------------------------------------------------
# commandes:
# Win32API.handle > renvoie le handle du player
# Win32API.dim_player > renvoie les dimensions du player
# Win32API.dim_ecran > renvoie les dimensions de l'écran
# Win32API.barre_trans(128) > fixe l'opacité de la barre de titre a 128
# Win32API.sup_cadre > supprime le cadre bleu et la barre de titre
# Win32API.bouton_agrandir > autorise la maximisation du player
# Win32API.position(x,y,w,h) > fixe les dimensions, positions du player
# Win32API.ouvrir > effectue une ouverture de la fenetre de jeu
# Win32API.fermer > effectue une fermeture de la fenetre de jeu
# Win32API.update > met a jour la fenetre du player
# Win32API.rm_version > renvoie 'rmvx' ou 'rmxp' selon votre version
# Win32API.screenshot('nom')> capture d'ecran, sauvée sous ./nomX.png
# Win32API.avert('texte', 48) > boite de message avec icone (voir fin du script)
#===========================================
#===============================================================
#
# rpgmakervx.1fr1.net
#
#===============================================================
class Win32API < Object
def self.handle
title = "\0" * 256
self.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l').call("Game", "Title", "", title, 256, ".//Game.ini")
title.delete!("\0")
return self.new('user32', 'FindWindow', "p, p", 'i').call("RGSS Player", title)
end
def self.dim_player
rect = [0, 0, 0, 0].pack('l4')
self.new('user32', 'GetClientRect', %w(l p), 'i').call(self.handle, rect)
larg, haut = rect.unpack('l4')[2..3]
return larg, haut
end
def self.dim_ecran
l = self.new('user32', 'GetSystemMetrics', 'i', 'i').call(0)
h = self.new('user32', 'GetSystemMetrics', 'i', 'i').call(1)
return l, h
end
def self.barre_trans(trans = 100)
self.new("user32.dll", "SetWindowLong",['N','N','N'], 'N').call(handle,-20, self.new("user32.dll", "GetWindowLong",['N','N'], 'N').call(self.handle,-20) | 0x80000 )
self.new("user32.dll",'SetLayeredWindowAttributes','IIII','I').call(self.handle, 0xFF000000, trans, 3)
end
def self.sup_cadre
self.new("user32.dll", "SetWindowLong",['N','N','N'], 'N').call(self.handle,-16,0x00800000|0x10000000|0x00080000| 0x00040000)
end
def self.bouton_agrandir
self.new("user32.dll", "SetWindowLong",['N','N','N'], 'N').call(self.handle,-16,0x10000000 | 0x00C00000 | 0x00080000 | 0x00040000 | 0x00020000 | 0x00010000)
self.update
end
def self.position(x, y, w=544, h=416)
self.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i').call(handle, 0,x, y, w + 6, h + 32, 0)
end
def self.ouvrir
w = self.dim_player[0]
for i in 0...w
self.new("user32", "SetWindowRgn", "ILI", "I").call(self.handle, self.new("gdi32","CreateRectRgn","IIII","L").call(0,0,i+8,i+8), 1)
end
end
def self.fermer
w, h = self.dim_player
for i in 0...w; self.new("user32", "SetWindowRgn", "ILI", "I").call(self.handle,self.new("gdi32","CreateRectRgn","IIII","L").call(0,0,w-i-8,h-i-8),1);end
exit
end
def self.update
self.new("user32.dll", "SendMessage",['N','N','N','P'], 'N').call(self.handle,0x0047,0,"")
end
def self.screenshot(nom = 'screen') # requiert la dll screenshot.dll a placer dans votre projet
id = 1; id += 1 while FileTest.exist?(nom + id.to_s + '.png'); nom += id.to_s
self.new('screenshot', 'Screenshot', %w(l l l l p l l), '').call(0,0,self.dim_player[0], self.dim_player[1],".\\#{nom}.png",handle,2) rescue
self.avert("Librairie 'screenshot.dll' a placer dans votre projet \n Echec du screenshot", 48)
end
def self.rm_version #assez inutile...
if FileTest.exist?('./Data/scripts.rvdata'); return 'rmvx' ; end
if FileTest.exist?('./Data/scripts.rxdata'); return 'rmxp' ; end
end
def self.avert(texte, type = 48) # voir fin du script
self.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I').call(0,texte,'Attention:',type)
end
end
########################################
# Créer une fenetre MessageBox.
# 0 = Bouton 'OK'
# 1 = Boutons 'OK' 'Annuler'
# 2 = Boutons 'Annuler' 'Réessayer' 'Ignorer'
# 3 = Boutons 'Oui' 'Non' 'Annuler'
# 4 = Boutons 'Oui' 'Non'
# 5 = Boutons 'Réessayer' 'Annuler'
# 6 = Boutons 'Annuler' 'Réessayer' 'Continuer'
########################################
# 16 = Bouton 'OK' et icone erreur
# ... voir précédent
# 22 = Boutons 'Annuler' 'Réessayer' 'Continuer' et icone erreur
########################################
# 32 = Bouton 'OK' et icone question
# ... voir précédent
# 38 = Boutons 'Annuler' 'Réessayer' 'Continuer' et icone question
########################################
# 48 = Bouton 'OK' et icone attention
# ... voir précédent
# 54 = Boutons 'Annuler' 'Réessayer' 'Continuer' et icone attention
########################################
# 64 = Bouton 'OK' et icone info
# ... voir précédent
# 70 = Boutons 'Annuler' 'Réessayer' 'Continuer' et icone info
########################################
Re: class Win32API
Lun 7 Juil 2008 - 22:52
Bien vu , j'en suis pas encore à ce niveau, mais les commandes seront bien pratiques pour nos bidouilleurs x)
Pauvres fenêtres torturées......
Pauvres fenêtres torturées......
_________________
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum