AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

Partagez
 

 Classe Win32API

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Classe Win32API   Classe Win32API Icon_minitimeJeu 16 Oct 2008 - 19:54

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...
certains ont du apercevoir ce script autre part ^^

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)
#===========================================

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
########################################
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
jebbou
Doyen
Doyen
jebbou


Masculin Age : 46
Inscrit le : 20/08/2008
Messages : 2485

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeJeu 16 Oct 2008 - 20:50

Salut Berka,

Juste pour être sur, le "player" c'est bien la fenêtre de jeu?

Jebbou
Revenir en haut Aller en bas
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeJeu 16 Oct 2008 - 20:55

ouais, le rgss player
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 42
Inscrit le : 26/05/2008
Messages : 2360

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeJeu 16 Oct 2008 - 23:47

Salut berka. En effet, cette classe évite de devoir recreer un API chaque fois. bonne idée. Je vais adapter pour mon nouveau module. Merci beaucoup du partage. Je te donne les points.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeVen 17 Oct 2008 - 15:15

pas de recreer une api, mais de ne pas chercher pendant des heures des fonctions a mettre en arguments ^^

Si t'as des rajouts et idées a faire, n'hesite pas !

ps: merci pour les points !
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 42
Inscrit le : 26/05/2008
Messages : 2360

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeVen 17 Oct 2008 - 17:26

Par recréer, je parlais plus de devoir faire un WIN32API.new systématiquement. Pour les points, c'est naturel. Disons que certain de tes scripts ont été très instructifs Wink.

Pour ce qui est des ajouts, je verrai bien au fur et à mesure que j'aurai besoin d'API particulier. Je ne vois pas encore ce que j'aurai potentiellement besoin, mais t'inquiète, je te tiendrai au courrant. Disons que pour le moment, c'est plutôt complet. Il ne manquerait qu'un prompt box et on aurait la total. (par prompt box, j'entends text edit, menu déroulant, slider bar et autre qui permettent de donner des valeurs à une variable.) Je travaille actuellement sur une prompt box, mais les résultats sont, hmmm comment dire poliement, limité Razz. Enfin. Avec un peu de persévérance, je devrais finir par y ariver.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeVen 17 Oct 2008 - 17:59

je m'etais intéressé à une api -- je ne me rappelle plus du nom de la dll, ni de sa fonction -- qui permettait l'apparition d'une fenetre ouvrir un fichier... mais c'etait pas vraiment utile ^^
Ce qui serait bien c'est de trouver le moyen de faire une barre de menu en haut du player ^^
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 42
Inscrit le : 26/05/2008
Messages : 2360

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeSam 18 Oct 2008 - 12:21

Quand tu dis en haut du player, tu parle vraiment du sprite du joueur ou en haut de la fenêtre de jeu? Autre question, un menu en permanance ou seulement à l'appel du menu. Personnellement, j'opterais d'avantage pour la 2e pour 2 raison. Premièrement, on aurait pas besoin de surcharger ou modifier le script des menus pour ce qui est du "moment" d'apparission, et deuxièmement, pour ne pas faire bruler les écran ACL (car une image fixe peut endommager l'écran). À ce moment, il me semble que la tâche deviens assez simple. L'utilisation de la scene menu devient ton menu et tu crée des selectable window pour chaque sous menu que tu affiche sur l'exécution et tu gère le gauche droite pour changer de fenêtre au lieu de changer d'élément de menu. L'autre possibilité serait de gerrer plutot une matrice de fenêtre de sélection en faisant une gestion de clavier plus complète. À toi de voir ce qui est plus avantageux ou plus simple à réaliser.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeSam 18 Oct 2008 - 12:45

- je parle du rgss player
- non, une image fixe n'endommage que les ecrans cathodiques
- Je pensais utiliser une api permettant d'afficher un menu comme le sdk windows: Fichier editer outils...
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 42
Inscrit le : 26/05/2008
Messages : 2360

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeLun 20 Oct 2008 - 14:14

Non, pas que les écran cathodique. Les écrans plasma brulent et les écrans à diodes change de couleur. Les écrans cathodique crée des images fantôme. Bref, c'est mauvais pour toutes les écrans. Je l'ai vu en pratique. Un ordi avec un écran ACL (diode) qui a pris un teint rose verdâtre à cause de l'affichage trop prolonger du bureau sans écran de veille ni de mode «éteindre l'écran après X min». J'avais un collègue qui avait une télé plasma et que l'endroit où son HUD s'affichait (mais là, il devait jouer vraiment beaucoup trop à son jeu) était devenu très sombre ce qui parraissait d'avantage quand il ne jouait pas. Et pour les écran à canon cathodique, ben je crois que vu que tu étais au courrant, tu as dû déjà le vérifier. Une image fixe s'impreigne dans l'écran. Je tiens également à te rappeler que même si en france vous ne voyez pas des trucs régulièrement, il existe d'autre pays dans le monde. Les écrans à cathode existe encore un peu partout. La longueur d'onde utiliser pour l'affichage est différente d'un pays à l'autre, de même que la tension électrique. (110-120V/60Hz par défaut en amérique du nord).

Pour ce qui est du menu, je viens de comprendre ce que tu veux. Mais je pense que toi et moi, on se frotte au même problème. Les API ne sont pas une GUI mais des utilisateurs de GUI. Va falloir que tu te rabbatte comme moi à QTRuby pour faire quelque chose qui a de l'allure. Sinon, va falloir faire du reverse ingeneering et décompiler le truc pour ajouter un menu puis le recompiler.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeLun 20 Oct 2008 - 17:12

compris, mais pas franchement convaincu pour les ecrans ^^

pour ce qui est du menu, il existe toute un gamme d'apis permettant son affichage/creation

il faut que je me renseigne un peu plus...

edit: pour la lib user32:

AppendMenu
CheckMenuItem
CheckMenuRadioItem
CreateMenu
CreatePopupMenu
DeleteMenu
DestroyMenu
DrawMenuBar
EnableMenuItem
EndMenu
GetMenu
GetMenuBarInfo
GetMenuCheckMarkDimensions
GetMenuDefaultItem
GetMenuInfo
GetMenuItemCount
GetMenuItemID
GetMenuItemInfo
GetMenuItemRect
GetMenuState
GetMenuString
GetSubMenu
GetSystemMenu
HiliteMenuItem
InsertMenu
InsertMenuItem
IsMenu
LoadMenu
LoadMenuIndirect
MenuItemFromPoint
ModifyMenu
RemoveMenu
SetMenu
SetMenuDefaultItem
SetMenuInfo
SetMenuItemBitmaps
SetMenuItemInfo
TrackPopupMenu
TrackPopupMenuEx


reste a voir les entrées ^^

Pour ce qui est de qtruby... inutile, etant donné que l'on ne peut pas importer des libs en c via la methode require de rmvx, meme avec un fichier rb en //
Pour toute compilation... c'est mort, etant donné qu'on a pas le code source du log... et que l'assembleur.... c'est pô bien Very Happy
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
MirainoHikari
Ex-Admin-Script
Ex-Admin-Script
MirainoHikari


Masculin Age : 42
Inscrit le : 26/05/2008
Messages : 2360

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeMar 21 Oct 2008 - 13:40

Ah pour le require, c'est vrai que j'avais pas tester... hmm domage... Pour les menu de user32, je crois bien que ce sont les même paramètres que la librairie .Net de windows. À vérifier... Je prévois un grand switch/case (ou plutot un When en ruby) étant donné que le connect des API ne sont pas disponible. Tes menus vont te renvoyer probablement une matrice pour identifier quel élément a été cliqué. Bon courrage.
Revenir en haut Aller en bas
http://mirainohikari.deviantart.com
berka
Maire Lv.9
Maire Lv.9
berka


Masculin Age : 34
Inscrit le : 15/10/2008
Messages : 351

Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitimeMar 21 Oct 2008 - 16:18

pas besoin de matrice... je pense, vu que la fonction GetSubMenu doit renvoyer une valeur...
En effet, etant donné qu'il n'y a qu'une seule dll user32, il y a des chances que ce soit la meme fonction que pour .net
Revenir en haut Aller en bas
http://rpgruby.olympe-network.com
Contenu sponsorisé




Classe Win32API Empty
MessageSujet: Re: Classe Win32API   Classe Win32API Icon_minitime

Revenir en haut Aller en bas
 

Classe Win32API

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» classe inventeur
»  KGC_CategorizeSkill- catégories par classe
» Script de "Talent" de classe
» [VX] Modification des caracteristiques selon la classe
» Choisir sa classe [resolu]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Apprentissage :: Programmation: Events & RGSS :: Cours-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Cookies | Forum gratuit