OVH Cloud OVH Cloud

titre de l'application

12 réponses
Avatar
phil
Bonjour
J'avais d=E9j=E0 pos=E9 cette question sur le forum, mais elle=20
est rest=E9e sans reponse :
Avec access, je voudrais pouvoir modifier le titre de mon=20
application. je connaissais d=E9j=E0 la solution manuelle :=20
Outils/Demarrage/Titre de l'application.
Mais ce que je voudrais, c'est que la valeur de ce titre=20
puisse etre changee en fonction d'une variable, ou en=20
fonction d'un enregistrement dans une table... MEME=20
TEMPORAIREMENT !

Ce que je voudrais, c'est pouvoir modifier ce titre avec=20
du VBA.
J'ai trouve sur Internet ces solutions pour modifier et=20
lire le titre de l'application :=20

Private Declare Function GetWindowText Lib "User32" (ByVal=20
WindowHandle As Integer, ByVal Buffer As String, ByVal=20
Size As Integer) As Integer

Private Declare Sub SetWindowText Lib "User32" (ByVal=20
WindowHandle As Integer, ByVal Title As String)

Mais je ne sais pas comment l'appeler...
J'ai essay=E9 comme ca (copi=E9 sur une autre fonction du meme=20
style) :
Dim tmp$
tmp =3D String(255, " ")
MsgBox (GetWindowText(100, tmp, 255))
SetWindowText 100, "lu"

MAIS :=20
Erreur d'ex=E9cution 453 : Point d'entree GetWindowText=20
d'une DLL introuvable dans User32

OU EST MON ERREUR ?
A noter que c'est peut-etre a cause du 100 : j'ai vraiment=20
mis n'importe quel entier... mais lequel choisir ?
SI VOUS POUVIEZ M'AIDER... CE SERAIT BIEN SYMPA !!!

2 réponses

1 2
Avatar
phil
Bien ! Le titre change.

Mais le getWindowText renvoie 4. J'ai essayé avec
plusieurs titres différents, je crois que getwindowtext
renvoie la LONGUEUR du titre. Comment obtenir le NOM du
titre ?
GET, c'est bien pour récupérer, n'est-ce pas ?


-----Message d'origine-----
Salut,


il ne faut pas prendre 0 ni quelque chose
d'aléatoire, mais bien

Application.hWndAccessApp :


Dim str As string
str="Allo" & Chr(0)

SetWindowText Application.hWndAccessApp , str



Chaque fois qu'on ouvre Access, la fenêtre est
différente et possède donc

son ID unique, qu'Access nous retourne gracieusement dans
Application.hWndAccessApp .



Espérant être utile,
Vanderghast, Access MVP


"phil" wrote in
message

news:642c01c3e677$45571ee0$
AU SECOURS !!!

J'ai voulu essayer, en écrivant exactement ça :

Private Declare Function GetWindowText Lib "user32"
Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString
As String, ByVal cch As Long) As Long
Private Declare Function SetWindowText Lib "user32"
Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString
As String) As Long

Private Sub Commande0_Click()
msgbox(GetWindowText(0, dbtext, 255))
SetWindowText cpt, "lu"
RefreshTitleBar
End Sub


et ça n'a pas marché : le msgbox renvoie 0, et le
setwindowtext ne fait rien...

Je me suis dit qu'il fallait essayer avec un autre hwnd,
et j'ai mis une boucle For cpt=0 to 1000 ... Next
Toutes mes pages internet et mes dossiers ont pris le
nom "lu" !!!!!!!!!!

Mais bien sur, pas ma base access.
C'est le sort qui s'acharne sur moi, ou alors est-ce que
je suis passe a cote de quelquechose ?


-----Message d'origine-----

Merci Michel pour ces précisions. je vais les garder
précieusement...

En ce qui concerne le hWnd, j'enrage !!!
En effet, la solution était 0 ! Et moi, j'ai testé avec
un

For Next toutes les possibilités de 1 a 32767 (avec
gestion d'erreurs, bien sur... Access ne m'aurait prévenu
que si ca fonctionnait). J'ai l'habitude de faire des
compteurs (Dans les For... Next) de 1 à X, alors j'ai
oublié le 0 !!!!!!

Merci beaucoup à toi et à 3Stone... je vais essayer
d'appliquer ma première solution avec ce que tu m'a
dis...







-----Message d'origine-----
Salut,

Tu as déjà trouvé une solution au problème initial,
mais quant au

problème rencontré, dans une de tes tentatives,
puisqu'il


peut se rencontrer
à nouveau, dans le futur... je me permet...

Il y a DEUX problèmes.

Utiliser Application.hWndAccessApp comme valeur de
hWnd (window

handle). Chaque fenêtre possède une carte d'identité, un
ID, qu'on appelle

familiarement un hWnd. Quand tu utilisais 100, c'était
peut-être le ID de,

je ne sais trop, le sixième bouton de la barre qui
apparaît avec "démarrer"

| "programmes"... ou quoique ce soit d'autre. En effet,
seul le hwnd 0 a

une signification immuable, cela refère "au système".
Les


autres valeurs de
hwnd dépendent de l'historique depuis le démarrage du
PC.






Utiliser l'alias "A" (pour ANSI, ou ASCII, je ne me
souviens plus

exactement) avec toutes les fonctions API qui
travaillent


avec des chaînes
de caractères. En effet, VB et VBA ne sont pas très à
l'aise avec du

Unicode, la version non-A, qui est la version par défaut
sur Win32, donc, il

faut "alias-er" (si il y a des chaînes), en général,
comme suit, avec

VB/VBA, pour utiliser la version "A" (tiré de All-API,
www.allapi.net) :



Private Declare Function GetWindowText Lib "user32"
Alias "GetWindowTextA"

(ByVal hwnd As Long, ByVal lpString As String, ByVal cch
As Long) As Long


Private Declare Function SetWindowText Lib "user32"
Alias "SetWindowTextA"

(ByVal hwnd As Long, ByVal lpString As String) As Long





Sûr, si le "ID", le hWnd spécifié, est quelque
chose qui n'a pas de

"barre titre", évidemment, cela risque de planter
(surtout le Set) car

autrement, ce serait potentiellement une porte d'entrée
pour les hackers et

virus.





Espérant être utile,

Vanderghast, Access MVP





"phil" wrote in
message

news:665901c3e63a$3d19d2a0$
Bonjour
J'avais déjà posé cette question sur le forum, mais elle
est restée sans reponse :
Avec access, je voudrais pouvoir modifier le titre de
mon



application. je connaissais déjà la solution manuelle :
Outils/Demarrage/Titre de l'application.
Mais ce que je voudrais, c'est que la valeur de ce titre
puisse etre changee en fonction d'une variable, ou en
fonction d'un enregistrement dans une table... MEME
TEMPORAIREMENT !

Ce que je voudrais, c'est pouvoir modifier ce titre avec
du VBA.
J'ai trouve sur Internet ces solutions pour modifier et
lire le titre de l'application :

Private Declare Function GetWindowText Lib "User32"
(ByVal


WindowHandle As Integer, ByVal Buffer As String, ByVal
Size As Integer) As Integer

Private Declare Sub SetWindowText Lib "User32" (ByVal
WindowHandle As Integer, ByVal Title As String)

Mais je ne sais pas comment l'appeler...
J'ai essayé comme ca (copié sur une autre fonction du
meme


style) :
Dim tmp$
tmp = String(255, " ")
MsgBox (GetWindowText(100, tmp, 255))
SetWindowText 100, "lu"

MAIS :
Erreur d'exécution 453 : Point d'entree GetWindowText
d'une DLL introuvable dans User32

OU EST MON ERREUR ?
A noter que c'est peut-etre a cause du 100 : j'ai
vraiment


mis n'importe quel entier... mais lequel choisir ?
SI VOUS POUVIEZ M'AIDER... CE SERAIT BIEN SYMPA !!!


.

.





.





Avatar
Michel Walsh
Salut,


Oui. Il est rarissime qu'une fonction API retourne une chaîne comme
résultat explicitement. Ici, le résultat est retourné dans un des arguments,
le second. La procédure est donc de définir une chaîne, ici, je la fais de
255 espaces, et c'est dans cette chaîne que me sera retourné le résultat. Le
troisième argument de GetWindowText demande la longueur du tampon qu'on lui
passe, len(str) fait l'affaire, si str est le dit tampon.


Dim str As String
str=Space(255)

GetWindowText hWnd, str, len(Str)

Debug.Print str




Espérant être utile,
Vanderghast, Access MVP




"phil" wrote in message
news:6a6301c3e67a$e965d730$
Bien ! Le titre change.

Mais le getWindowText renvoie 4. J'ai essayé avec
plusieurs titres différents, je crois que getwindowtext
renvoie la LONGUEUR du titre. Comment obtenir le NOM du
titre ?
GET, c'est bien pour récupérer, n'est-ce pas ?


-----Message d'origine-----
Salut,


il ne faut pas prendre 0 ni quelque chose
d'aléatoire, mais bien

Application.hWndAccessApp :


Dim str As string
str="Allo" & Chr(0)

SetWindowText Application.hWndAccessApp , str



Chaque fois qu'on ouvre Access, la fenêtre est
différente et possède donc

son ID unique, qu'Access nous retourne gracieusement dans
Application.hWndAccessApp .



Espérant être utile,
Vanderghast, Access MVP


"phil" wrote in
message

news:642c01c3e677$45571ee0$
AU SECOURS !!!

J'ai voulu essayer, en écrivant exactement ça :

Private Declare Function GetWindowText Lib "user32"
Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString
As String, ByVal cch As Long) As Long
Private Declare Function SetWindowText Lib "user32"
Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString
As String) As Long

Private Sub Commande0_Click()
msgbox(GetWindowText(0, dbtext, 255))
SetWindowText cpt, "lu"
RefreshTitleBar
End Sub


et ça n'a pas marché : le msgbox renvoie 0, et le
setwindowtext ne fait rien...

Je me suis dit qu'il fallait essayer avec un autre hwnd,
et j'ai mis une boucle For cpt=0 to 1000 ... Next
Toutes mes pages internet et mes dossiers ont pris le
nom "lu" !!!!!!!!!!

Mais bien sur, pas ma base access.
C'est le sort qui s'acharne sur moi, ou alors est-ce que
je suis passe a cote de quelquechose ?


-----Message d'origine-----

Merci Michel pour ces précisions. je vais les garder
précieusement...

En ce qui concerne le hWnd, j'enrage !!!
En effet, la solution était 0 ! Et moi, j'ai testé avec
un

For Next toutes les possibilités de 1 a 32767 (avec
gestion d'erreurs, bien sur... Access ne m'aurait prévenu
que si ca fonctionnait). J'ai l'habitude de faire des
compteurs (Dans les For... Next) de 1 à X, alors j'ai
oublié le 0 !!!!!!

Merci beaucoup à toi et à 3Stone... je vais essayer
d'appliquer ma première solution avec ce que tu m'a
dis...







-----Message d'origine-----
Salut,

Tu as déjà trouvé une solution au problème initial,
mais quant au

problème rencontré, dans une de tes tentatives,
puisqu'il


peut se rencontrer
à nouveau, dans le futur... je me permet...

Il y a DEUX problèmes.

Utiliser Application.hWndAccessApp comme valeur de
hWnd (window

handle). Chaque fenêtre possède une carte d'identité, un
ID, qu'on appelle

familiarement un hWnd. Quand tu utilisais 100, c'était
peut-être le ID de,

je ne sais trop, le sixième bouton de la barre qui
apparaît avec "démarrer"

| "programmes"... ou quoique ce soit d'autre. En effet,
seul le hwnd 0 a

une signification immuable, cela refère "au système".
Les


autres valeurs de
hwnd dépendent de l'historique depuis le démarrage du
PC.






Utiliser l'alias "A" (pour ANSI, ou ASCII, je ne me
souviens plus

exactement) avec toutes les fonctions API qui
travaillent


avec des chaînes
de caractères. En effet, VB et VBA ne sont pas très à
l'aise avec du

Unicode, la version non-A, qui est la version par défaut
sur Win32, donc, il

faut "alias-er" (si il y a des chaînes), en général,
comme suit, avec

VB/VBA, pour utiliser la version "A" (tiré de All-API,
www.allapi.net) :



Private Declare Function GetWindowText Lib "user32"
Alias "GetWindowTextA"

(ByVal hwnd As Long, ByVal lpString As String, ByVal cch
As Long) As Long


Private Declare Function SetWindowText Lib "user32"
Alias "SetWindowTextA"

(ByVal hwnd As Long, ByVal lpString As String) As Long





Sûr, si le "ID", le hWnd spécifié, est quelque
chose qui n'a pas de

"barre titre", évidemment, cela risque de planter
(surtout le Set) car

autrement, ce serait potentiellement une porte d'entrée
pour les hackers et

virus.





Espérant être utile,

Vanderghast, Access MVP





"phil" wrote in
message

news:665901c3e63a$3d19d2a0$
Bonjour
J'avais déjà posé cette question sur le forum, mais elle
est restée sans reponse :
Avec access, je voudrais pouvoir modifier le titre de
mon



application. je connaissais déjà la solution manuelle :
Outils/Demarrage/Titre de l'application.
Mais ce que je voudrais, c'est que la valeur de ce titre
puisse etre changee en fonction d'une variable, ou en
fonction d'un enregistrement dans une table... MEME
TEMPORAIREMENT !

Ce que je voudrais, c'est pouvoir modifier ce titre avec
du VBA.
J'ai trouve sur Internet ces solutions pour modifier et
lire le titre de l'application :

Private Declare Function GetWindowText Lib "User32"
(ByVal


WindowHandle As Integer, ByVal Buffer As String, ByVal
Size As Integer) As Integer

Private Declare Sub SetWindowText Lib "User32" (ByVal
WindowHandle As Integer, ByVal Title As String)

Mais je ne sais pas comment l'appeler...
J'ai essayé comme ca (copié sur une autre fonction du
meme


style) :
Dim tmp$
tmp = String(255, " ")
MsgBox (GetWindowText(100, tmp, 255))
SetWindowText 100, "lu"

MAIS :
Erreur d'exécution 453 : Point d'entree GetWindowText
d'une DLL introuvable dans User32

OU EST MON ERREUR ?
A noter que c'est peut-etre a cause du 100 : j'ai
vraiment


mis n'importe quel entier... mais lequel choisir ?
SI VOUS POUVIEZ M'AIDER... CE SERAIT BIEN SYMPA !!!


.

.





.





1 2