Partagez
Aller en bas
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

class Win32API Empty class Win32API

le 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...

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)
#===========================================
#===============================================================
#                         
#                www.rpgmakervx-fr.com                                         
#     
#===============================================================

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
########################################
Widowan
Widowan
Fondateur
Nombre de messages : 1435
Age : 37
Localisation : France
Distinction : Sergent
Tyran professionnel
Date d'inscription : 15/12/2007
https://www.rpgmakervx-fr.com

class Win32API Empty Re: class Win32API

le 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...... Sad

_________________
"Si le monde appartiens à ceux qui se lèvent tôt, et si le royaume des cieux est destiné aux simples d'esprit, alors j'essaye juste de squatter un peu..."
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum