Пример #1
0
        /// <summary>
        /// Attempts to automatically calibrate the <see cref="FindLocation" /> method.
        /// </summary>
        /// <returns>The calibrated memory location -or- 0 if it could not be found.</returns>
        public static void Calibrate(CalibrationInfo[] info)
        {
            m_LocationPointer = null;

            ProcessStream pc = ProcessStream;

            if (pc == null)
                return;

            int ptrX = 0, sizeX = 0;
            int ptrY = 0, sizeY = 0;
            int ptrZ = 0, sizeZ = 0;
            int ptrF = 0, sizeF = 0;

            for (int i = 0; i < info.Length; ++i)
            {
                CalibrationInfo ci = info[i];

                int ptr = Search(pc, ci.Mask, ci.Vals);

                if (ptr == 0)
                    continue;

                if (ptrX == 0 && ci.DetX.Length > 0)
                    GetCoordDetails(pc, ptr, ci.DetX, out ptrX, out sizeX);

                if (ptrY == 0 && ci.DetY.Length > 0)
                    GetCoordDetails(pc, ptr, ci.DetY, out ptrY, out sizeY);

                if (ptrZ == 0 && ci.DetZ.Length > 0)
                    GetCoordDetails(pc, ptr, ci.DetZ, out ptrZ, out sizeZ);

                if (ptrF == 0 && ci.DetF.Length > 0)
                    GetCoordDetails(pc, ptr, ci.DetF, out ptrF, out sizeF);

                if (ptrX != 0 && ptrY != 0 && ptrZ != 0 && ptrF != 0)
                    break;
            }

            if (ptrX != 0 || ptrY != 0 || ptrZ != 0 || ptrF != 0)
                m_LocationPointer = new LocationPointer(ptrX, ptrY, ptrZ, ptrF, sizeX, sizeY, sizeZ, sizeF);
        }
Пример #2
0
        /// <summary>
        /// Attempts to calibrate the <see cref="FindLocation" /> method based on an input <paramref name="x" />, <paramref name="y" />, and <paramref name="z" />.
        /// <seealso cref="FindLocation" />
        /// <seealso cref="ProcessStream" />
        /// </summary>
        /// <returns>The calibrated memory location -or- 0 if it could not be found.</returns>
        public static void Calibrate(int x, int y, int z)
        {
            m_LocationPointer = null;

            ProcessStream pc = ProcessStream;

            if (pc == null)
                return;

            byte[] buffer = new byte[12];

            buffer[0] = (byte)z;
            buffer[1] = (byte)(z >> 8);
            buffer[2] = (byte)(z >> 16);
            buffer[3] = (byte)(z >> 24);

            buffer[4] = (byte)y;
            buffer[5] = (byte)(y >> 8);
            buffer[6] = (byte)(y >> 16);
            buffer[7] = (byte)(y >> 24);

            buffer[8] = (byte)x;
            buffer[9] = (byte)(x >> 8);
            buffer[10] = (byte)(x >> 16);
            buffer[11] = (byte)(x >> 24);

            int ptr = Search(pc, buffer);

            if (ptr == 0)
                return;

            m_LocationPointer = new LocationPointer(ptr + 8, ptr + 4, ptr, 0, 4, 4, 4, 0);
        }