Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Récupérer le numéro d'instance d'un programme Lun 27 Juin 2011 - 1:29 | |
| Pour mon programme, je suis en train de bidouiller un peu les DLL des API, mais je calle sur un truc que vous avez déjà dû résoudre avec Klaus, mais je ne vois pas la solution de mon côté. Je n'arrive pas à récupérer le numéro d'instance du programme pour le passer en paramètre des appels. J'ai essayé de fouillé du côté des DLL de Klaus, mais je calle. Je vous mets le code du programme en dessous: Le but étant de faire les appels au DLL après surtout En fait, je cherche donc l'équivalent d'un Me.Hndl en VB ou de la fonction Instance() en Windev pour initialiser hInst% - Code:
-
REM DLL: USER32.DLL; Commandes GetDC, DrawIcon et DestroyIcon REM ExtractIcon extrait un icône unique depuis un fichier. Ce fichier peut être un exécutable (.exe), une bibliothèque dynamique (.dll) REM ou un fichier icône. Alternativement, la fonction peut aussi déterminer combien d'icônes sont stockées dans un fichier. REM L'icône générée par cette fonction doit être détruite en utilisant DestroyIcon après que le programme ait terminé de l'utiliser. REM Si la fonction faillit parce que le fichier n'a pas été trouvé, elle retourne 1. REM Si la fonction faillit parce que l'icône requis n'existe pas, elle renvoie 0. REM Si la fonction réussit et que le nombre d'icônes a été demandé, elle renvoie ce nombre. REM Si la fonction réussit et que l'icône a été spécifiée, elle retourne un handle de l'extraction. REM DLL: shell32 Syntaxe: hIcon% = DLL_CALL3("ExtractIconA", hInst%, adr(FileName$), nIconIndex%) REM * hInst%: Le handle de l'instance de l'application appelant la fonction. REM * FileName$: Le nom du fichier dont il faut extraire l'icône. REM * nIconIndex: Si ce paramètre est à -1, la fonction retourne le nombre d'icônes stocké dans le fichier REM Si ce paramètre est un nombre positif, la fonction extrait l'icône en utilisant un index sur une base zéro REM (le 0 identifie le premier icône, le 1 le deuxième, etc.). REM Affichons dans une fenêtre quelconque, l'icône de la calculatrice REM D'après un code disponible sur Beaussier en ligne
DIM obj%, hWnd%, hInst%, hDC%, x%, y%, Fic$ DIM MaxX%, MaxY%, RetourDLL%, Boutton%, hIcon%, nIconIndex%, i% DIM rep$, Fichier_principal$, var$(4), val_var$(4), aff_fonction$, var_resultat$, val_var_resultat$
LABEL Prepare_Ecran, Retour, Quitter, Extrait, DrawIcon, DestroyIcon LABEL Affiche_avant_call, Affiche_apres_call
obj% = 0 : hWnd% = Handle(0)
Fic$ = "C:\WINDOWS\system32\calc.exe" MaxY% = 390 : MaxX% = 950
REM Initialisation de la fenêtre principale Height 0, MaxY% : Width 0, MaxX% : obj%=0 : Caption 0,"Test-ExtractIconA, DrawIcon & DestroyIcon"
REM récupération du nom du fichier principal rep$ = dir_current$ : IF right$(rep$,10)="\Prog_test" THEN rep$=LEFT$(rep$,len(rep$)-10) obj%=obj% + 1 : FILE_OPEN_READ obj% , rep$ + "\Options.def" FILE_READLN obj% , Fichier_principal$ :' Pas besoin du fichier ini FILE_READLN obj% , Fichier_principal$ :' Pas besoin du chemin FILE_READLN obj% , Fichier_principal$ :' On garde ça, c'est le nom du programme principal FILE_CLOSE obj%
dll_on "User32.dll" hDC% = DLL_CALL1("GetDC", hWnd%) : REM Récupération du contexte de la fenêtre dll_off
GOSUB Prepare_Ecran obj%=obj% + 1: button obj% : top obj%,MaxY% - 63 : left obj%,5 : width obj%,130 : caption obj%,"Extrait l'icône Calculatrice" : on_click obj%, Extrait : Boutton%=obj% obj%=obj% + 1: button obj% : top obj%,MaxY% - 63 : left obj%,140 : width obj%,85 : caption obj%,"Retour au menu" : on_click obj%, Retour obj%=obj% + 1: button obj% : top obj%,MaxY% - 63 : left obj%,230 : width obj%,88 : caption obj%,"Quitter" : on_click obj%, Quitter
end
Extrait:
INACTIVE Boutton% dll_on "shell32.dll" nIconIndex% = 0 var$(1)="hInst%":var$(2)="Fic$": var$(3)="nIconIndex%":var$(4)="" val_var$(1) = STR$(hInst%) val_var$(2) = Fic$ val_var$(3) = STR$(nIconIndex%):val_var$(4)="" gosub Affiche_avant_call
hIcon% = DLL_CALL3("ExtractIconA", hInst%, adr(Fic$), nIconIndex%)
aff_fonction$="retourDLL% = DLL_Call3(" + CHR$(34) + "ExtractIconA" + CHR$(34) + ", hInst%, adr(Fic$), nIconIndex%)" val_var$(1)=STR$(hInst%):val_var$(2)=Fic$:val_var$(3)=STR$(nIconIndex%):val_var$(4)="" var_resultat$="hIcon%":val_var_resultat$=str$(hIcon%) gosub Affiche_apres_call dll_off CAPTION Boutton%, "Affiche l'iône Calcultarice": on_click Boutton%, DrawIcon : ACTIVE Boutton%
RETURN
DrawIcon:
INACTIVE Boutton% dll_on "user32.dll" x% = 50: y% = 50 var$(1)="hDC%":var$(2)="x%": var$(3)="y%":var$(4)="hIcon%" val_var$(1)=STR$(hDC%):val_var$(2)=STR$(x%):val_var$(3)=STR$(y%):val_var$(4)=STR$(hIcon%) gosub Affiche_avant_call
retourDLL% = DLL_Call4("DrawIcon", hDC%, x%, y%, hIcon% )
aff_fonction$="retourDLL% = DLL_Call4(" + CHR$(34) + "DrawIcon" + CHR$(34) + ", hDC%, x%, y%, hIcon% )" val_var$(1)=STR$(hDC%):val_var$(2)=STR$(x%):val_var$(3)=STR$(y%):val_var$(4)=STR$(hIcon%) var_resultat$="retourDLL%":val_var_resultat$=str$(retourDLL%) gosub Affiche_apres_call dll_off CAPTION Boutton%, "Suppr. l'iône Calcultarice": on_click Boutton%, DestroyIcon : ACTIVE Boutton%
RETURN
DestroyIcon:
INACTIVE Boutton% dll_on "user32.dll" x% = 50: y% = 50 var$(1)="":var$(2)="hIcon%": var$(3)="":var$(4)="" val_var$(1)="":val_var$(2)=STR$(hIcon%):val_var$(3)="" : val_var$(4)="" gosub Affiche_avant_call
retourDLL% = DLL_Call1("DestroyIcon", hIcon% )
aff_fonction$="retourDLL% = DLL_Call1(" + CHR$(34) + "DesytoyIcon" + CHR$(34) + ", hIcon% )" val_var$(1)="":val_var$(2)=STR$(hIcon%):val_var$(3)="" : val_var$(4)="" var_resultat$="retourDLL%":val_var_resultat$=str$(retourDLL%) gosub Affiche_apres_call dll_off CAPTION Boutton%, "Extrait l'icône Calculatrice": on_click Boutton%, Extrait : ACTIVE Boutton%
RETURN
Affiche_avant_call: FOR i% = 1 to 4 CAPTION 110+i%, var$(i%) CAPTION 90 +i%, val_var$(i%) NEXT i% RETURN
Affiche_apres_call: FOR i% = 1 to 4 CAPTION 120 +i%, var$(i%) CAPTION 130 +i%, val_var$(i%) NEXT i% CAPTION 142,aff_fonction$ CAPTION 98, var_resultat$ CAPTION 99, val_var_resultat$ WAIT 1 RETURN
Prepare_Ecran:
CONTAINER 105 : LEFT 105,330 : TOP 105,5 : WIDTH 105,600 : HEIGHT 105,30 : INACTIVE 105 ALPHA 106 : PARENT 106,105: LEFT 106,10 : TOP 106,7 : WIDTH 106,590 : HEIGHT 106, 15 : FONT_BOLD 106 : FONT_NAME 106,"Tahoma":FONT_SIZE 106,12 : CAPTION 106,"Test de la DLL: gdi32.dll"
CONTAINER 107 : LEFT 107,330 : TOP 107,35 : WIDTH 107,600 : HEIGHT 107,104 : INACTIVE 107
ALPHA 81 : PARENT 81,107 : LEFT 81,10 : TOP 81,8 : WIDTH 81,590 : HEIGHT 81, 10 : FONT_SIZE 81,9 : CAPTION 81,"" ALPHA 82 : PARENT 82,107 : LEFT 82,10 : TOP 82,21 : WIDTH 82,590 : HEIGHT 82, 10 : FONT_SIZE 82,9 : CAPTION 82,"SetPixel change la couleur du pixel à la coordonnée spécifiée avec la couleur spécifiée." ALPHA 83 : PARENT 83,107 : LEFT 83,10 : TOP 83,34 : WIDTH 83,590 : HEIGHT 83, 10 : FONT_SIZE 83,9 : CAPTION 83,"Le programme affiche une trame de points de couleur rouge vif" ALPHA 84 : PARENT 84,107 : LEFT 84,10 : TOP 84,47 : WIDTH 84,590 : HEIGHT 84, 10 : FONT_SIZE 84,9 : CAPTION 84," * hDC% : Identifie le contexte objet (device context)." ALPHA 85 : PARENT 85,107 : LEFT 85,10 : TOP 85,60 : WIDTH 85,590 : HEIGHT 85, 10 : FONT_SIZE 85,9 : CAPTION 85," * x% : Précise la coordonnée en x en unité logique du point à changer." ALPHA 86 : PARENT 86,107 : LEFT 86,10 : TOP 86,73 : WIDTH 86,590 : HEIGHT 86, 10 : FONT_SIZE 86,9 : CAPTION 86," * y% : Précise la coordonnée en y en unité logique du point à changer." ALPHA 87 : PARENT 87,107 : LEFT 87,10 : TOP 87,86 : WIDTH 87,590 : HEIGHT 87, 10 : FONT_SIZE 87,9 : CAPTION 87," * crColor%: Spécifie la couleur à utiliser pour peindre le point."
CONTAINER 100: LEFT 100,330 : TOP 100,139 : WIDTH 100, 600 : HEIGHT 100, 43: INACTIVE 100 ALPHA 141 : PARENT 141,100 : LEFT 141,10 : TOP 141,8 : WIDTH 141,590 : HEIGHT 141, 12 : FONT_BOLD 141 : FONT_NAME 141,"Tahoma":FONT_SIZE 141,9 : CAPTION 141,"Execute cette fonction" ALPHA 142 : PARENT 142,100 : LEFT 142,10 : TOP 142,24 : WIDTH 142,590 : HEIGHT 142, 10 : FONT_COLOR 142,0,0,255 : FONT_SIZE 142,9
CONTAINER 108 : LEFT 108,330 : TOP 108,182 : WIDTH 108,600 : HEIGHT 108,76 ALPHA 109 : PARENT 109,108 : LEFT 109,10 : TOP 109,8 : WIDTH 109,380 : HEIGHT 109, 12 : FONT_BOLD 109 : FONT_NAME 109,"Tahoma":FONT_SIZE 109,9 : CAPTION 109,"Avant fonction" ALPHA 111 : PARENT 111,108 : LEFT 111,10 : TOP 111,21 : WIDTH 111,100 : HEIGHT 111, 10 : FONT_SIZE 111,9 : REM Variable 1 ALPHA 112 : PARENT 112,108 : LEFT 112,10 : TOP 112,34 : WIDTH 112,100 : HEIGHT 112, 10 : FONT_SIZE 112,9 : REM Variable 2 ALPHA 113 : PARENT 113,108 : LEFT 113,10 : TOP 113,47 : WIDTH 113,100 : HEIGHT 113, 10 : FONT_SIZE 113,9 : REM Variable 3 ALPHA 114 : PARENT 114,108 : LEFT 114,10 : TOP 114,60 : WIDTH 114,100 : HEIGHT 114, 10 : FONT_SIZE 114,9 : REM Variable 4 REM ALPHA 115 : PARENT 115,108 : LEFT 115,10 : TOP 115,88 : WIDTH 115,100 : HEIGHT 115, 10 : FONT_SIZE 115,9 : REM Variable 5 REM ALPHA 116 : PARENT 116,108 : LEFT 116,10 : TOP 116,104: WIDTH 116,100 : HEIGHT 116, 10 : FONT_SIZE 116,9 : REM Variable 6 ALPHA 91 : PARENT 91,108 : LEFT 91,120 : TOP 91,21 : WIDTH 91,270 : HEIGHT 91, 10 : FONT_COLOR 91,0,0,255 : FONT_SIZE 91,9 : REM Valeur de Var. 1 ALPHA 92 : PARENT 92,108 : LEFT 92,120 : TOP 92,34 : WIDTH 92,270 : HEIGHT 92, 10 : FONT_COLOR 92,0,0,255 : FONT_SIZE 92,9 : REM Valeur de Var. 2 ALPHA 93 : PARENT 93,108 : LEFT 93,120 : TOP 93,47 : WIDTH 93,270 : HEIGHT 93, 10 : FONT_COLOR 93,0,0,255 : FONT_SIZE 93,9 : REM Valeur de Var. 3 ALPHA 94 : PARENT 94,108 : LEFT 94,120 : TOP 94,60 : WIDTH 94,270 : HEIGHT 94, 10 : FONT_COLOR 94,0,0,255 : FONT_SIZE 94,9 : REM Valeur de Var. 4 REM ALPHA 95 : PARENT 95,108 : LEFT 95,120 : TOP 95,88 : WIDTH 95,270 : HEIGHT 95, 10 : FONT_COLOR 95,0,0,255 : FONT_SIZE 95,9 : REM Valeur de Var. 5 REM ALPHA 96 : PARENT 96,108 : LEFT 96,120 : TOP 96,104: WIDTH 96,270 : HEIGHT 96, 10 : FONT_COLOR 96,0,0,255 : FONT_SIZE 96,9 : REM Valeur de Var. 6
CONTAINER 103 : LEFT 103,330 : TOP 103,258: WIDTH 103,600 : HEIGHT 103,89 : INACTIVE 103 ALPHA 89 : PARENT 89,103 : LEFT 89,10 : TOP 89,8 : WIDTH 89,380 : HEIGHT 89, 12 : FONT_BOLD 89 : FONT_SIZE 89,9 : CAPTION 89,"Après fonction" ALPHA 121 : PARENT 121,103 : LEFT 121,10 : TOP 121,21 : WIDTH 121,100 : HEIGHT 121, 10 : FONT_SIZE 121,9 ALPHA 122 : PARENT 122,103 : LEFT 122,10 : TOP 122,34 : WIDTH 122,100 : HEIGHT 122, 10 : FONT_SIZE 122,9 ALPHA 123 : PARENT 123,103 : LEFT 123,10 : TOP 123,47 : WIDTH 123,100 : HEIGHT 123, 10 : FONT_SIZE 123,9 ALPHA 124 : PARENT 124,103 : LEFT 124,10 : TOP 124,60 : WIDTH 124,100 : HEIGHT 124, 10 : FONT_SIZE 124,9 REM ALPHA 125 : PARENT 125,103 : LEFT 125,10 : TOP 125,73 : WIDTH 125,100 : HEIGHT 125, 10 : FONT_SIZE 125,9 REM ALPHA 126 : PARENT 126,103 : LEFT 126,10 : TOP 126,86 : WIDTH 126,100 : HEIGHT 126, 10 : FONT_SIZE 126,9 ALPHA 98 : PARENT 98,103 : LEFT 98,10 : TOP 98,73 : WIDTH 98,100 : HEIGHT 98, 10 : FONT_SIZE 98,9 ALPHA 131: PARENT 131,103 : LEFT 131,120 : TOP 131,21 : WIDTH 131,270 : HEIGHT 131, 10 : FONT_COLOR 131,0,0,255 : FONT_SIZE 131,9 ALPHA 132: PARENT 132,103 : LEFT 132,120 : TOP 132,34 : WIDTH 132,270 : HEIGHT 132, 10 : FONT_COLOR 132,0,0,255 : FONT_SIZE 132,9 ALPHA 133: PARENT 133,103 : LEFT 133,120 : TOP 133,47 : WIDTH 133,270 : HEIGHT 133, 10 : FONT_COLOR 133,0,0,255 : FONT_SIZE 133,9 ALPHA 134: PARENT 134,103 : LEFT 134,120 : TOP 134,60 : WIDTH 134,270 : HEIGHT 134, 10 : FONT_COLOR 134,0,0,255 : FONT_SIZE 134,9 REM ALPHA 135: PARENT 135,103 : LEFT 135,120 : TOP 135,73 : WIDTH 135,270 : HEIGHT 135, 10 : FONT_COLOR 135,0,0,255 : FONT_SIZE 135,9 REM ALPHA 136: PARENT 136,103 : LEFT 136,120 : TOP 136,86 : WIDTH 136,270 : HEIGHT 136, 10 : FONT_COLOR 136,0,0,255 : FONT_SIZE 136,9 ALPHA 99 : PARENT 99,103 : LEFT 99,120 : TOP 99,73 : WIDTH 99,270 : HEIGHT 99, 10 : FONT_COLOR 99,0,0,255 : FONT_SIZE 99,9
RETURN
Retour: CHAIN rep$ + "\" + Fichier_principal$
Quitter: TERMINATE | |
|