找回密码
 加入
搜索
查看: 2562|回复: 12

360里面有个启动时间工具,有什么方法可以实现?

 火.. [复制链接]
发表于 2010-1-2 15:34:16 | 显示全部楼层 |阅读模式
本帖最后由 KLU3K 于 2010-1-6 18:34 编辑

是不是要用到wmi什么的?我不是太懂,能否给点提示?

已经自行解决,办法如下:
#include <Date.au3>
$_TickCount = _Date_Time_GetTickCount()
Dim $iHours, $iMins, $iSecs
_TicksToTime($_TickCount, $iHours, $iMins, $iSecs)

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-1-2 15:43:36 | 显示全部楼层
关键是,需要做个服务或驱动在还没进系统时就要运转了(就是计时开始嘛),我们用的AU3运行环境一般是进入系统后的。。
发表于 2010-1-2 22:51:56 | 显示全部楼层
to ls
错,autoit是可以写成服务的,不过写成服务后就不能用gui了.
to lz
思路:
将工具写成服务,获取系统开机时间,现在时间,对比一下就是时间差了
发表于 2010-1-3 15:13:44 | 显示全部楼层
本帖最后由 顽固不化 于 2010-1-3 15:16 编辑

ls,,ad呀~~~~~~~

超版已做处理,afan高效率。

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

发表于 2010-1-3 15:24:12 | 显示全部楼层
楼上的是什么意思?>
发表于 2010-1-3 15:25:17 | 显示全部楼层
回复 5# hzxymkb


    本来楼上是广告贴……
发表于 2010-1-3 15:32:43 | 显示全部楼层
ls,,ad呀~~~~~~~

超版已做处理,afan高效率。
顽固不化 发表于 2010-1-3 15:13

?
What do you mean?

评分

参与人数 1金钱 +1 收起 理由
afan + 1 本来他楼上是广告贴,已删除了

查看全部评分

发表于 2010-1-3 15:33:44 | 显示全部楼层
严禁广告!afan 真的对!值得表表扬!
发表于 2010-1-3 15:41:10 | 显示全部楼层
我觉得是调用系统的开机时间,大家可以对比测试看看

cmd

systeminfo |find "系统启动时间"
发表于 2010-1-6 00:09:16 | 显示全部楼层
经典
systeminfo |find "系统启动时间"
不错
 楼主| 发表于 2010-1-6 00:24:23 | 显示全部楼层
找到了类似的代码,不知道能否转成au3?
据说是调用了ntdll.dll的NtQuerySystemInformation函数进行长期精确计时。

#include <windows.h>
#include <assert.h>
#define NTSTATUS int

const int SYSTIMEINFORMATION  =  3;

//时间信息
struct TIME_INFORMATION
{
     LARGE_INTEGER    BootTime;  
     LARGE_INTEGER    CurrentTime;
     LARGE_INTEGER    TimeZoneBias;
     DWORD                     CurrentTimeZoneId;
     DWORD                     Zero;
};

HMODULE                        hDll;
DWORD                             Length;
NTSTATUS                       ntS;
LARGE_INTEGER            eTime;
TIME_INFORMATION   TimeInfo;

typedef  int  (FAR WINAPI *PNtQuerySystemInformation)(int,void*,int,DWORD*);
PNtQuerySystemInformation NtQuerySystemInformation;

//加载dll
HMODULE UTlTimer::hDll  =  GetModuleHandle("ntdll.dll");

ntS  =  NtQuerySystemInformation(SYSTIMEINFORMATION, &TimeInfo,
  sizeof(TIME_INFORMATION), &Length);
if (ntS < 0 || Length  !=  sizeof(TIME_INFORMATION))
{
    assert(false && "error");
}
else
{
    eTime.QuadPart  =  TimeInfo.CurrentTime.QuadPart  -  TimeInfo.BootTime.QuadPart;
}

eTime.QuadPart / 10000  //得到毫秒数
eTime.QuadPart / 10000000 //得到秒数
 楼主| 发表于 2010-1-6 18:33:46 | 显示全部楼层
找到解决办法了
#include <Date.au3>
$_TickCount = _Date_Time_GetTickCount()
Dim $iHours, $iMins, $iSecs
_TicksToTime($_TickCount, $iHours, $iMins, $iSecs)
发表于 2012-6-14 12:56:46 | 显示全部楼层
谢谢分享,学习中,那天可能要用哦
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 07:16 , Processed in 0.097728 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表