[AutoIt] Problème FastFind

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

chococo012

Membre
Sep 29, 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 !
 
Last edited:

DARK-APO

Membre actif
Sep 4, 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.
 
Mar 12, 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

Membre actif
Sep 4, 2011
314
0
321
Les fonctions classiques de capture ont parfois justement ce problème d'écran noir ... je parle en C/C++.
 

chococo012

Membre
Sep 29, 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 !
 
Mar 12, 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 ;)
 

chococo012

Membre
Sep 29, 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)
 
Mar 12, 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 child 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()
 

chococo012

Membre
Sep 29, 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 =/
 
Mar 12, 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)
 

chococo012

Membre
Sep 29, 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
 
Last edited:
Mar 30, 2011
1,014
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
 

chococo012

Membre
Sep 29, 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
 
Mar 30, 2011
1,014
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 ?
 

chococo012

Membre
Sep 29, 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
 
Mar 12, 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 )
 

chococo012

Membre
Sep 29, 2010
17
0
561
Oui je voit le jeux dans l'onglet lorsqu'il est inactif.

On peut choisir de le lancer en OpenGl? ^^
 
Mar 30, 2011
1,014
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)
 
Mar 12, 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)
 

chococo012

Membre
Sep 29, 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
 

chococo012

Membre
Sep 29, 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
 
Status
Not open for further replies.