上一篇文章,我们已经能实现单消了。相信很多朋友可以搞定秒杀了

秒杀无法就是一直调用单消,直到完成为止,那么,我们怎么知道要调用多少次了,方法有很多,我们可以用CE找到棋子的数量,如果没了 就不用调用单消了,今天我们用个更简单的办法,看看我们更新后的ReadGameData函数,

bool CKyodaiPluginDlg::ReadGameData()
{
    HWND hGameWnd = GetGameHwnd();
    ZeroMemory(m_szGameData, 11 * 19);
    if (!hGameWnd)
    {
        return false;
    }
    DWORD dwPid = false;
    GetWindowThreadProcessId(hGameWnd, &dwPid);
    HANDLE hGameProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
    if (!hGameProcess)
    {
        MessageBox(L"打开进程失败");
        return false;
    }

    if (!ReadProcessMemory(hGameProcess, (LPVOID)0x00199F68, m_szGameData, sizeof(m_szGameData), NULL))
    {
        return false;
    }

    for (int i = 0; i < 11; i++)
    {
        for (int j = 0; j < 19; j++)
        {
            if (m_szGameData[i][j] != 0)
            {
                return true;
            }
        }
    }
    return false;
}

只要读到一个不是0的就返回true 表示还要继续数据

//秒杀全部
void CKyodaiPluginDlg::OnBnClickedBtnseckill()
{
    while (ReadGameData())
    {
        ClearOne();
    }
}

至于自动单消的功能,你在定时器 或者线程里面 调用单消,然后根据速度 来sleep一定的时间即可

DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter)
{
    CKyodaiPluginDlg *pWnd = (CKyodaiPluginDlg*)lpParameter;
    while (1)
    {
        Sleep(5000 – pWnd->m_sliderSpeed.GetPos() * 100);
        pWnd->ClearOne();
    }
    return 0;
}

void CKyodaiPluginDlg::OnBnClickedCheckremove()
{
    if (m_checkRemove.GetCheck())
    {
        m_hThread = CreateThread(NULL, 0, ThreadProc, this, 0, NULL);
    }
    else
    {
        TerminateThread(m_hThread, 0);
    }
}

源码下载地址:

链接: http://pan.baidu.com/s/1slsAJrZ 密码: 4h53

打赏