extremeblackliu / LeiGodAutoTimer

automatically start/stop timer for saving time
56 stars 4 forks source link

开始加速时必须要点击两次 #1

Open wosiwq opened 1 year ago

wosiwq commented 1 year ago

在粗略的看了下源码之后 发现在https://github.com/extremeblackliu/LeiGodAutoTimer/blob/8625b6b8cf567dbcae780ad6c15b39fd562d6e03/LeiGodAutoTimer/Hooks/Hooks.cpp#L99-L106 此处有写解除暂停后立即加速的逻辑 但第一次点击的时候却无法实现加速,因此猜测oResumeUserTime内部调用了异步的HTTP请求,在HTTP请求完成前就返回了,所以第一次点击的时候触发oStartAccelerate失败

extremeblackliu commented 1 year ago

是的,我也注意到了这个问题,恢复加速的时候应该等待该线程执行完毕,由于这个StartAccelerate在主线程执行,需要在别的地方正确的找到线程并且等待执行完毕再调用oStartAccelerate,由于制作这个完善又需要花更多时间,所以已经不想弄辣。 可以尝试在libcurl.dll中的 56 E8 ? ? ? ? E8 ? ? ? ? 50 E8 ? ? ? ? 85 C0 75 2B 8B 74 24 08 56 下断,这个函数是_StartThreadEx,点加速按钮之后会断下,检查一下上下文和跟进调用的函数,找到正确的地方之后可以试着hook并加一个bool信号告诉hk_StartAccelerate是否已经执行完毕,在hk_StartAccelerate中,虽然是主线程,但是如果等待时间不是很长,可以使用while循环等待信号。 期待你的pull_request