Coller une donnée dans n'importe quel application

4/5 (2 avis)

Vue 9 180 fois - Téléchargée 833 fois

Description

en Anglais, ca donnerait "SystemWide Paste"
mais bon...

C'est un mini-projet que je fais pour une personne du forum, et qui ne fait que reprendre du code d'une de mes autres mini-sources...

une pseudo donnée est generée aléatoirement, à un certain interval de temps.
ce simule l'évolution d'une donnée en temps reel.

en pressant Alt + V , vous collez cette donnée dans l'application de votre choix.

Source / Exemple :


Option Explicit
  
Private Declare Function AttachThreadInput Lib "user32.dll" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long
Private Declare Function GetFocus Lib "user32.dll" () As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal ID As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long

Private Const MOD_ALT As Long = &H1
  
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Private Const WM_PASTE As Long = &H302

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type Msg
    hWnd As Long
    Message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
End Type
  
Private mQuit As Boolean
Private mhWnd As Long

Private Sub ProcessMessages()
Dim tMessage As Msg
Dim hWnd_Target As Long
    mQuit = False
    Do
        DoEvents
        WaitMessage
        '# Récupération du message WM_HOTKEY
        If PeekMessage(tMessage, mhWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
            '# L'utilisateur a pressé Alt + V : on place notre donnée dans le presse-papier
            Clipboard.Clear
            Clipboard.SetText CcTxtRealTime.Text, vbCFText
            '# On récupère le handle de la fenetre qui as le focus
            hWnd_Target = GetForegroundWindow
            '# On récupère le handle du controle qui as le focus (GetFocus ne fonctionne que pour le Thread en cours)
            AttachThreadInput App.ThreadID, GetWindowThreadProcessId(hWnd_Target, 0), True
            SendMessage GetFocus, WM_PASTE, 0, ByVal 0&
            AttachThreadInput App.ThreadID, GetWindowThreadProcessId(hWnd_Target, 0), False
        End If
    Loop Until mQuit
End Sub
   
Private Sub CcTimMain_Timer()
    If mQuit Then
        '# On demande a quitter, on coupe le Timer
        CcTimMain.Enabled = False
    Else
        '# Pseudo Génération de notre donnée en temps reel
        Randomize Timer
        CcTxtRealTime.Text = (120 + Rnd - Rnd)
    End If
End Sub

Private Sub Form_Load()
    mhWnd = Me.hWnd
    '# Le raccourci sera Alt + V
    RegisterHotKey mhWnd, 1, MOD_ALT, vbKeyV
    '# Affichage de la forme
    Me.Show
    '# On regarde les messages
    ProcessMessages
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    '# On a demandé a quitter
    mQuit = True
    '# On désenregistre le raccourcis
    UnregisterHotKey hWnd, 1
End Sub

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
30 juin 2006 à 17:17
tu peux utiliser SPY++

tu aura ainsi de quoi trouver la sous-fenetre en utilisant FindWindow(Ex)
cs_Booster
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

30 juin 2006 à 16:54
lu renfield,
Ta source est parfaite mais j'ai un problème et j'ai fait à peu prés tout les sites pour trouver mais personne n'a su m'aider.
Le probleme est simple, il me faut coller du texte dans une sous fenetre de dreamweaver car avec ta technique le focus est redonné a dreamweaver et non à la sous fenetre, j'ai essayer de recupérer le nom de la sous fenetre mais impossible de trouver comment je pourais faire ca ?
Je te remercie d'avance et merci pour ta source qui ma bien aidé ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.