|
You last visited: Today at 21:40
Advertisement
[C++] Probleme mit PixelSearch
Discussion on [C++] Probleme mit PixelSearch within the C/C++ forum part of the Coders Den category.
03/20/2012, 00:19
|
#1
|
elite*gold: 20
Join Date: Sep 2009
Posts: 2,095
Received Thanks: 4,917
|
[C++] Probleme mit PixelSearch
moin,
ich versuche nun schon seit einigen Stunden ein PixelSearch von meiner DLL zu starten. Aber irgendwie will nichts in der DLL klappen, wie z.B. die PixelSearch Funktion aus der AutoIt Lib:
Quote:
#include <Windows.h>
#include "AutoIt3.h"
BOOL WINAPI DllMain(HINSTANCE hDllInstance, DWORD Reason, LPVOID Reserved)
{
switch(Reason)
{
case DLL_PROCESS_ATTACH:
POINT T;
AU3_Sleep(1000);
AU3_PixelSearch(0,0,10,10,0xFF0000,10,10,&T);
if (AU3_error() == 0)
{
AU3_MouseMove(T.x,T.y,NULL);
}
break;
}
return TRUE;
}
|
Bei einer normalen Anwendung geht alles, bei der DLl jedoch nichts. Hat von euch vll jemand eine vernünftige PixelSearch Funktion die auch bei DLL's geht, oder kann mir helfen?
|
|
|
03/20/2012, 11:52
|
#2
|
elite*gold: 42
Join Date: Jun 2008
Posts: 5,426
Received Thanks: 1,888
|
Hör bitte auf eine so schöne Sprache mit AutoIt und PixelSearch zu vergewaltigen, danke.
|
|
|
03/20/2012, 12:27
|
#3
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
|
Theoretisch könntest du die PixelSearch Funktion kopieren.
→
|
|
|
03/20/2012, 13:44
|
#4
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Quote:
Bei einer normalen Anwendung geht alles, bei der DLl jedoch nichts.
|
Deine Fehlerbeschreibung hilft so ziemlich gar nicht. Was genau geht nicht? Was passiert genau? Schonmal geschaut, ob der Code überhaupt ausgeführt wird? Bzw. mal rausgekriegt, wo genau nicht das erwartete Verhalten eintrifft? Sollen wir jetzt ins Blaue raten, was falsch läuft? Solche Themen kotzen mich einfach an. Fetzen Code hinwerfen rumheulen, dass es nicht geht und die Anderen machen lassen.. Blabla geh weiter in AutoIt scripten.
|
|
|
03/20/2012, 14:43
|
#5
|
elite*gold: 20
Join Date: Sep 2009
Posts: 2,095
Received Thanks: 4,917
|
Quote:
Originally Posted by MoepMeep
Hör bitte auf eine so schöne Sprache mit AutoIt und PixelSearch zu vergewaltigen, danke.
|
AutoIt ist in C++ geschrieben und bei der AU3_ wird direkt die Funktion aus der DLL geladen.
Quote:
Originally Posted by KDeluxe
Theoretisch könntest du die PixelSearch Funktion kopieren.
→
|
Danke, teste die Funktion gerade.
Quote:
Originally Posted by xNopex
Deine Fehlerbeschreibung hilft so ziemlich gar nicht. Was genau geht nicht? Was passiert genau? Schonmal geschaut, ob der Code überhaupt ausgeführt wird? Bzw. mal rausgekriegt, wo genau nicht das erwartete Verhalten eintrifft? Sollen wir jetzt ins Blaue raten, was falsch läuft? Solche Themen kotzen mich einfach an. Fetzen Code hinwerfen rumheulen, dass es nicht geht und die Anderen machen lassen.. Blabla geh weiter in AutoIt scripten.
|
Wenn ich schreibe das nichts passiert wird die Funktion nicht ausgeführt, außerdem ahbe ich noch vergessen hinzuschreiben das die Gesammte DLL bei diesem Punkt stoppt.
|
|
|
03/20/2012, 14:56
|
#6
|
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
|
Versuch doch die Funktionen via LoadLibary zu laden.
|
|
|
03/20/2012, 16:51
|
#7
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Quote:
Wenn ich schreibe das nichts passiert wird die Funktion nicht ausgeführt, außerdem ahbe ich noch vergessen hinzuschreiben das die Gesammte DLL bei diesem Punkt stoppt.
|
Es ist sehr unklug (zeit-)aufwendige Funktionen in die DLL-Main zu platzieren. Allgemein sollte es vermieden werden in der DllMain Code ausführen zu lassen. Deshalb: Starte in der DllMain einen Thread und lass den Thread die PixelSearch-Funktion aufrufen.
|
|
|
03/20/2012, 18:07
|
#8
|
elite*gold: 20
Join Date: Sep 2009
Posts: 2,095
Received Thanks: 4,917
|
Quote:
Originally Posted by xNopex
Es ist sehr unklug (zeit-)aufwendige Funktionen in die DLL-Main zu platzieren. Allgemein sollte es vermieden werden in der DllMain Code ausführen zu lassen. Deshalb: Starte in der DllMain einen Thread und lass den Thread die PixelSearch-Funktion aufrufen.
|
Jo, habe es so hier in epvp gepostet damit es übersichtlicher ist.
Habe es jetzt mit der Original Autoit Funktion getestet, jedoch mit dem selben Ergebniss...
Code:
#include "MainDLL.h"
#include <Windows.h>
void ConvertCoords(POINT &pt)
{
HWND hFore = GetForegroundWindow();
RECT rect;
pt.x = 0;
pt.y = 0;
}
DWORD WINAPI BotThread(LPVOID unused)
{
int q,r;
COLORREF col;
BYTE red, green, blue;
BYTE red_low, red_high, green_low, green_high, blue_low, blue_high;
HDC hdc;
RECT relrect;
int nVar;
int nStep = 1;
POINT ptOrigin;
relrect.left = 0;
relrect.top = 0;
relrect.right = 1920;
relrect.bottom = 1080;
// Convert coords to screen/active window/client
ConvertCoords(ptOrigin);
relrect.left += ptOrigin.x;
relrect.top += ptOrigin.y;
relrect.right += ptOrigin.x;
relrect.bottom += ptOrigin.y;
// Get the search colour and split into components
col = RGB(229, 109, 29); // Pixel color to find
red = GetRValue(col);
green = GetGValue(col);
blue = GetBValue(col);
// Variation required?
nVar = 0;
// Step required?
// Config the variation code
if (nVar == 0) // Exact match
{
red_low = red_high = red;
green_low = green_high = green;
blue_low = blue_high = blue;
}
else
{
// Prevent wrap around
red_low = (nVar > red) ? 0 : red - nVar;
green_low = (nVar > green) ? 0 : green - nVar;
blue_low = (nVar > blue) ? 0 : blue - nVar;
red_high = (nVar > 0xFF - red) ? 0xFF : red + nVar;
green_high = (nVar > 0xFF - green) ? 0xFF : green + nVar;
blue_high = (nVar > 0xFF - blue) ? 0xFF : blue + nVar;
}
hdc = GetDC(NULL);
for( q=relrect.left; q<=relrect.right; q = q + nStep)
{
for( r=relrect.top; r<=relrect.bottom; r = r + nStep)
{
col = GetPixel(hdc, q, r);
red = GetRValue(col);
green = GetGValue(col);
blue = GetBValue(col);
if (red >= red_low && red <= red_high && green >= green_low && green <= green_high
&& blue >= blue_low && blue <= blue_high)
{
// Match!
// Setup vResult as an Array to hold the 2 values we want to return
// Convert coords to screen/active window/client
q -= ptOrigin.x;
r -= ptOrigin.y;
SetCursorPos(q, r);
return 1;
}
}
}
}
BOOL WINAPI DllMain(HINSTANCE hDllInstance, DWORD Reason, LPVOID Reserved)
{
switch(Reason)
{
case DLL_PROCESS_ATTACH:
CreateThread(0, 0, &BotThread , 0, 0, 0);
break;
}
return TRUE;
}
|
|
|
03/20/2012, 19:18
|
#9
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Du hast zwei Möglichkeiten:
Entweder du gehst mit einem Debugger drüber und schaust, wo und warum etwas schief läuft. Oder du setzt an interessanten Punkten ein paar Ausgaben, z.b. via OutputDebugString, und schaust so, wo genau der Fehler liegt. Und dann kann man weiter sehen.
|
|
|
03/20/2012, 19:44
|
#10
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Quote:
Originally Posted by xNopex
Es ist sehr unklug (zeit-)aufwendige Funktionen in die DLL-Main zu platzieren. Allgemein sollte es vermieden werden in der DllMain Code ausführen zu lassen. Deshalb: Starte in der DllMain einen Thread und lass den Thread die PixelSearch-Funktion aufrufen.
|
Selbst das kann zum Deadlock führen, wenn man nicht aufpasst. Allgemein sollte man keinen fremden Code ausführen, der nicht aus der Kernel32.dll stammte.
Genaueres dazu:
Schlauer ist es eine Funktion aus der Dll zu exportieren und diese dann in deinem Programm zu importieren. Hier kann nichts schief gehen (eigene Dummheit mal ausgeschlossen)!
Beispiel:
Code:
//Meine Dll
bool __declspec(dllexport) PixelSearch()
{
//...
}
Code:
//Meine Exe
#pragma comment(lib, "Meinedll.lib")
bool __declspec(dllimport) PixelSearch();
int main()
{
PixelSearch();
}
Besser geht es nicht. Das Ganze ist dann auch nochmal schneller als die Dll über LoadLibrary zu laden und ihre Funktionen zur Laufzeit zu importieren. Hier übernehmen der Compiler und am Ende der PE Loader die Schmutzarbeit.
@Topic:
Du solltest dir die Funktionen BitBlt und CreateDIBSection anschauen, dann kannst du das auch ohne AutoIt machen.
|
|
|
|
Similar Threads
|
Pixelsearch Bot
07/08/2011 - AutoIt - 6 Replies
Hallo,
ich wollte fragen ob es möglich ist z.B. für Crossfire einen Pixelsearch Bot zu machen
und
Wie macht man mit Autoit so einen Youtube Account Creator
und
wie umgeht man die Captchaabfrage?
|
Pixelsearch
06/26/2010 - General Coding - 5 Replies
Hallo, ich habe ein Problem, ich habe versucht ein kleines Programm mit Pixelsearch zu erstellen, da ich daran kläglich gescheitert bin wollt ich mal fragen ob das jemand von euch für mich übernehmen kann? Ich möchte das das Program gedrückt hält und dann einen Pixel in der Farbe sucht (sind mehrere vorhanden und es ist egal welchen er anklickt), ihn anklickt und dann ein paar sekunden wartet dann Leertaste für kurze Zeit gedrückt hält. Das soll sich dann nach einiger Zeit wiederholen. Die...
|
pixelsearch
12/27/2009 - AutoIt - 11 Replies
hi hab mal ne frage
ich hab jetzt mit pixelsearch die coordinaten
ich will aber jetzt das der 50 pixel darunter von den coordinaten hinklickt
wie geht das?
|
pixelSearch
07/05/2009 - AutoIt - 11 Replies
hi leute,
brauch mal eure hilfe bei autoit
ich möchte einen bot machen der einen pixel sucht
und wenn er ihn findet soll er mit der maus zu ihm gehen und
rechtsklick machen
( bin anfänger bei autoit)
thx im vorraus
|
PixelSearch
07/27/2008 - Nostale - 5 Replies
hi leute kann mir pls jemand erklären wie man pixelsearch benuzt??
|
All times are GMT +2. The time now is 21:40.
|
|