IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Ouvrir un fichier PDF en plein écran


Sujet :

VBA

  1. #1
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Ouvrir un fichier PDF en plein écran
    Bonjour à tous,

    Je développe actuellement un navigateur.

    L'une de ses fonctionnalités consiste à ouvrit un fichier PDF

    Pour ce faire, j'utilise la fonction ShellExecute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd _
    As Long) As Long
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const SW_SHOWNORMAL = 1
    Soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Ouvrir_pdf()
     
    Dim lerép As String
    lerép = "monrépertoire"
    Dim lefichier As String
    lefichier = lerép & Application.PathSeparator & "monbofichier.pdf"
     
    'Voir ci_dessus "Declare Function ShellExecute"
    Call ShellExecute(hwnd:=0, lpOperation:="open", lpFile:=lefichier, lpParameters:="", lpDirectory:="", nShowCmd:=SW_SHOWNORMAL)
     
    End Sub
    Or, je souhaiterais l'ouvrir en plein écran.
    Je présume que la modification doit porter sur la constante SW_SHOWNORMAL.
    J'ai tenté plusieurs occurrences. Rien n'y fait.

    Par avance, je vous remercie.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonjour Marcel,

    Ci-dessous les différentes constantes que j'ai sous le coude niveau affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Const SW_SHOWNORMAL = 1         ' Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
        Private Const SW_SHOWMINIMIZED = 2      ' Activates the window and displays it as a minimized window.
        Private Const SW_SHOWMAXIMIZED = 3      ' Activates the window and displays it as a maximized window.
        Private Const SW_SHOWNOACTIVATE = 4     ' Displays a window in its most recent size and position. The active window remains active.
        Private Const SW_SHOW = 5               ' Activates the window and displays it in its current size and position.
        Private Const SW_SHOWMINNOACTIVE = 7    ' Displays the window as a minimized window. The active window remains active.
        Private Const SW_SHOWNA = 8             ' Displays the window in its current state. The active window remains active.
        Private Const SW_SHOWDEFAULT = 10       ' Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
    Essaie peut-être la 3, ShowMaximized ?

    Bat,
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Hé, salut l'ami.

    Merci à toi, ami foxy, mais rien n'y fait.

    J'aurais souhaité coder l'équivalent du CTRL + L sous PDF.

    A la limite, désactiver les commandbars (Enabled = false) pour ne conserver que la croix de fermeture.

    Je conserve néanmoins les occurrences que tu m'as reportées.

    Amicalement.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Citation Envoyé par MarcelG Voir le message
    Bonjour à tous,
    Je développe actuellement un navigateur.
    L'une de ses fonctionnalités consiste à ouvrit un fichier PDF
    Quel est le logiciel de lecture de PDF ? Est-ce que ça sera toujours le même ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour JP,

    Ravi de te rencontrer.

    Il s'agit d'un applicatif unique Excel mis à disposition de mon entité.
    A partir de celui-ci, par boutons de commande sur un formulaire, des cibles vont s'activer
    (Un répertoire, un document Word...)

    En l'occurrence, pour le cas qui nous occupe, un document PDF.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    tu ne m'as pas répondu sur le lecteur PDF qui est utilisé.
    Moi par exemple aves sumatraPDF (qui est mon lecteur PDF par défaut) je peux ouvrir un pdf en plein écran en ajoutant à la ligne de commande -fullscreen

    Avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Ouvrir_pdf()
    Const SW_SHOWNORMAL = 1
    Const SW_SHOWMAXIMIZED = 3
    Dim lerép As String
    lerép = "monrépertoire"
    Dim lefichier As String
    lefichier = "M:\temp\testTexte.pdf"
     
    Call ShellExecute(hwnd:=0, lpOperation:="open", lpFile:=lefichier, lpParameters:="-fullscreen", lpDirectory:="", nShowCmd:=SW_SHOWMAXIMIZED)
     
    End Sub
    'fin
    mon PDF s'ouvre en plein écran.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour JP, Bonjour le Forum,

    Mes excuses.

    Il s'agit de
    Adobe Acrobat Reader DC (32 bits)

    La barre de titre affiche
    Présentation Powerpoint - Adobe Acrobat Reader DC
    Il s'agit en effet d'une présentation PowerPoint enregistré sous PDF

    Ton code précisant le paramètre "-pfullscreen" est, sur mon poste, sans effet

    Autre piste:

    Comme le raccourci plein écran est CTRL + L sur PDF, j'ai tenté un passage par SendKeys

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.SendKeys "^(L)"
    Rien n'y fait.

    Apparaissent toujours le ruban horizontal ainsi qu'un encart sans doute publicitaire pour convertir un fichier PDF en Word ou Excel

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  8. #8
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    Chez moi ça marche avec le code suivant.
    A noter que j'utilise tout simplement Shell pour ouvrir le fichier PDF.
    Et les API pour trouver le Handle de l'application Adobe pour y mettre le focus avant d'envoyer les touches Ctrl L (avec SendKeys mais keybd_event est préférable, c'est un autre sujet).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Option Explicit
    Option Compare Binary
     
    #If Win64 Then
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Private Declare PtrSafe Function GetWindow Lib "User32" (ByVal hwnd As LongPtr, ByVal wCmd As Long) As LongPtr
    Private Declare PtrSafe Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As Long
    Private Declare PtrSafe Function SetForegroundWindow Lib "User32" (ByVal hwnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function SetFocus Lib "User32" (ByVal hwnd As LongPtr) As LongPtr
    #Else
    Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
    Private Declare Function GetWindow Lib "User32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
    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 SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function SetFocus Lib "User32" (ByVal hwnd As Long) As Long
    #End If
     
    '------------------------------------------------------------------------------------------------------
    Sub Ouvrir_PDF()
    '------------------------------------------------------------------------------------------------------
    Dim Hdc As LongPtr
    Dim T As Double
     
    ' Ouvre le fichier PDF:
    Shell "explorer.exe C:\Users\ott_l\Downloads\LeFichierPDF.pdf", vbMaximizedFocus
     
    ' Boucle tant que le Handle de Adobe n'est pas trouvé:
    T = Timer
    Do
        Hdc = Hdc_Trouver("*Adobe*")
    Loop While Hdc = 0 And T + 10 > Timer
     
    ' Place le focus sur l'application et envoie Control L:
    SetForegroundWindow Hdc
    SetFocus Hdc
    SendKeys "^l"
     
    End Sub
     
    '------------------------------------------------------------------------------------------------------
    Public Function Hdc_Trouver(StrFenetre As String) As LongPtr
    '------------------------------------------------------------------------------------------------------
    ' Retourne le Handle de la fenêtre passé en argument. Utilise l'opérateur Like donc accepte * et ?
    ' et autres, voir l'aide.
    ' Retourne 0 si la fenêtre n'est pas trouvée.
    '------------------------------------------------------------------------------------------------------
    Dim Ret As LongPtr
    Dim MyStr As String
     
    ' Boucle sur les fenêtres actives:
    Ret = FindWindow(ByVal 0&, ByVal 0&)
    Do While Ret <> 0
     
        ' Cherche le nom de la fenêtre:
        MyStr = String(100, Chr$(0))
        GetWindowText Ret, MyStr, Len(MyStr)
     
        ' Si c'est la fenêtre recherchée alors renvoie l'Hdc:
        If Left(MyStr, InStr(1, MyStr, Chr(0)) - 1) Like StrFenetre Then
            Hdc_Trouver = Ret
            Exit Do
        End If
     
        ' Cherche la fenêtre suivante:
        Ret = GetWindow(Ret, 2)
     
    Loop
     
    End Function
    Bonne programmation.

  9. #9
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Laurent,

    Content de te retrouver.

    Merci pour ta proposition

    (Moi, les Handle )

    Je vais adapter et te revenir.

    Bonne journée et à bientôt.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  10. #10
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Laurent,

    Respect!

    Afin de finaliser mon développement, je vais déclarer les paramètres des procédures utilisées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell(argument1:="C:\windows\explorer.exe " &lefichier, argument2:=vbMaximizedFocus)
    Le code initial ne me retournait que l'explorateur.
    J'ai donc dû compléter cette partie
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\windows\explorer.exe
    Remarques:
    1 - Ce n'est qu'un détail. Une variable Timer, sauf erreur, peut se déclarer en Single.
    2 - En fin de procédure, la partie droite du clavier, numérique, est désactivée.
    Donc
    Connais-tu un espace documentaire, en Français, traitant des DeclareFunction ...32, autrement dit la partie supérieure de ton code,
    Un autre sur les Handle et compagnie.

    Dans tous les cas,

    Excellente journée et à bientôt.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  11. #11
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    2 - En fin de procédure, la partie droite du clavier, numérique, est désactivée.
    Donc SendKeys "{NUMLOCK}"
    Curieusement SendKeys n'est pas neutre sur l'état du verrou numérique.
    C'est une des raisons pour laquelle je n'aime pas utiliser SendKeys et lui préfére l'API keybd_event (l'autre raison est que SendKeys ne peut pas faire une impression écran).
    Dans le code ci-dessous (peut-être un peu lourd) j'utilise keybd_event via la fonction Hdc_EnvoyerTouches qui en simplifie l'usage :
    SendKeys "^l" devient Hdc_EnvoyerTouches Hdc, vbKeyControl, vbKeyL
    A noter : Pour envoyer une chaîne de caractères, Hdc_EnvoyerTouches met la chaîne dans le presse-papiers puis la colle avec Crtl+v :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    Option Explicit
    Option Compare Binary
     
    #If Win64 Then
    ' Pour le presse-papiers:
    Private Declare PtrSafe Function OpenClipboard Lib "User32" (ByVal hwnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function SetClipboardData Lib "User32" (ByVal wFormat As LongPtr, ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function CloseClipboard Lib "User32" () As LongPtr
    Private Declare PtrSafe Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
    Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As Long
    Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr
    Private Declare PtrSafe Function EmptyClipboard Lib "User32" () As LongPtr
    Private Declare PtrSafe Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
    ' Pour gérer les fenêtres actives:
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Private Declare PtrSafe Function GetWindow Lib "User32" (ByVal hwnd As LongPtr, ByVal wCmd As Long) As LongPtr
    Private Declare PtrSafe Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As Long
    Private Declare PtrSafe Function SetForegroundWindow Lib "User32" (ByVal hwnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function SetFocus Lib "User32" (ByVal hwnd As LongPtr) As LongPtr
    #Else
    ' Pour le presse-papiers:
    Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
    Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function CloseClipboard Lib "User32" () As Long
    Private Declare Function GetClipboardData Lib "User32" (ByVal wFormat As Long) As Long
    Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
    Private Declare Function EmptyClipboard Lib "User32" () As Long
    Private Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    ' Pour gérer les fenêtres actives:
    Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
    Private Declare Function GetWindow Lib "User32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
    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 SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function SetFocus Lib "User32" (ByVal hwnd As Long) As Long
    #End If
     
    Private Const CF_TEXT = 1
    Private Const MAXSIZE = 65536
    Private Const GMEM_MOVEABLE = &H2
    Private Const GMEM_ZEROINIT = &H40
    Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
     
    '------------------------------------------------------------------------------------------------------
    Sub Ouvrir_PDF()
    '------------------------------------------------------------------------------------------------------
    Dim Hdc As LongPtr
    Dim T As Double
     
    ' Ouvre le fichier PDF:
    Shell "explorer.exe C:\Users\ott_l\Downloads\LeFichierPDF.pdf", vbMaximizedFocus
     
    ' Boucle tant que le Handle de Adobe n'est pas trouvé:
    T = Timer
    Do
        Hdc = Hdc_Trouver("*Adobe*")
    Loop While Hdc = 0 And T + 10 > Timer
     
    ' Place le focus sur l'application et envoie Control L:
    If Hdc <> 0 Then
        Hdc_EnvoyerTouches Hdc, vbKeyControl, vbKeyL
    End If
     
    End Sub
     
    '------------------------------------------------------------------------------------------------------
    Public Function Hdc_Trouver(StrFenetre As String) As LongPtr
    '------------------------------------------------------------------------------------------------------
    ' Retourne le Handle de la fenêtre passé en argument. Utilise l'opérateur Like donc accepte * et ?
    ' et autres, voir l'aide.
    ' Retourne 0 si la fenêtre n'est pas trouvée.
    '------------------------------------------------------------------------------------------------------
    Dim Ret As LongPtr
    Dim MyStr As String
     
    ' Boucle sur les fenêtres actives:
    Ret = FindWindow(ByVal 0&, ByVal 0&)
    Do While Ret <> 0
     
        ' Cherche le nom de la fenêtre:
        MyStr = String(100, Chr$(0))
        GetWindowText Ret, MyStr, Len(MyStr)
     
        ' Si c'est la fenêtre recherchée alors renvoie l'Hdc:
        If Left(MyStr, InStr(1, MyStr, Chr(0)) - 1) Like StrFenetre Then
            Hdc_Trouver = Ret
            Exit Do
        End If
     
        ' Cherche la fenêtre suivante:
        Ret = GetWindow(Ret, 2)
     
    Loop
     
    End Function
     
    '------------------------------------------------------------------------------------------------------
    Public Sub Hdc_EnvoyerTouches(hWndApp As Variant, ParamArray Combinaison() As Variant)
    '------------------------------------------------------------------------------------------------------
    ' Envoie des touches à une application.
    ' hWndApp : est soit le numéro Hdc de la fenêtre (ou 0 si fenêtre active), soit son nom.
    ' Combinaison : touche(s) a envoyer. Ce peut être une chaîne ou une variable vbKey.
    '------------------------------------------------------------------------------------------------------
    ' Exemples : Hdc_EnvoyerTouches Hdc, "Bonjour"
    '            Hdc_EnvoyerTouches Hdc, vbKeyMultiply
    '------------------------------------------------------------------------------------------------------
    ' Astuce : l'impression écran est impossible avec Sendkeys, utilisez Hdc_EnvoyerTouches 0, vbKeySnapshot
    ' ou pour n'avoir que le forumaire actif: Hdc_EnvoyerTouches 0, vbKeyMenu, vbKeySnapshot
    ' Exmple pour la calculatrice (si déjà ouverte) : Hdc_EnvoyerTouches "*Calculatrice*", vbKeyMenu,  vbKeySnapshot
    ' puis pour coller dans Excel : Sheets("Feuil1").Paste Range("A1")
    '------------------------------------------------------------------------------------------------------
    Dim i As Integer, j As Integer, s As String, Etat As Boolean, Maj As Boolean
    Dim Hdc As LongPtr
     
    If IsNumeric(hWndApp) = True Then
        Hdc = hWndApp
    Else
        Hdc = Hdc_Trouver(CStr(hWndApp))
    End If
     
    ' Vide la presse-papiers:
    ClipBoard_Clear
     
    ' Place le focus sur la fenêtre demandée (si son numéro est passé <> 0):
    If Hdc <> 0 Then
        SetForegroundWindow Hdc
        SetFocus Hdc
    End If
     
    ' Si une chaîne de carractères est passée en argument:
    If VarType(Combinaison(0)) <> vbInteger Then
        ' L'envoie dans le presse-papiers:
        If ClipBoard_SetData(CStr(Combinaison(0))) = True Then
            ' Si cela réussi alors colle avec Ctrl+V:
            keybd_event vbKeyControl, 0, 0, 0
            keybd_event vbKeyV, 0, 0, 0
            keybd_event vbKeyControl, 0, 2, 0
            keybd_event vbKeyV, 0, 2, 0
        End If
    ' Si c'est une combinaison numérique qui est passée en argument:
    Else
        ' Active:
        For i = LBound(Combinaison()) To UBound(Combinaison())
            keybd_event Combinaison(i), 0, 0, 0
        Next i
        ' Relache:
        For i = LBound(Combinaison()) To UBound(Combinaison())
            keybd_event Combinaison(i), 0, 2, 0
        Next i
    End If
    DoEvents
     
    End Sub
     
    '---------------------------------------------------------------------------------------
    Public Function ClipBoard_Clear() As Boolean
    '---------------------------------------------------------------------------------------
    If OpenClipboard(0) = 0 Then Exit Function ' Could not open the Clipboard.
    EmptyClipboard
    If CloseClipboard() <> 0 Then ClipBoard_Clear = True
    End Function
     
    '---------------------------------------------------------------------------------------
    Private Function ClipBoard_SetData(MyString As String) As Boolean
    '---------------------------------------------------------------------------------------
    ' Envoie une chaîne de caractères dans le presse-papiers.
    ' MyString : Chaîne à envoyer
    '---------------------------------------------------------------------------------------
    ' Sources : 32-bit code by Microsoft: http://msdn.microsoft.com/en-us/library/office/ff192913.aspx
    '---------------------------------------------------------------------------------------
    Dim hGlobalMemory As LongPtr, lpGlobalMemory As LongPtr
    Dim hClipMemory As LongPtr
     
    ' Gestion de la taille maximale du message a envoyer au clavier:
    If Len(MyString) >= MAXSIZE Then  ' "Chaîne trop grande"
        Exit Function
    End If
     
    ' Gestion des chaînes vides:
    If MyString = "" Then Exit Function
     
    ' Allocate moveable global memory.
    hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)
     
    ' Lock the block to get a far pointer to this memory.
    lpGlobalMemory = GlobalLock(hGlobalMemory)
     
    ' Copy the string to this global memory.
    lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)
     
    ' Unlock the memory.
    If GlobalUnlock(hGlobalMemory) <> 0 Then '"Could not unlock memory location. Copy aborted."
       GoTo OutOfHere
    End If
     
    ' Open the Clipboard to copy data to.
    If OpenClipboard(0&) = 0 Then ' "Could not open the Clipboard. Copy aborted."
       Exit Function
    End If
     
    ' Clear the Clipboard.
    EmptyClipboard
     
    ' Copy the data to the Clipboard.
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
     
    OutOfHere:
    If CloseClipboard() <> 0 Then ClipBoard_SetData = True
     
    End Function
    '---------------------------------------------------------------------------------------
    '---------------------------------------------------------------------------------------

    Citation Envoyé par MarcelG Voir le message
    Connais-tu un espace documentaire, en Français, traitant des DeclareFunction ...32, autrement dit la partie supérieure de ton code,
    Ce n'est pas en Français mais c'est facile a comprendre :
    Pour les API 32 bits : http://allapi.mentalis.org/apilist/apilist.php
    Pour les API 64 bits : https://jkp-ads.com/Articles/apideclarations.asp (c'est bien moins complet que l'autre site)

    Citation Envoyé par MarcelG Voir le message
    Un autre sur les Handle et compagnie.
    Le Handle est le numéro attribué par le système d'exploitation à une application (visible ou non). Certaines API travaillent avec ce numéro. Ici Hdc_Trouver permet de retrouver ce numéro. Il n'y a pas grand-chose d'autre à dire.

    Bonne programmation.

  12. #12
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Un grand merci. Laurent.

    Les tutoriels sont en anglais mais je vais essayer de m'y retrouver. Si tu en connais en italien.. ;

    Je vais consulter ta procédure.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  13. #13
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Laurent,

    Ouh la! Impressionnant§

    2 points s'il te plaît

    1 -

    J'ai tenté un "enregistrer sous"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hdc_EnvoyerTouches Hdc, vbKeyShift, vbKeyControl, vbKeyS
    Le code est fonctionnel

    Au demeurant, dispose-t-on de la collection des vbKey possible? Bien entendu hors chiffres et lettres.
    Je n'ai pas d'exemple sous la main, mais VbKeyAltGr serait-il effectif?

    2 -

    En termes d'utilisation.

    Si l'on code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hdc_EnvoyerTouches Hdc, vbKeyControl, vbKeyL
    Aucun Problème

    Maintenant, si l'on déclare ses paramètres, comme j'en ai l'habitude,
    le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim lacombine As Variant
    lacombine = Array(vbKeyControl, vbKeyL)
     
    ' Place le focus sur l'application et envoie Control L:
    If Hdc <> 0 Then
    Call Hdc_EnvoyerTouches(hWndApp:=Hdc, Combinaison:=lacombine)
    End If
    me retourne l'erreur

    L'argument dans ParamArray ne peut pas être nommé

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    pour récupérer le handle d'une fenêtre windows on peut le chercher dans FindWindow par la classe. La classe d'acrobat reader est AcrobatSDIWindow ( trouvée avec spy++)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Ouvrir_pdf()
    Dim lefichier As String
    lefichier = "D:\temp\nutriscore.pdf"
    ' Ouvre le fichier PDF:
    Shell "C:\windows\explorer.exe " & lefichier, vbMaximizedFocus
    T = Timer
    Do
        Hdc = FindWindow("AcrobatSDIWindow", vbNullString)
    Loop While Hdc = 0 And T + 10 > Timer
    SetForegroundWindow Hdc
    SetFocus Hdc
    SendKeys "^l"
    End Sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Au demeurant, dispose-t-on de la collection des vbKey possible? Bien entendu hors chiffres et lettres.
    Je n'ai pas d'exemple sous la main, mais VbKeyAltGr serait-il effectif?
    Oui. c'est dans l'aide Excel : https://docs.microsoft.com/fr-fr/off...code-constants
    Presque toutes les touches sont disponibles. Même certaines qui ne sont pas acceptées par SendKeys.
    Mais je n'ai pas trouvé vbKeyAltGr.

    Si tu as du mal à utiliser la fonction Hdc_EnvoyerTouches Hdc c'est parce que je n'ai pas bien expliqué la logique de keybd_event :

    keybd_event fonctionne en deux temps : 1: appuyer sur une touche; 2: relâcher la touche.

    donc il faut lire ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            keybd_event vbKeyControl, 0, 0, 0
            keybd_event vbKeyV, 0, 0, 0
            keybd_event vbKeyControl, 0, 2, 0
            keybd_event vbKeyV, 0, 2, 0
    Appuyer sur Control, et appuyer sur V, relâcher Control, relâcher V = ce que fait un humain.
    Avec le 3ème argument qui vaut 0 pour appuyer et 2 pour relâcher.

    Hdc_EnvoyerTouches Hdc simplifie cette formulation. Elle attend en argument, ParamArray Combinaison() As Variant, deux situations sont possibles :

    Soit Combinaison contient une ou plusieurs "touches" au format vbKey (numérique) séparée par une virgule :
    Hdc_EnvoyerTouches Hdc, vbKeyMultiply = une touche à simuler = * du clavier numérique et pas du clavier ordinaire.
    Hdc_EnvoyerTouches Hdc, vbKeyMenu, vbKeySnapshot = deux touches à simuler = Alt + Impr Ecran.
    Hdc_EnvoyerTouches Hdc, vbKeyControl, vbKeyShift, vbKeyA = trois touches à simuler = Crtl + MaJ + A.
    et plus si besoin.

    Soit Combinaison est une chaîne = la copier dans le presse-papiers puis la coller : car keybd_event ne gère pas les caractère spéciaux comme "é", sauf à les simuler au clavier, mais c'est lourd.

    @jurassic pork :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hdc = FindWindow("AcrobatSDIWindow", vbNullString)
    Merci pour l'astuce. Çà peut simplifier et sécuriser le traitement...

    Remarques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "C:\windows\explorer.exe " & lefichier, vbMaximizedFocus
    Chez mois vbMaximizedFocus n'a aucune efficacité pour mettre en fenêtre ouverte en grand, à vérifier sur vos configurations.

    Le but est de trouver le handle d'une fenêtre qui contient en libellé "Adobe", attention à la casse, moins pratique que la solution de "jurassic pork", mais qui permet d'adapter à toutes les situations, sous réserve de connaitre ce libellé, mais ça c'est pas bien compliqué, il suffit de lancer le traitement et de regarder ce qu'il y a d'écrit.

    Bonne programmation.

  16. #16
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour, j'ai oublié de parler des touches particulières Verrou numérique et Majuscule, qui sont des interrupteurs on/off, donc pour forcer un état à ON ou OFF il faut tenir compte de l'état actuel de la touche. Bref.

    Ajouter les API suivantes à celles déjà vues :
    Pour 64 bits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Declare PtrSafe Sub keybd_event Lib "USER32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
    Private Declare PtrSafe Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
    Pour 32 bits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Declare Function GetKeyState Lib "USER32" (ByVal nVirtKey As Long) As Integer
    Private Declare Function MapVirtualKey Lib "USER32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
    Et les constantes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Const VK_NUMLOCK = &H90
    Private Const VK_CAPITAL = &H14
    Private Const KEYEVENTF_EXTENDEDKEY = &H1
    Private Const KEYEVENTF_KEYUP = &H2
    Et les fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    '------------------------------------------------------------------------------------------------
    Public Sub SetNumLock(Etat As Boolean)
    '------------------------------------------------------------------------------------------------
    ' Etat = True : Active le clavier numérirque.
    ' Etat = False : Désactive le clavier numérique.
    '------------------------------------------------------------------------------------------------
    While GetKeyState(VK_NUMLOCK) = 1 + Etat
        SetKeyState VK_NUMLOCK, Etat
        DoEvents
    Wend
    End Sub
     
    '------------------------------------------------------------------------------------------------
    Public Sub SetCapital(Etat As Boolean)
    '------------------------------------------------------------------------------------------------
    ' Etat = True : Active le mode majuscule.
    ' Etat = False : Désactive le mode majuscule.
    '------------------------------------------------------------------------------------------------
    While GetKeyState(VK_CAPITAL) = 1 + Etat
        SetKeyState VK_CAPITAL, Etat
        DoEvents
    Wend
    End Sub
     
    '------------------------------------------------------------------------------------------------
    Private Sub SetKeyState(ByVal Key As Long, ByVal State As Boolean)
    '------------------------------------------------------------------------------------------------
        keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0
        keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
        If Key = 20 And State = False Then ' cas particulier pour VK_CAPITAL
            keybd_event 16, 0, 0, 0
            keybd_event 16, 0, 2, 0
        End If
    End Sub
    '------------------------------------------------------------------------------------------------
    '------------------------------------------------------------------------------------------------
    Bonne programmation.

  17. #17
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour le Forum,

    Bonjour JP et Laurent,

    Un grand merci pour vos réponses.

    Je regarderai cette semaine et ne manquerai pas de vous revenir.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  18. #18
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour les amis, Bonjour le Forum,

    JP

    En déclarant la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Le code que tu proposes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Jurassik_Pork:
     
    Dim Hdc2 As LongPtr
     
    Do
        Hdc2 = FindWindow("AcrobatSDIWindow", vbNullString)
    Loop While Hdc2 = 0 And t + 10 > Timer
    SetForegroundWindow Hdc2
    SetFocus Hdc2
    sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hdc2 = FindWindow("AcrobatSDIWindow", vbNullString)
    me retourne une erreur '13' Incompatibilité de type.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  19. #19
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    bonjour.
    A mon avis cela vient de la déclaration de l'API:

    Dans la déclaration que tu montres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Où lpClassName est de type String, mais cette déclaration ne marche que si tu es en 64 bits.

    Il faut vérifier ta déclaration en 32 bits.
    Si tu as repris la mienne tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
    Où lpClassName est de type Long.

    Donc ton appel FindWindow("AcrobatSDIWindow", vbNullString) est faux.

    Essaie de déclarer en 32 bits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    et faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FindWindowA("AcrobatSDIWindow", vbNullString)

  20. #20
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Laurent,

    Sur la base de ta dernière proposition, le code fonctionne Merci

    Cependant, la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hdc_EnvoyerTouches Hdc2, vbKeyControl, vbKeyL
    est sans effet.

    Tandis que ton code initial contenant
    - la procédure HDC_Trouver
    - la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    est bien effectif et la combinaison CTRL + L est bien réalisée

    Merci à toi

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JDBC]ouvrir un fichier pdf à partir d'un blob
    Par souletis dans le forum JDBC
    Réponses: 5
    Dernier message: 25/01/2007, 21h03
  2. [C#] Ouvrir un fichier PDF dans une autre fenetre
    Par ZePostman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/03/2006, 13h41
  3. [CGI] Ouvrir un fichier pdf
    Par Luffy Duck dans le forum Autres langages pour le Web
    Réponses: 2
    Dernier message: 09/12/2005, 09h21
  4. [FLASH MX2004] Ouvrir un fichier PDF
    Par james west dans le forum Flash
    Réponses: 1
    Dernier message: 28/09/2005, 10h42
  5. Réponses: 9
    Dernier message: 20/06/2005, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo