Faire un aperçu des applis / fichiers ouverts dans une form avec l'api printwindow

Soyez le premier à donner votre avis sur cette source.

Vue 5 921 fois - Téléchargée 5 710 fois

Description

Histoire de m'occuper, j'ai fait ce bout de code qui liste les fichiers et les applis ouverts dans une ListBox, et lors du choix de l'item, une autre Form s'ouvre avec l'aperçu dedans, grâce à l'API PrintWindow.

En fait je me baladais sur DelphiFR.com et j'ai vu ce titre, alors je l'ai fait en VB ;)

Source / Exemple :


Public Sub AddWindowsName(oForm As Form, oControl As String)
    Dim Handle      As Long
    Dim NewHandle   As Long
    Dim i           As Long
    Dim sNameWindow As String
    
' Handle de la Form qui appelle la méthode
    Handle = oForm.hWnd
    
' Handle de la Form qui appelle la méthode en propriété
    HandleForm = oForm.hWnd
    
' Passage de la valeur du Handle
    NewHandle = Handle
    
    On Local Error Resume Next
' Recherche des handle + affichage de la liste dans le contrôle mis en paramètre
    For i = 2 To 3
        Do
            Handle = NewHandle
            ' And IsIconic(Handle)
            If IsWindow(Handle) = 1 And (IsWindowVisible(Handle)) Then
                If Not Not (IsIconic(Handle)) Then
                    sNameWindow = String(100, Chr$(0))
                    GetWindowText Handle, sNameWindow, 100
                    sNameWindow = Left$(sNameWindow, InStr(sNameWindow, Chr$(0)) - 1)
                    
                    If sNameWindow <> vbNullString Then
                        oForm.Controls(oControl).AddItem sNameWindow
                        Debug.Print "~" & CStr(Handle) & "~" & sNameWindow & "~"
                        mcolWindows.Add CStr(Handle), sNameWindow
                    End If
                End If
            End If
            NewHandle = GetNextWindow(Handle, i)
        Loop Until Handle = NewHandle
    Next i
End Sub

Public Sub GenerateWindow(ByVal sName As String, ByVal oFormPrint As Form)
    
    ' obligé d'afficher la fenêtre voulue sinon elle n'apparait pas dans la form :$
    Load oFormPrint
    ShowWindow CLng(mcolWindows.Item(sName)), SW_SHOWNORMAL
    oFormPrint.Caption = sName
    oFormPrint.AutoRedraw = True
    PrintWindow mcolWindows.Item(sName), oFormPrint.hDC, 0
    ShowWindow CLng(mcolWindows.Item(sName)), SW_SHOWMINIMIZED
    oFormPrint.Show

End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Pour les admins :

comment est-il possible que mon code soit + téléchargé que vu ???
Vu / téléchargé: 3 705 / 5 497

(suis curieux) :)

++
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Madm@tt> Je suppose qu'il s'agit d'effectuer une copie d'écran de la fenêtre avant qu'elle ne se réduise (en interceptant le message de réduction de la fenêtre je suppose). Mais bon, tu ne vas pas voit la fenêtre s'actualiser.

Ensuite, à la place d'afficher le tooltip habituel, tu affiches l'image de la fenêtre. Bon je ne sais pas comment faire mais ça doit être une histoire de subclassing...

Le logiciel c'est Visual Task Tip. Ca m'intéresse de savoir comment ça marche exactement si tu trouves..

++
Moustachu
Messages postés
188
Date d'inscription
mercredi 15 mai 2002
Statut
Membre
Dernière intervention
25 avril 2009

Salut,
En fait le problème est quand la fenetre est caché voir en mémoire

Pour vous aiguillez, c'est possible avec les API
GetObjectAPI, CreateCompatibleDC, CreateDIBSection, SelectObject, GetDesktopWindow, ReleaseDC, BitBlt, DeleteDC, CopyMemory, ijlWrite (pour le jpg)

Après le problème c'est pour le handle, dans mes recherches le handle s'avère être un webbrowser.
Donc déjà c'est la merde (pour ce qui connaissent bien ce composant).
Première merde rencontré handle non existant (remedié par une copie en mémoire dans un picturebox)
Deuxième merde rencontré la fonction js document.focus d'une page web qui renvois une capture vide.

Je n'ai pas le temps de revoir cela mais dès que j'aurais quelque chose de nouveau je vous le ferais savoir.

Sinon y a en .net le composant webbrowser qui gère la capture en image mais ce qui m'interresse c'est une solution vb6.

Have Fun
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

Salut Moustachu, sous XP c'est possible ? ça m'interesse, t'aurais pas le nom du logiciel (ou meme une idée de la technique utilisée héhé ^^ ?) Merci
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Bonjour,

C'est sympa comme source. Sous vista je ne sais pas comment cela fonctionne mais sous XP, je sais qu'il existe des programmes qui montre la miniature de la fenêtre lorsqu'elle est réduite. Elle n'est disponible que lorsque la fenêtre a été affichée.

Moustachu
Afficher les 12 commentaires

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.