cs_jcq
Messages postés211Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention15 janvier 2010
-
23 mars 2005 à 16:47
mat_yaute
Messages postés8Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention 6 mai 2008
-
30 sept. 2008 à 01:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
mat_yaute
Messages postés8Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention 6 mai 2008 30 sept. 2008 à 01:24
Excellente source qui m'a permis de faire enfin ce que je voulais faire dans mon projet, à savoir faire une capture d'une fenêtre comportant un controle ActiveX.
PWM63
Messages postés127Date d'inscriptionlundi 11 octobre 2004StatutMembreDernière intervention18 mai 2016 15 mai 2008 à 18:01
Petit commentaire après avoir regardé l'utilisation de l'API :)
HVB, je te soutiens dans tes argumentations, d'ailleurs, ceux de OneHacker sont relativement court.
Il est vrai que faire 1000 screenshots en 1 seconde, ca ne doit pas être évident, mais les enregistrer dans 1000 fichiers différents sur le disque, ca doit être encore plus tendu ! A part peut-être sur le dernier Cray ? (lol)
Ceci dit, si ce que dit OneHacker est vrai, alors je suis également certain qu'il arrivera à faire un moteur de recherche mieux que Google... (Larry P. et Sergey B., cravachez dur, OneHacker arrive !!!)
hpfx
Messages postés22Date d'inscriptionvendredi 29 août 2003StatutMembreDernière intervention18 novembre 2007 16 août 2007 à 11:54
heu au debut, vous parlez de VB6, ca tombe bien ,je recherche la même chose en VB6, certains ici disent avoir vu ce code pour VB6, est-ce que vous ne l'auriez pas encore quelquespart.
oui je sais VB6 c'est tout pourris etc etc, mais bon, c'est un choix, et il faut reconnaitre que c'est un language simple et qui marche sous toutes les plateformes (de win95 à vista).
Merci d'avance.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 8 févr. 2007 à 13:40
pour les appels "inter-threads" je crois qu'il faut utiliser la commande Synlock. et gérer les erreurs de façon à ce que quand la valeur n'est pas acessible afficher un message d'erreur du genre "Objet déjà utilisé".
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 8 févr. 2007 à 11:54
je commence un client irc là, mais avant ça je me crée une classe personalisé de gestion des sockets, à la maniere de winsock en vb6. Le problème c'est qu'en VB2005, les appels "inter-threads" à des objets forms ou composant de la form levent une exception, j'ai donc egalement du ecrire une gestion de ce problème... bref, perso, j'ai de quoi faire ^^
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 7 févr. 2007 à 17:54
D'accord, sinon t'a une idée de projet à faire à plusieurs ? Ca me changerait un peu ^^.
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 6 févr. 2007 à 23:39
Dans ce cas ne le poste pas, surtout si c'est "mieux que google" (ahah) et que tu veux te faire de l'argent.
C'est un peu ce que je dis au dessus, les applis que je compte présenter en fin d'année pour mes examens, j'attends de les présenter avant de les poster, j'ai peur qu'un mec de la même session que moi le pompes, ou fasse un truc semblable.
(ouais je suis parano, c'est sur...)
C'est sur que normalement je le presenterais toujours mieux qu'un usurpateur mais quand même...
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 6 févr. 2007 à 19:51
Okay d'accord. Je te pardonne mon cher HVB. Bon à part ça j'ai un truc à vous dire : je vais bientôt faire mon moteur de recherche et mieux que Google et je compte me faire de l'argent mais j'hésite à le poster sur VBFrance car on peut me recopier avec le code.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 5 févr. 2007 à 17:50
ok merci Renfield.
Le long debat inutile du dessus a un peu joué dans mon emportement.
Je m'excuse donc, OneHacker, pour ma derniere remarque relative au snippet, mais je soutiens bien sur tout ce que j'avance au sujet du shoter... ;)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 5 févr. 2007 à 12:22
dès son premier ajout, d'ailleurs.
Mais celui-ci était mal formatté et le snippet a été refusé
au second ajout, celui qui est visible, il a omis de te citer.
une semaine après, il a reposté son snippet, en te citant, mais il n'a pas été accepté...
je rejette donc celui du 18.12
et mets en place celui du 20.12
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 5 févr. 2007 à 11:09
Et à quand une mise à jour du codyx ou tu as posté ma source sans me citer?
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 4 févr. 2007 à 01:56
Si ça peut reduire ta mauvaise fois, j'ai quatre PC chez moi, je ne fais pas mes tests que sur une seule machine.
Et comme je l'ai dit au dessus :
[Quote]
Un truc vraiment stupide qui rend impossible de marcher ton code, c'est que les fichiers sont appelé Nom_du_shot - date_heure (ScreenShot - 01-01-2007 23 45 02), donc tu va réecrire tout le temps dans le meme fichier, resultat... 1 screen par seconde lol.
[Quote]
Aurais tu en fait une version totalement amméliorée de mon prog, que tu ne nous as pas donné ou es-ce que tu t'obstines à refuser de lire mes messages?
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 4 févr. 2007 à 01:30
Ben t'a pas les mêmes résultats que moi c'est tout.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 4 févr. 2007 à 01:22
lol...! oui, chez toi, ça marche. Surtout si tu l'as testé "avant moi" (??).
Mais pour toutes les autres personnes, tu as gagné, je vais te repondre à nouveau, et vraiment conclure.
Tout d'abord il faut noter que ton exemple, tu l'as donné plus haut des les commentaires. Je l'ai regardé, la seule modification que tu ai faite dans le coeur du code,
c'est sur cette ligne :
Threading.Thread.Sleep(interval * 1000)
que tu as remplacé par celle ci :
Threading.Thread.Sleep(interval)
variable interval, que tu modifie via une combobox dans l'IHM, que tu multiplie ou non 1000.
Un truc vraiment stupide qui rend impossible de marcher ton code, c'est que les fichiers sont appelé Nom_du_shot - date_heure (ScreenShot - 01-01-2007 23 45 02), donc tu va réecrire tout le temps dans le meme fichier, resultat... 1 screen par seconde lol.
Moi j'avais ajouté now.millisecondes au nom de fichier, ce qui avait déja plus de sens.
Le probleme c'est que bien sur, il faut un certain temps pour effectuer le traitement de la capture, les resultats sont donc un peu aléatoire, et surtout, ils dependent du format specifié, et du type de la capture (ecran entier, fenetre + ou - grande)
Mais quelque soit le type selectionné, le resultat ne depassera pas les 50 screens par secondes (au mieux, avec un format de compression elevé, et une fenetre assez petite).
Pour finir, tu parle de multithreading mais tu ne le met meme pas en oeuvre.
Mais meme en instanciant un thread par shot (ce que j'avais tenté au depart), au contraire, plusieurs exeptions de gdi sont levée lors de l'enregistrement de fichier, ce qui peut reduit encore plus les performances.
Tout ça pour prouver que tu as eu raison de souligner qu'on pouvait faire + qu'un screen par secondes, ce que j'ai modifié dans ma derniere version pour faire des captures vidéos (j'autorise un screen toutes les 100 millisecondes), mais les performances que tu avancent sont totalement impossible, et le sample que tu as mis en ligne ne marche pas...
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 3 févr. 2007 à 23:19
Si ca marche puisque je l'ai testé avant toi et j'ai déjà argumenté je vais pas le faire à chaque fois que tu postes je t'ai expliqué et j'y peux rien si tu es têtu.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 3 févr. 2007 à 21:35
tu me gaves, tu ne lis pas mes messages, tu n'argumentes pas, et je vois que tu ne testes pas ce que je dis.
Ca ne marche pas, tu n'as pas de message d'erreur, mais ça ne genere pas 1000 screens par secondes, ce qui est tout à fait logique, et ce pour une raison physique, qui n'a d'ailleurs pas à voir avec ta ram ni ton procésseur mais avec ton disque dur.
Pourquoi pense tu que j'ai limité à 1 screen par seconde au debut?
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 2 févr. 2007 à 18:34
Si on peut, je t'ai passé le code source exprès ! J'y peux rien si t'a un ordi lent moi en utilisant 128 de RAM et 1.4Ghz AMD Athlon ca marche !
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 31 janv. 2007 à 22:34
Bon lol, pour conclure cette histoire d'intervalle, qui est devenu un bete débat sans interet.
Non on ne peut pas effectuer un screen toutes les millisecondes, cela reste coherent en reduisant à 1 screen toutes les 100 millisecondes mais en specifiant un format de sortie leger (jpg, png, gif) et sans shoter l'ecran entier... A un interval plus bas, on se retrouve avec un resultat plus aléatoire, mais sans pour autant generer d'erreures.
C'est pour cela que dans la version finale que je fini de developper actuellement, je n'autoriserais pas d'interval inferieure à 100 millisecondes, ce qui est déja un peu trop bas, mais qui marche tres bien pour les captures de vidéos.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 30 déc. 2006 à 19:37
J'ai un disque dur Maxtor 100GO
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 20 déc. 2006 à 19:26
Tu as filé comme seule preuve "ton" (mon) prog qui n'est en rien ammélioré niveau perf'...
J'ai effectivement été un peu dur en ne citant les performances qu'en selectionnant le format bitmap et une capture d'ecran complete (tu n'as preciser nulle part ce que tu utilisais).
Pour tenter d'aller dans ton sens, j'ai essayé en capturant la fenetre active (toute petite, en l'occurence le sample de mon code...) au format gif, ça me genere environ 50 gifs (13ko chacuns) par secondes... on est très loin du screen par milliseconde.
Donc je suis obligé de me repeter :
Sache que selon toi, vu que "ça marche" :
1) tu ecrirais donc 1000 fichiers en une seconde, au format gif, le plus leger cela fera à peu près 145Mo (en comptant environ 150ko par screen), en bitmap cela ferait 2Go, donc déja j'aimerais bien avoir la marque de ton disque dur.
Ceci en prenant bien sur une capture complete de l'ecran.
2) Je t'ai donné le moyen de tester ton appli, avec le truc du compteur, tu as dit toi même que c'etait sans succés... je ne comprend vraiment pas comment tu peux continuer à pretendre que ça marche.
Pour finir, je n'apprecie pas trop le "Tu dis n'impote quoi" alors que TU debites un amas de betises et que je m'efforce de rester courtois avec toi, en argumentant à chacun de mes messages.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 20 déc. 2006 à 16:54
TU dis n'impote quoi j'ai un ordi moins puissant que toi et ca marcche très bien. Et ce n'est pas sans intérêt et c'est toi qui est obstiné. lol
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 19 déc. 2006 à 19:58
et j'apprecie vraiment ta façon d'ignorer les messages qui ne t'arrange pas ^^
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 19 déc. 2006 à 19:55
c'est exactement ce que je disais, AUCUNS INTERETS.
Car cela ne marche pas du tout, et comme je l'avais precisé, il est evidemment impossible de faire un screen par miliseconde. Je viens de tester avec ton appli, qui est n'est en fait que la mienne avec une option pour ne pas multiplier par 1000 l'intervalle... mais malgré ça on se retrouve avec 1 voir 2 screen par secondes, sur un petit pentium M 1.6Ghz, avec 512Mo de ram.
Je te l'ai dit depuis le debut mais tu t'es obstiné...
quelle perte de temps :)
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 19 déc. 2006 à 18:08
J'ai essayé de mettre 2 Application.DoEvents quand l'intervalle est rapide pour que cela force les images à s'enregistré de suite mais cela ne fait aucun effet. Et j'ai fait que si le thread est en cours lors de la fermeture, ca le ferme.
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 18 déc. 2006 à 16:55
et je viens de voir que tu as ajouté mon code au snippets en gardant MES commentaires et sans me prevenir...
tu abuses vraiment...
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 18 déc. 2006 à 13:18
donc si tu le lance une seconde, il te crée 1000 fichiers DIFFERENTS?
Fais un test, en shootant par exemple un compteur (qui se raffraichit à chaque millisecondes) et tu verras que tu n'auras surement pas 1000 fichiers affichant un temps different sur le compteur.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 18 déc. 2006 à 11:43
Si justement c'est possible dans peux de temps je me le zip sur mon site ...
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 18 déc. 2006 à 11:15
l'option de "répétition de screenshot à intervalle paramétrable" y est deja, meme sur la vieille version presente ici, ce que je remettais en cause, c'est le fait de faire un screen toutes les millisecondes, ce qui n'est pas possible.
Je mettrais bientot la version 3 de mon shoter qui propose bcp de nouvelles options pratiques.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 18 déc. 2006 à 10:10
Demain je met le zip sur mon site de nouveau(comme t'avait pas pris le zip depuis ^^) avec la répétition de screenshot à intervalle paramétrable.
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 18 déc. 2006 à 09:39
???
Date création : 23/03/2005 03:17:44
Date de mise à jour : 29/03/2005 02:11:27
La seule MAJ que j'ai faite est celle relative à la remarque de JesusOnline, puis surement un petit problème d'orthographe plus tard...
J'ai effectivement fait de grosse mise à jour du projet sample mais ne les ai jamais mis en ligne... Serais tu réelement un...hacker? ah ah...
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 18 déc. 2006 à 03:12
J'avoue que depuis la première version tu as fait pas mal d'amélioration ! Je me penche dessus pour voir ce que je peux faire !
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 22 févr. 2006 à 11:40
Je l'ai pas sur cette ordi, patiente sur le 1er ou 2ème weekend de la rentrée
Dans le programme c'est la technique bourrin des threads utiliser en masse ! ;-)
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 22 févr. 2006 à 00:17
bah ecoute, montre moi tes modifs ici, car je t'avoue que je n'y crois toujours pas
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 21 févr. 2006 à 20:40
Non tu as bien lu je fais 1000 screnshots pas secondes et pas de problème niveau disque dur, et ne rame pas grâce au threading !!!
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 21 févr. 2006 à 15:36
cela m'ettonerait fortement que tu arrives à faire un screen par millisecondes... qu'as tu modifier, seulement le temps de pause entre les screens de la fonction loop?
1 screen par millisecondes sous entendrais 1000 screens par secondes, rien que niveau accés disque c'est impossible...
je pense que tu veux dire que tu as simplement initialisé la boucle à 1millisecondes de pause, mais le traitement lui, prend plus de temps, c'est sur.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 21 févr. 2006 à 01:03
Je met 9/10 ! J'ai amélioré ta source de façon à ce qu'on choisi la latence de loop en secondes ou millisecondes et j'arrive à faire des screenschot 1/milisecondes sans faire ramer l'ordi sans faire d'erreurs !!
Redman
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 26 oct. 2005 à 10:46
:)
cs_ankou22
Messages postés81Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 7 juin 2012 26 oct. 2005 à 09:59
HVB Tu es sité dans fichier source... et je rajoute une note...
oups ;)
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 26 oct. 2005 à 09:37
c'est sur ta source qu'il faut me citer alors, pas ici ^^
cs_ankou22
Messages postés81Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 7 juin 2012 26 oct. 2005 à 01:47
Bonjour [ hvb ],
Je viens de poser une source sur :
que j'ai réalisé avec l'aide de ta fonction ShotScreenPart(). Je voulais ré-inventer la roue mais je me suis résigné...
Merci
OverDarck
Messages postés116Date d'inscriptionjeudi 12 juillet 2001StatutMembreDernière intervention23 juin 2005 18 juil. 2005 à 10:21
pas mal mais sa ne marche pas pour un programme lancé avec les droits "systemes", comme dans mon cas pour une applicaiton CGI...
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 25 mars 2005 à 12:29
l'utilisation d'objets "graphics" : excellent!
Je ne suis pas chez moi mais je modifie le code des ce soir, merci beaucoup pour ton aide!
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 25 mars 2005 à 00:12
Ajoute le mot clé Shared a tes fonctions ca permettra de les utiliser sans devoirles instancier.
sinon tu initialise des variables que tu n'utilises pas :)
Le code a surement besoin de quelques optimisation, mais c'est assez bien.
J'avais une autre solution :
Public Class ScreenShot2
<DllImport("user32.dll")> _
Private Shared Function GetDesktopWindow() As IntPtr
End Function
<DllImport("gdi32.dll")> _
Private Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean
End Function
Private Const SRCCOPY As Integer = 13369376
Public Shared Function GetScreenBitmap() As Bitmap
Dim gScreen As Graphics = Graphics.FromHwnd(GetDesktopWindow())
Dim bmpScreen As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim gBmp As Graphics = Graphics.FromImage(bmpScreen)
Dim hDCScreen As IntPtr = gScreen.GetHdc()
Dim hDCBmp As IntPtr = gBmp.GetHdc()
BitBlt(hDCBmp, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, hDCScreen, 0, 0, SRCCOPY)
gScreen.ReleaseHdc(hDCScreen)
gBmp.ReleaseHdc(hDCBmp)
Return bmpScreen
End Function
End Class
(source traduit de C#)
Pour ce qui est de faire une capture sans utilises d'api, ca doit etre possible en utilisant le framework de direct, mais c'est pas parce qu'on fait du .net qu'on peut pas utiliser les api, le framework repose sur les apis ...
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 24 mars 2005 à 12:39
jcq : tu ne m'as toujours pas repondu. C'est voulu?
cs_jcq
Messages postés211Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention15 janvier 2010 24 mars 2005 à 08:54
Oui excusez moi quand je parle d'api, je veux bien sur parler d'api win32.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 24 mars 2005 à 03:22
jcq : Ok explique moi alors comment faire une capture avec le framework seulement! Je suis preneur.
Mais en quoi les api sont obsolete?? ou as tu vu ça ?? Ou est il ecrit qu'on ne doit pas appeler d'API en .net?
Malgré ça, si tu as les equivalents des apis que j'utilise, je suis preneur aussi!
Pym Corp : plein de code su le net utilisent les device context pour faire des captures...ce code n'est pas l'adaptation d'un code vb6 mais d'un code en c. Du moins il en est fortement inspiré :)
Pym Corp
Messages postés166Date d'inscriptionjeudi 9 décembre 2004StatutMembreDernière intervention18 novembre 2007 23 mars 2005 à 20:24
Je crois qu'on doit pouvoir effectivement se passer de quelques API sur gdi32 ici quand même.
Et j'ai déjà vu ce code en vb6 quelque part, il est fort possible que ce code ne soit qu'une adaptation à .NET, mais bon, pas de quoi en faire tout un fromage
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 mars 2005 à 18:25
'obsolète' n'est surement pas le mot qui convient, sans API pas de framework ni aucune autre virtual machine.
cs_jcq
Messages postés211Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention15 janvier 2010 23 mars 2005 à 18:03
Ne le prends pas mal, ce que je veux dire c'est tout simplement utilise le code .net (framework) pour effectuer une capture et pas les API qui sont obsoletes avec le framework.
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 23 mars 2005 à 17:39
Ce n'est pas parcque j'appele des API que c'est du vb6... effectivement la plupart du code pourrait etre copié dans vb6, vu que ce sont des appels aux api, excepté cette ligne qui n'est pas des moins importante :
Bitmap.FromHbitmap(New IntPtr(bmplng))
qui est bien un appel propre au framework.net (lis tout le code avant de critiquer).
Utiliser l'objet bitmap du framework permet d'acceder à la fonction FromHbitmap, mais aussi de convertir l'image en le format desiré!
On peut peut etre le modifier pour faire la meme chose en vb6, mais la n'etait pas mon but.
De plus, meme si le code marchait en vb6, pourquoi coder une classe en vb6 pour un projet en .net??
Non vraiment, ta critique est à revoir. See u
cs_jcq
Messages postés211Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention15 janvier 2010 23 mars 2005 à 16:47
euh là je crois que c'est du code VB6 mis dans VB.NET...
Désolé de te dire ça mais aucun intérêt, autant rester sous vb6.
Lorsque tu développes en .NET, l'intérêt est d'utiliser le framework .net
30 sept. 2008 à 01:24
15 mai 2008 à 18:01
HVB, je te soutiens dans tes argumentations, d'ailleurs, ceux de OneHacker sont relativement court.
Il est vrai que faire 1000 screenshots en 1 seconde, ca ne doit pas être évident, mais les enregistrer dans 1000 fichiers différents sur le disque, ca doit être encore plus tendu ! A part peut-être sur le dernier Cray ? (lol)
Ceci dit, si ce que dit OneHacker est vrai, alors je suis également certain qu'il arrivera à faire un moteur de recherche mieux que Google... (Larry P. et Sergey B., cravachez dur, OneHacker arrive !!!)
18 août 2007 à 03:33
Une utilisation possible de ce code source ?
seb
16 août 2007 à 11:54
oui je sais VB6 c'est tout pourris etc etc, mais bon, c'est un choix, et il faut reconnaitre que c'est un language simple et qui marche sous toutes les plateformes (de win95 à vista).
Merci d'avance.
8 févr. 2007 à 13:40
8 févr. 2007 à 11:54
7 févr. 2007 à 17:54
Redman
6 févr. 2007 à 23:39
C'est un peu ce que je dis au dessus, les applis que je compte présenter en fin d'année pour mes examens, j'attends de les présenter avant de les poster, j'ai peur qu'un mec de la même session que moi le pompes, ou fasse un truc semblable.
(ouais je suis parano, c'est sur...)
C'est sur que normalement je le presenterais toujours mieux qu'un usurpateur mais quand même...
6 févr. 2007 à 19:51
5 févr. 2007 à 17:50
Le long debat inutile du dessus a un peu joué dans mon emportement.
Je m'excuse donc, OneHacker, pour ma derniere remarque relative au snippet, mais je soutiens bien sur tout ce que j'avance au sujet du shoter... ;)
5 févr. 2007 à 12:22
OneHacker a bien tenté de te citer dans le Snippet
http://www.codyx.org/snippet_faire-capture-ecran_8.aspx
dès son premier ajout, d'ailleurs.
Mais celui-ci était mal formatté et le snippet a été refusé
au second ajout, celui qui est visible, il a omis de te citer.
une semaine après, il a reposté son snippet, en te citant, mais il n'a pas été accepté...
je rejette donc celui du 18.12
et mets en place celui du 20.12
5 févr. 2007 à 11:09
4 févr. 2007 à 01:56
Et comme je l'ai dit au dessus :
[Quote]
Un truc vraiment stupide qui rend impossible de marcher ton code, c'est que les fichiers sont appelé Nom_du_shot - date_heure (ScreenShot - 01-01-2007 23 45 02), donc tu va réecrire tout le temps dans le meme fichier, resultat... 1 screen par seconde lol.
[Quote]
Aurais tu en fait une version totalement amméliorée de mon prog, que tu ne nous as pas donné ou es-ce que tu t'obstines à refuser de lire mes messages?
4 févr. 2007 à 01:30
4 févr. 2007 à 01:22
Mais pour toutes les autres personnes, tu as gagné, je vais te repondre à nouveau, et vraiment conclure.
Tout d'abord il faut noter que ton exemple, tu l'as donné plus haut des les commentaires. Je l'ai regardé, la seule modification que tu ai faite dans le coeur du code,
c'est sur cette ligne :
Threading.Thread.Sleep(interval * 1000)
que tu as remplacé par celle ci :
Threading.Thread.Sleep(interval)
variable interval, que tu modifie via une combobox dans l'IHM, que tu multiplie ou non 1000.
Un truc vraiment stupide qui rend impossible de marcher ton code, c'est que les fichiers sont appelé Nom_du_shot - date_heure (ScreenShot - 01-01-2007 23 45 02), donc tu va réecrire tout le temps dans le meme fichier, resultat... 1 screen par seconde lol.
Moi j'avais ajouté now.millisecondes au nom de fichier, ce qui avait déja plus de sens.
Le probleme c'est que bien sur, il faut un certain temps pour effectuer le traitement de la capture, les resultats sont donc un peu aléatoire, et surtout, ils dependent du format specifié, et du type de la capture (ecran entier, fenetre + ou - grande)
Mais quelque soit le type selectionné, le resultat ne depassera pas les 50 screens par secondes (au mieux, avec un format de compression elevé, et une fenetre assez petite).
Pour finir, tu parle de multithreading mais tu ne le met meme pas en oeuvre.
Mais meme en instanciant un thread par shot (ce que j'avais tenté au depart), au contraire, plusieurs exeptions de gdi sont levée lors de l'enregistrement de fichier, ce qui peut reduit encore plus les performances.
Tout ça pour prouver que tu as eu raison de souligner qu'on pouvait faire + qu'un screen par secondes, ce que j'ai modifié dans ma derniere version pour faire des captures vidéos (j'autorise un screen toutes les 100 millisecondes), mais les performances que tu avancent sont totalement impossible, et le sample que tu as mis en ligne ne marche pas...
3 févr. 2007 à 23:19
3 févr. 2007 à 21:35
Ca ne marche pas, tu n'as pas de message d'erreur, mais ça ne genere pas 1000 screens par secondes, ce qui est tout à fait logique, et ce pour une raison physique, qui n'a d'ailleurs pas à voir avec ta ram ni ton procésseur mais avec ton disque dur.
Pourquoi pense tu que j'ai limité à 1 screen par seconde au debut?
2 févr. 2007 à 18:34
31 janv. 2007 à 22:34
Non on ne peut pas effectuer un screen toutes les millisecondes, cela reste coherent en reduisant à 1 screen toutes les 100 millisecondes mais en specifiant un format de sortie leger (jpg, png, gif) et sans shoter l'ecran entier... A un interval plus bas, on se retrouve avec un resultat plus aléatoire, mais sans pour autant generer d'erreures.
C'est pour cela que dans la version finale que je fini de developper actuellement, je n'autoriserais pas d'interval inferieure à 100 millisecondes, ce qui est déja un peu trop bas, mais qui marche tres bien pour les captures de vidéos.
30 déc. 2006 à 19:37
20 déc. 2006 à 19:26
J'ai effectivement été un peu dur en ne citant les performances qu'en selectionnant le format bitmap et une capture d'ecran complete (tu n'as preciser nulle part ce que tu utilisais).
Pour tenter d'aller dans ton sens, j'ai essayé en capturant la fenetre active (toute petite, en l'occurence le sample de mon code...) au format gif, ça me genere environ 50 gifs (13ko chacuns) par secondes... on est très loin du screen par milliseconde.
Donc je suis obligé de me repeter :
Sache que selon toi, vu que "ça marche" :
1) tu ecrirais donc 1000 fichiers en une seconde, au format gif, le plus leger cela fera à peu près 145Mo (en comptant environ 150ko par screen), en bitmap cela ferait 2Go, donc déja j'aimerais bien avoir la marque de ton disque dur.
Ceci en prenant bien sur une capture complete de l'ecran.
2) Je t'ai donné le moyen de tester ton appli, avec le truc du compteur, tu as dit toi même que c'etait sans succés... je ne comprend vraiment pas comment tu peux continuer à pretendre que ça marche.
Pour finir, je n'apprecie pas trop le "Tu dis n'impote quoi" alors que TU debites un amas de betises et que je m'efforce de rester courtois avec toi, en argumentant à chacun de mes messages.
20 déc. 2006 à 16:54
19 déc. 2006 à 19:58
19 déc. 2006 à 19:55
Car cela ne marche pas du tout, et comme je l'avais precisé, il est evidemment impossible de faire un screen par miliseconde. Je viens de tester avec ton appli, qui est n'est en fait que la mienne avec une option pour ne pas multiplier par 1000 l'intervalle... mais malgré ça on se retrouve avec 1 voir 2 screen par secondes, sur un petit pentium M 1.6Ghz, avec 512Mo de ram.
Je te l'ai dit depuis le debut mais tu t'es obstiné...
quelle perte de temps :)
19 déc. 2006 à 18:08
J'ai essayé de mettre 2 Application.DoEvents quand l'intervalle est rapide pour que cela force les images à s'enregistré de suite mais cela ne fait aucun effet. Et j'ai fait que si le thread est en cours lors de la fermeture, ca le ferme.
Redman
18 déc. 2006 à 16:55
tu abuses vraiment...
18 déc. 2006 à 13:18
Fais un test, en shootant par exemple un compteur (qui se raffraichit à chaque millisecondes) et tu verras que tu n'auras surement pas 1000 fichiers affichant un temps different sur le compteur.
18 déc. 2006 à 11:43
18 déc. 2006 à 11:15
Je mettrais bientot la version 3 de mon shoter qui propose bcp de nouvelles options pratiques.
18 déc. 2006 à 10:10
Redman
18 déc. 2006 à 09:39
Date création : 23/03/2005 03:17:44
Date de mise à jour : 29/03/2005 02:11:27
La seule MAJ que j'ai faite est celle relative à la remarque de JesusOnline, puis surement un petit problème d'orthographe plus tard...
J'ai effectivement fait de grosse mise à jour du projet sample mais ne les ai jamais mis en ligne... Serais tu réelement un...hacker? ah ah...
18 déc. 2006 à 03:12
22 févr. 2006 à 11:40
Dans le programme c'est la technique bourrin des threads utiliser en masse ! ;-)
Redman
22 févr. 2006 à 00:17
21 févr. 2006 à 20:40
Redman
21 févr. 2006 à 15:36
1 screen par millisecondes sous entendrais 1000 screens par secondes, rien que niveau accés disque c'est impossible...
je pense que tu veux dire que tu as simplement initialisé la boucle à 1millisecondes de pause, mais le traitement lui, prend plus de temps, c'est sur.
21 févr. 2006 à 01:03
Redman
26 oct. 2005 à 10:46
26 oct. 2005 à 09:59
oups ;)
26 oct. 2005 à 09:37
26 oct. 2005 à 01:47
Je viens de poser une source sur :
http://www.vbfrance.fr/code.aspx?ID=34354
que j'ai réalisé avec l'aide de ta fonction ShotScreenPart(). Je voulais ré-inventer la roue mais je me suis résigné...
Merci
18 juil. 2005 à 10:21
25 mars 2005 à 12:29
Je ne suis pas chez moi mais je modifie le code des ce soir, merci beaucoup pour ton aide!
25 mars 2005 à 00:12
sinon tu initialise des variables que tu n'utilises pas :)
Le code a surement besoin de quelques optimisation, mais c'est assez bien.
J'avais une autre solution :
Public Class ScreenShot2
<DllImport("user32.dll")> _
Private Shared Function GetDesktopWindow() As IntPtr
End Function
<DllImport("gdi32.dll")> _
Private Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean
End Function
Private Const SRCCOPY As Integer = 13369376
Public Shared Function GetScreenBitmap() As Bitmap
Dim gScreen As Graphics = Graphics.FromHwnd(GetDesktopWindow())
Dim bmpScreen As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim gBmp As Graphics = Graphics.FromImage(bmpScreen)
Dim hDCScreen As IntPtr = gScreen.GetHdc()
Dim hDCBmp As IntPtr = gBmp.GetHdc()
BitBlt(hDCBmp, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, hDCScreen, 0, 0, SRCCOPY)
gScreen.ReleaseHdc(hDCScreen)
gBmp.ReleaseHdc(hDCBmp)
Return bmpScreen
End Function
End Class
(source traduit de C#)
Pour ce qui est de faire une capture sans utilises d'api, ca doit etre possible en utilisant le framework de direct, mais c'est pas parce qu'on fait du .net qu'on peut pas utiliser les api, le framework repose sur les apis ...
24 mars 2005 à 12:39
24 mars 2005 à 08:54
24 mars 2005 à 03:22
Mais en quoi les api sont obsolete?? ou as tu vu ça ?? Ou est il ecrit qu'on ne doit pas appeler d'API en .net?
Malgré ça, si tu as les equivalents des apis que j'utilise, je suis preneur aussi!
Pym Corp : plein de code su le net utilisent les device context pour faire des captures...ce code n'est pas l'adaptation d'un code vb6 mais d'un code en c. Du moins il en est fortement inspiré :)
23 mars 2005 à 20:24
Et j'ai déjà vu ce code en vb6 quelque part, il est fort possible que ce code ne soit qu'une adaptation à .NET, mais bon, pas de quoi en faire tout un fromage
23 mars 2005 à 18:25
23 mars 2005 à 18:03
23 mars 2005 à 17:39
Bitmap.FromHbitmap(New IntPtr(bmplng))
qui est bien un appel propre au framework.net (lis tout le code avant de critiquer).
Utiliser l'objet bitmap du framework permet d'acceder à la fonction FromHbitmap, mais aussi de convertir l'image en le format desiré!
On peut peut etre le modifier pour faire la meme chose en vb6, mais la n'etait pas mon but.
De plus, meme si le code marchait en vb6, pourquoi coder une classe en vb6 pour un projet en .net??
Non vraiment, ta critique est à revoir. See u
23 mars 2005 à 16:47
Désolé de te dire ça mais aucun intérêt, autant rester sous vb6.
Lorsque tu développes en .NET, l'intérêt est d'utiliser le framework .net