begin process at 2012 02 17 08:10:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > FAIRE UN APERÇU DES APPLIS / FICHIERS OUVERTS DANS UNE FORM AVEC L'API PRINTWINDOW

FAIRE UN APERÇU DES APPLIS / FICHIERS OUVERTS DANS UNE FORM AVEC L'API PRINTWINDOW


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :screen, printwindow, aperçu Niveau :Débutant Date de création :08/03/2007 Vu / téléchargé :4 700 / 5 598

Auteur : mortalino

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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

  • 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
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


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture MIDDLEBUTTON COPYPASTE [ADDIN VB6]
Source avec Zip Source avec une capture [CLASS] RESTREINDRE LE CURSEUR DE LA SOURIS À UNE ZONE DE CO...
Source avec Zip Source avec une capture [ADD-IN] COMPLÉMENT VB6 POUR CALCULER LE TEMPS D'EXÉCUTION D...
Source avec Zip Source avec une capture COMMONDIALOG AVEC PREVIEW IMAGE [USERCONTROL]
Source avec Zip Source avec une capture SUIVRE LE COURS D'UNE ACTION, POSSIBILITÉ D'AJOUTER LE MONTA...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [VBS] SPLASH SCREEN EN VBSCRIPT par hackoo
Source avec Zip Source avec une capture Source .NET (Dotnet) APERÇU AVANT IMPRESSION D'UN RICHTEXTBOX par Gabilach
Source avec Zip Source .NET (Dotnet) LIRE ET CHANGER LA LUMINOSITÉ DES ÉCRANS LCD (DE PORTABLE) C... par ShareVB
Source avec Zip CAPTURE D'ECRAN TRÉS PARAMETRABLE par wtor
Source .NET (Dotnet) AFFICHER UNE FORM SUR UN ÉCRAN SPÉCIFIÉ DANS UNE CONFIGURATI... par YoYoGoTT

Commentaires et avis

Commentaire de PCPT le 08/03/2007 07:39:15 administrateur CS

salut mortalino,
pas regardé le code (plus tard ce soir).
la fenêtre listant se remet-elle à jour? de manière à ce que la capture soit capturée (miroir en face du miroir)?
ta source peut être intéressante si ce listing est envoyé sur un PC du LAN, avec une compression jpg lors de la sélection distante...
++ ;)

Commentaire de MadM@tt le 08/03/2007 11:10:20

Salut mortalino,
l'idée est pas mal, j'avais aussi cherché la dedans mais on est obligé d'afficher la fenetre cible pour pouvoir en faire une capture, ce qui n'est pas pratique... Si quelqu'un a une idée pour contourner ça ?
Sous vista y'a les aperçus des fenetres quand elles sont réduites, mais c'est peut etre pas le meme fonctionnement que XP à ce niveau

Sinon c'est super pratique d'avoir fait ça avec une classe

Commentaire de PCPT le 08/03/2007 21:42:28 administrateur CS

re,
après lecture du code, c'est commenté, clair et intuitif. très bien.
quelques points tout de même :

*nommer "o"Var pour objet (form ou autre), ok. mais pourquoi faire de même avec une string?
*do loop ok. mais pourquoi for i=2 to 3? (je vois bien le param de GetNextWindow mais pourquoi?)
*résultat sur la form, toujours ok. mais si on veut afficher en picturebox? ta classe doit être réutilisable au mieux, un simple hDC devrait être en argument. au dev la responsabilité d'afficher sa form ou son objet avant
*tu ajoutes en collection, à la destruction un set nothing ne suffit pas. ici des chaînes donc pas trop grave mais il faut virer chaque item.

et le point critique : le listing n'est pas correct chez moi. 2vb (ide), ton projet en cours, 2 explorer, csms, foxmail et cette page, seul FF est listé :$

Commentaire de mortalino le 08/03/2007 22:41:29

Salut,

MadM@tt : Oui, c'est dommage de devoir afficher la fenêtre, mais avec xp, si la fenêtre est iconisée, c'est ça qui se dessine, hélas ! Je vais voir si effectivement il n'y a pas de possibilités autres..

PCPT : Non, tu as raison, la fenêtre ne se met pas à jour, mais j'ai une idée qui me trotte dans la tête. (et avec un de tes snippets..) ;)

Pour la variable oVar c'est (je pense que tu parles du oControl As String) parce que je voulais directement récupérer le nom du controle par .. As Control mais en mettant listbox en paramètre ça ne me récupère que le .Text de sélectionné. J'ai omis de le modifier.

Do loop, car dans une source que j'ai trouvé, il faisait 2 boucles. Si avec une ça suffit, je le modifierai.

Ok pour le hDc en param, je le ferai.

Pour la collection, il faut donc faire une boucle pour faire un Remove sur tous les Items ?

Aie Aie Aie pour le point critique, chez moi, moins de problème (cf. mon screen) seul souci : ton CSMS, il n'est pas trouvé dans la liste  :$
Je vais refaire des essais

Merci pour vos comms ;)
@++

Commentaire de apxa le 09/03/2007 20:36:54

Salut,
Est ce que ton code pourrais géré des applis qui seraient non visible à l'ecran (en mémoire) ?

Have Fun

Commentaire de mortalino le 10/03/2007 12:22:50

Salut,

non car j'utilise la vérification (dans la classe) par IsWindowVisible (api). Il te suffit de modifier le paramètre, mais cela risque de poser problème avec certains processus ayant un handle

Commentaire de apxa le 10/03/2007 13:23:14

Salut,
En Effet j'en ai fait un aussi basé sur les differents moyens de faire des captures par handle (notament pour des pages web) via le composant webbrowser, picturebox et handle mais pour certaines url mais sur certaine url je suis faussé par du js lost.focus

Have Fun.

Commentaire de moustachu le 12/03/2007 08:40:42

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

Commentaire de MadM@tt le 12/03/2007 20:48:29

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

Commentaire de apxa le 12/03/2007 21:39:53

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

Commentaire de moustachu le 13/03/2007 00:43:46

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

Commentaire de mortalino le 02/07/2008 23:38:49

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) :)

++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lancer Media player en full screen ? [ par Webmineur ] Salut,j'aimerai savoir:-comment lancer Media player en full screen.-connaitre la frequence du processeur-connaitre la quantité de Ram-savoir si une dl Screen Saver sous win 2000 [ par tjp88 ] problème avec windows 2000, mon screen saver qui affiche un simple formulaire, reste en taille réduit en bas a droite de l'ecran, et ne s'affiche pas Aucun aperçu des methodes d'un object [ par Timide ] Lorsque je declare un variable Ole je n'ai pas la liste de ses methodes apres le point de celle ciPouvez vous m'eclairez Timide Aperçu d'un fichier msg [ par Gbrissot ] Bonjour,dans une application je voudrais faire un aperçu rapide du contenu d'un message enregistrer à partir d'Outlook avec l'option "Enregistrer au f Comment inserer un aperçu dans une form ?? [ par Galereman ] Salut je cherche a inserer l'apercu d'un fichier rtf dans une form.J'ai essayer avec la methode printpreview mais ca ouvre une nouvelle fenetre propos [8d]cree un screen mate en visual basic [ par morganno ] salutje chercher une personne qui aurait le code d'un screen mate ou un screen mate fait. merci @++ Full screen sous access [ par moebius ] Existe t'il un moyen d'afficher un formulaire en plein écran (autre chose que la commande DoCmd.Maximize)Merci Quelqu'un sait il comment faire une aperçu avant impression [ par eltaris ] Ca m'interresserait beaucoupmerci Résolution écran...MARCHE PO Screen.Height !! [ par ghiscool ] Je cherches à avoir la résolution actuelle de mon écran pour pouvoir positionner au mieux mes formulaires, notamment lors des changements de résolutio Aperçu rapide (Quickview) [ par Vow ] Bonjour.J'ai lu que l'on pouvait voir toutes les fonctions incluses dans une DLL en utilisant l'"aperçu rapide" (QuickView).J'aurais voulu savoir si Q


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales