代码之家  ›  专栏  ›  技术社区  ›  Brian T Hannan

是否可以更改从GetTickCount()返回的tick count值?

  •  1
  • Brian T Hannan  · 技术社区  · 14 年前

    有没有办法更改GetTickCount()返回的值,使系统看起来已经实时运行了15分钟?

    编辑:有一个应用程序做了一些接近我想要的,但它似乎不太工作,我必须处理十六进制值,而不是直接十进制值: http://ysgyfarnog.co.uk/utilities/AdjustTickCount/

    3 回复  |  直到 14 年前
        1
  •  4
  •   Billy ONeal IS4    14 年前

    不是直接的。

    为什么不直接模拟调用,或者用策略对象替换执行时间检查的代码块呢?

    struct Waiter
    {
        virtual void Wait() = 0;
        virtual ~Waiter() {};
    };
    
    struct 15MinWaiter : public Waiter
    {
        virtual void Wait()
        {
            //Do something that waits for 15 mins
        }
    };
    
    struct NothingWaiter : public Waiter
    {
        virtual void Wait()
        {
            //Nill
        } 
    };
    

        2
  •  2
  •   Alexander Rafferty    14 年前

    出于调试目的,您只需将对GetTickCount()的所有调用替换为∗GetTickCount(),这可以实现为返回GetTickCount()或GetTickCount()+15min,具体取决于您是否正在调试。

    为什么不定一分钟,确认它能用,然后改回十五分钟?

        3
  •  0
  •   Puppy    14 年前

    你可以做一些非常可怕的事情,比如#define GetTickCount()MyReallyEvilReplacement()。

        4
  •  0
  •   Ray Brian Agnew    4 年前

    我需要调试同一个问题,虽然我记得在Windows中有一个“兼容性”层来伪造记号,但我再也找不到关于这个问题的信息了。上面链接的应用程序无法工作,我无法修改源代码,因为我必须测试第三方应用程序。

    我所做的是在休眠/混合关机/睡眠状态下关闭Windows系统,然后引导到bios,并将日期时间更改为我所需要的时间,例如,如果要测试未签名的滴答数,请添加30天。

    然后,当Windows再次启动时,它无法检测到自上次计算机真正启动以来的合适时间,并认为它已经运行了30多天。

    使用sleep/hibernate/hybrid shutdown(后者是自windows8以来的默认值)而不是shutdown是很重要的,因为启动时间是重置的。