what do i need to learn to write code this way?malcev wrote: ↑20 Oct 2021, 21:58Searching using machine codec++ function (c++ I dont know much)Code: Select all
setbatchlines -1 pToken := Gdip_Startup() pBitmap := Gdip_BitmapFromScreen() if !Gdip_PixelSearch(pBitmap, ARGB := 0xFF336EA5, x, y, 30) MsgBox, Pixel %ARGB% found at (%x%, %y%) else MsgBox, Pixel %ARGB% not found Gdip_DisposeImage(pBitmap) Gdip_Shutdown(pToken) return ;##################################################################################### Gdip_PixelSearch(pBitmap, ARGB, ByRef x, ByRef y, variation) { static MCode_PixelSearch if !MCode_PixelSearch MCode_PixelSearch := MCode("2,x86:VVdWU4PsEItMJDCLRCQ0i3QkOIXJjVEDD0nRi0wkLMH6AoXJD46RAAAAicEPtvzHRCQIAAAAAA+26MH5EIk8JA+2+Yl8JASNPJUAAAAAiXwkDIt8JCSLRCQoMcmFwH5IixSPD7bCKeiJw8H7HzHYKdg58H8qD7bGKwQkicPB+x8x2CnYOfB/F8HqEA+20itUJASJ0MH4HzHCKcI58n5Bg8EBOUwkKHW4g0QkCAEDfCQMi0QkCDlEJCx1m4tEJDzHAP////+LRCRAxwD/////g8QQuP////9bXl9dw410JgCLRCQ8i3wkCIkIi0QkQIk4g8QQMcBbXl9dww==,x64:QVdBVkFVQVRVV1ZTSIPsGESLlCSIAAAARYXJQY1BA0GJ1UmJzEQPSMiLlCSAAAAARYnGQcH5AkSJTCQMRYXAD46KAAAAidcPtvZFMf8x7cH/EEQPttpJY91AD7b/RYXtfmBJY8cxyU2NDIQPH0QAAEGLFIkPtsJEKdhBicBBwfgfRDHARCnARDnQfy0PtsYp8EGJwEHB+B9EMcBEKcBEOdB/FsHqEA+20in6idDB+B8xwinCRDnSfj9Ig8EBSDnLda6DxQFEA3wkDEE57nWOSIuEJJAAAADHAP////9Ii4QkmAAAAMcA/////7j/////6xxmDx9EAABIi4QkkAAAAIkISIuEJJgAAACJKDHASIPEGFteX11BXEFdQV5BX8M=") Gdip_GetImageDimensions(pBitmap, Width, Height) if !(Width && Height) return -1 if (E1 := Gdip_LockBits(pBitmap, 0, 0, Width, Height, Stride1, Scan01, BitmapData1)) return -2 x := y := 0 E := DllCall(MCode_PixelSearch, "ptr", Scan01, "int", Width, "int", Height, "int", Stride1, "uint", ARGB, "int", variation, "int*", x, "int*", y) Gdip_UnlockBits(pBitmap, BitmapData1) return (E = "") ? -3 : E } MCode(mcode) { static e := {1:4, 2:1}, c := (A_PtrSize=8) ? "x64" : "x86" if (!regexmatch(mcode, "^([0-9]+),(" c ":|.*?," c ":)([^,]+)", m)) return if (!DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", 0, "uint*", s, "ptr", 0, "ptr", 0)) return p := DllCall("GlobalAlloc", "uint", 0, "ptr", s, "ptr") if (c="x64") DllCall("VirtualProtect", "ptr", p, "ptr", s, "uint", 0x40, "uint*", op) if (DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", p, "uint*", s, "ptr", 0, "ptr", 0)) return p DllCall("GlobalFree", "ptr", p) }
Code: Select all
int Gdip_PixelSearch(unsigned int* HayStack, int w, int h, int Stride, int ARGB, int variation, int* x, int* y) { int var; int offset = Stride / 4; for (int y1 = 0; y1 < h; ++y1) { for (int x1 = 0; x1 < w; ++x1) { var = (HayStack[x1 + (y1 * offset)] & 0xff) - (ARGB & 0xff); if (abs(var) <= variation) { var = ((HayStack[x1 + (y1 * offset)] >> 8) & 0xff) - ((ARGB >> 8) & 0xff); if (abs(var) <= variation) { var = ((HayStack[x1 + (y1 * offset)] >> 16) & 0xff) - ((ARGB >> 16) & 0xff); if (abs(var) <= variation) { x[0] = x1; y[0] = y1; return 0; } } } } } x[0] = -1; y[0] = -1; return -1; }
for me it doesn't make any sense the way the symbols are organized...