[AutoIt] Problème FastFind

  • Partenaires

Utilisateurs qui regardent le poste (Total: 0, Members: 0, Invité: 0)

Statut
La discussion n'est pas ouverte à d'autres réponses
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Bonjour a tous,

Je code en autoit depuis 1 ou 2 mois, dans l'espoir de coder un bot. La première version est totalement fonctionnelle, elle utilise juste des searchpixel et mouseclic sur le client du jeux ouvert.

Seulement, j'ai voulu passer a la vitesse supérieure et utiliser des fonctions de fastfind (snapshot & co, pour utiliser le bot même en arrière plan).

Seulement je rencontre un problème, lorsque j'essaie de prendre un snapshot de mon jeux (Wakfu, je n'ai pas trouver de partie spécialiser pour Wakfu), l'image est noire, je voit juste de cadre de la fenêtre. Cela peut-il être du au compatibilité? (admin & co) Ou parce que ce n'est pas du flash? ou bien une sécurité intégré au jeux ?

Car je précise que mon code fonctionne sur Dofus, je peut prendre des snapshot sans problèmes.

auriez vous une solution?

Mon petit bout de code :

Code:
	   While (WinExists("WAKFU"))
Global $hWnd = WinGetHandle("WAKFU")

FFSnapShot(0, 0, 0, 0, 0, $hWnd)
FFSaveJPG("0")

Est-il possible de prendre des screen d'un programme non actif sur windows, car je sait que la touche imprimer ecran fonctionne sur wakfu !

Cordialement !
 
Dernière édition:
DARK-APO

DARK-APO

Level 4
Level 3
Level 2
Level 1
4 Sept. 2011
314
0
321
Je n'utilise pas fastfind, mais je trouve assez useless de faire un bot pixel qui marche comme ça.
Il consomme plus, et au final une virtualbox reste simple à installer.

Sinon d'après ce que j'ai vu le coup de l'écran noir est classique.
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
Le noir est du au fait qu'il ne récupère que des pixels nulls donc l'image ce remplis de zero bytes il faut que le bot puisse accéder a l'image a capturer (calculé par la carte graphique) donc soit tu l'affiche a l'écran soit tu trouve la possibilité de capturer l'image d'une fenêtre réduite (possible car windows le fait)
 
DARK-APO

DARK-APO

Level 4
Level 3
Level 2
Level 1
4 Sept. 2011
314
0
321
Les fonctions classiques de capture ont parfois justement ce problème d'écran noir ... je parle en C/C++.
 
casimir

casimir

Level 5
Level 4
Level 3
Level 2
Level 1
30 Mars 2011
1,013
1
944
In Your Ass
la lecture de l'aide de la commande FFSnapshot resoudrais ton probleme ....
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
@DARK-APO : Il y a d'autres bibliothèque mieux pour un bot pixel?

@benoit934 : Oui j'avais lut ça quelque part, c'est pourquoi j'ai chercher comment résoudre le problème, dans la doc comme sur internet, je dois pas être très doué car je n'ai pas vraiment trouver ^^"

@casimir : Donc tu me confirme que c'est faisable? car j'ai eu beau lire la doc, j'ai appris plein de truc mais pas comment résoudre ce problème =/

Sinon merci a tous d'avoir répondu !
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
@DARK-APO : Il y a d'autres bibliothèque mieux pour un bot pixel?

@benoit934 : Oui j'avais lut ça quelque part, c'est pourquoi j'ai chercher comment résoudre le problème, dans la doc comme sur internet, je dois pas être très doué car je n'ai pas vraiment trouver ^^"

@casimir : Donc tu me confirme que c'est faisable? car j'ai eu beau lire la doc, j'ai appris plein de truc mais pas comment résoudre ce problème =/

Sinon merci a tous d'avoir répondu !

même moi des fois j'ai du mal a faire certaines choses que je n'ai jamais fait quand on ne connais pas de nom précis google ne sert a rien et des fois apres avoir longtemps chercher tu demande sur un forum et la des ingénieurs te répondent c'est impossible, donc la tu te d'émmerde durant trois jours a cherchez la solution, une fois que tu la tu as oublié l'utilité" :D

Enfin tous ça pour dire ne désespère pas ;)
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Eh bien c'est gentil X)

En attendant j'ai améliorer mon bot (et me suis améliorer en passant), il fonctionne très bien et j'en suis content =)

Mais je dois avouer que ça m’arrangerais de connaitre l'astuce pour FFSnapshot, même si on croirais au saint graal, que personne ne veut partager X)
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
J'ai trouvé ca pour capturé une fenêtre caché dis moi si ca passe pour toi

Code:
Func _CaptureWindow($hWnd)
    Local $WM_PAINT = 0x000F
    Local $WM_PRINT = 0x317
    Local $PRF_CHILDREN = 0x10; Draw all visible ***** windows.
    Local $PRF_CLIENT = 0x4 ; Draw the window's client area.
    Local $PRF_OWNED = 0x20 ; Draw all owned windows.
    Local $PRF_NONCLIENT = 0x2 ; Draw the window's Title area.
    Local $PRF_ERASEBKGND = 0x8 ; Erases the background before drawing the window

    Local $pos = WinGetPos($hWnd)
    Local $Width = $pos[2]
    Local $Height = $pos[3]

    Local $hDC = _WinAPI_GetDC($hWnd)
    Local $memDC = _WinAPI_CreateCompatibleDC($hDC)
    Local $memBmp = _WinAPI_CreateCompatibleBitmap($hDC, $Width, $Height)

    _WinAPI_SelectObject ($memDC, $memBmp)

    Local $Ret = _SendMessage($hWnd, $WM_PAINT, $memDC, 0)
    $Ret = _SendMessage($hWnd, $WM_PRINT, $memDC, BitOR($PRF_CHILDREN , $PRF_CLIENT, $PRF_OWNED, $PRF_NONCLIENT, $PRF_ERASEBKGND))

    Local $hBMP=_GDIPlus_BitmapCreateFromHBITMAP($memBmp)
    Local $hHBITMAP=_GDIPlus_BitmapCreateHBITMAPFromBitmap($hBMP)

    _WinAPI_DeleteObject($hDC)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _WinAPI_DeleteDC($memDC)
    _WinAPI_DeleteObject ($memBmp)
    _WinAPI_DeleteDC($hDC)

    Return $hHBITMAP
EndFunc ;==>_CaptureWindow()
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Merci, je teste ça ce soir et je te tient au courant !
 
casimir

casimir

Level 5
Level 4
Level 3
Level 2
Level 1
30 Mars 2011
1,013
1
944
In Your Ass
dans ta cmd snapshot a quoi correspond tes 4 zeros . . . . .
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Eh bien a la dimension de l'image a capturé non?

les deux premier la position en haut a gauche, et les deux autres la position en bas a droite non?

Ça a un rapport avec le fait que la fenêtre soit inactive? je n'ai lut çà nulle part =/
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
non ca n'a pas de rapport je crois que 0 0 0 0 c'est plein écran la ca lui fait une image a la bonne taille mais noire car il capture ce qui n'existe pas (les joies de l'informatique :D ce qui existe peux soudainement ne plus l'être)
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Hmm, j'essaye de modifier ça, mais ci c'est ça c'est ... très fin comme histoire =D

EDIT: j'ai essayer en mettant de bon paramètres, même avec la fenêtre active c'est noir, si elle est inactive il y a une erreur.

Code:
	While $BOUCLE = 1
	   
While (WinExists("WAKFU"))
Global $hWnd = WinGetHandle("WAKFU")

FFSnapShot(200, 200, @desktopwidth - 200, @desktopheight - 200, 0, $hWnd)
FFSaveBMP("0")

Wend
 
Dernière édition:
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
Hmm, j'essaye de modifier ça, mais ci c'est ça c'est ... très fin comme histoire =D

Je n'ai pas autoit donc je n'ai pas testé mais si je peux te donner des pistes au mois ...
 
casimir

casimir

Level 5
Level 4
Level 3
Level 2
Level 1
30 Mars 2011
1,013
1
944
In Your Ass
lance ton jeu en fenetré (si tu peu) et execute ce script

Code:
FFsnapshot()
FFSaveBMP("test")

(oubli pas l include fastfind.au3)

et dit nous ce que donne le fichier test.bmp creer
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Bonjour,

Dans le cas ou je ne précise pas le handle (comme dans ton code) cela fonctionne et me prend bien un snapshot du jeux.

Si je précise le handle, cela me prend un snapshot, mais je ne voit que le contour du jeux (bouton pour fermer, réduire ou passer en fenêtré), le reste est noir !

Cordialement
 
casimir

casimir

Level 5
Level 4
Level 3
Level 2
Level 1
30 Mars 2011
1,013
1
944
In Your Ass
ok alors ne t occupe pas du handle et prend juste la fenetre du jeu par rapport a sa position. ca peut le faire non ?

je n est pas ce jeu mais tu test voir si tu a le bon handle ou pas ?
est-ce un jeu dans un navigateur internet ?
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Non, c'est bien un MMO comme dofus (de ankama), mais en Java je pense.

Je vais essayer de mettre la fenetre "en dehors de l'ecran", comme ca elle ne devrait pas être visible, mais un snapshot pourrait fonctionner. Je vais voir.

(J'avais entendu parler de sécuriter de directX qui rendait les screen noir, c'est peut-être ca du coup ^^

Merci a tous de votre aide
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
essaye de le lancer avec OpenGL dans ce cas mais avec Windows Aéro ti peux voir l'image du jeu dans les onglets ?? ( quand le jeu es réduis )
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Oui je voit le jeux dans l'onglet lorsqu'il est inactif.

On peut choisir de le lancer en OpenGl? ^^
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
Certains jouent avec linux et sous linux Direct X n'existent pas
 
casimir

casimir

Level 5
Level 4
Level 3
Level 2
Level 1
30 Mars 2011
1,013
1
944
In Your Ass
Wakfu est d origine en Opengl

Pour l ecran noir c est normale tu fait un snap de la fenetre hote du jeu mais pas de la surface "3D" (le rendu 3d est sur une fenetre "fille") si tu redimensionne ton jeu avec ta souris tu vas voir le noir derrière

teste ça chez moi ça fonction nickel

Code:
#RequireAdmin
#include"FastFind.au3"
$handle=WinGetHandle("WAKFU")
;MsgBox(0,"",$handle)
FFsnapshot(0,0,0,0,0,$handle)
FFSaveBMP("test")
FFSaveJPG("testjpg")

tester en bmp et jpg impec
peut etre le fait de rajouter les droit admin autorise la dll a prendre toutes les surfaces liée au processus

(attention a l include qui peut etre different chez toi , moi l udf est dans le repertoir courant)
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
A c'est certains si il n'a pas de droits admin il ne peux pas accéder aux autres apps (Protection contre les virus)
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Bonjour,

Je lançait bien mon script avec #RequireAdmin ^^

J'ai tester ton script, cela ne fonctionne pas chez moi (écran noir si le jeux en plein écran, et juste une image de 1px noir si le jeux est inactif.

Je me demande si ça a pas un rapport avec le fait que j'utilise la version 64bits d'autoit
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
Aucune idée normalement non
 
C

chococo012

Level 2
Level 1
29 Sept. 2010
17
0
561
Bon, ce n'est pas grave, ça doit être quelque chose de bizarre chez moi, je vais me contenter du bot basique qui utilise la souris =P
 
B

Benoit934

Level 5
Level 4
Level 3
Level 2
Level 1
12 Mars 2011
1,651
2
598
Bon, ce n'est pas grave, ça doit être quelque chose de bizarre chez moi, je vais me contenter du bot basique qui utilise la souris =P

Essaye avec une application du genre navigateur internet si ca capture et lance un 3D produis par HTML5 et retest
 
Statut
La discussion n'est pas ouverte à d'autres réponses