aardio 官方社区

用户名  找回密码
 注册会员

QQ登录

只需一步,快速开始

帖子
查看: 16996|回复: 5

api函数获取进程运行时间问题

[复制链接]

19

主题

294

回帖

1945

积分

新手入门

积分
1945
发表于 2011-5-13 12:27:16 | 显示全部楼层 |阅读模式
import process;
import win
import console;
//打开控制台
prcs = process.find("QQ.exe")
handle = prcs.handle
::Kernel32:= ..raw.loadDll(
"Kernel32.dll")
GetProcessTimes = ::Kernel32.api(
"GetProcessTimes","int(int handle,struct& lpCreationTime,struct& lpExitTime,struct& lpKernelTime,struct& lpUserTime)")
console.log(int)





winapi帮助文档里GetProcessTimes部分,其中2-4个参数需指定FILETIME结构。FILETIME有这样的说明:该类型在标准库win库、fsys库中都已定义,如导入以上库则不必声明此结构体.
可win.ui库以及winex库都已导入win库,是以也会自动导入此结构体。
所以我导入win库,但是返回值int还是null,请指点,谢谢

27

主题

646

回帖

4138

积分

超级版主

积分
4138
发表于 2011-5-13 13:35:16 | 显示全部楼层

//导入库
import process;
import win

//声明API Kernel32是默认加载的库
GetProcessTimes = ::Kernel32.api( "GetProcessTimes","int(pointer handle,struct& creationTime,struct& exitTime,struct& kernelTime,struct& userTime)" )
FileTimeToSystemTime = ::Kernel32.api(
"FileTimeToSystemTime","int(struct filetime,struct& time)")

//打开控制台
import console;

//启动进程,注意aardio的句柄都是指针类型(窗口句柄除外)
prcs = process.find("QQ.exe")
handle = prcs.handle

//调用API函数,注意结构体要传实参进去
var ret,creationTime, exitTime,kernelTime,userTime = GetProcessTimes( prcs.handle
    , ::FILETIME()
    , ::FILETIME()
    , ::FILETIME()
    , ::FILETIME()
    )

//将FILETIME转换为数值类型
console.log(
    FileTimeToSystemTime( creationTime ,time() )
    )


19

主题

294

回帖

1945

积分

新手入门

积分
1945
 楼主| 发表于 2011-5-13 13:51:29 | 显示全部楼层
quicker 发表于 2011-5-13 13:35
//导入库
import process;
import win

谢谢。不会用api函数,学习了。我再消化下

19

主题

294

回帖

1945

积分

新手入门

积分
1945
 楼主| 发表于 2011-5-13 13:51:31 | 显示全部楼层
quicker 发表于 2011-5-13 13:35
//导入库
import process;
import win

谢谢。不会用api函数,学习了。我再消化下

点评

启动时间是gmt时间,+8就是北京时间  发表于 2011-5-13 19:38

52

主题

1268

回帖

7276

积分

荣誉会员

积分
7276
发表于 2011-5-13 17:07:14 | 显示全部楼层
GetProcessTimes 函数
功能:获取进程的运行时间有关的信息


GetProcessTimes = ::Kernel32.api( "GetProcessTimes","int(pointer handle,struct& creationTime,struct& exitTime,struct& kernelTime,struct& userTime)" )


第一个参数 handle:要获取信息的进程的句柄 (传入)
第二个参数 creationTime:进程建立的时间 (输出)
第三个参数 exitTime:进程结束的时间 (输出)
第四个参数 kernelTime:进程在核心模式下消耗的时间 (输出)
第五个参数 userTime:进程在用户模式下消耗的时间 (输出)
第2-5个参数都必须传递一个变量以接收数据,然后访问这些变量就可以得到你要的信息了.


creationTime, exitTime,kernelTime,userTime 返回值是指针 ,用 FileTimeToSystemTime函数将他们转换为数值显示时间出来


计算运行时间,进程的运行时间实际上是一个时间段,即从该进程创建的时间到当前时间的间隔段。你想知道运行时间,就把当前时间 -进程建立时间


以上信息 GG 出来的,不懂就GG....

点评

同意: 4.0
同意: 4
嗯 我GG到了C++和VB的范例,对api应用不了解,转换aau就搞不明白。要学习api  发表于 2011-5-13 20:48

33

主题

497

回帖

3294

积分

荣誉会员

积分
3294
发表于 2011-5-13 19:56:08 | 显示全部楼层
import process;
import win;
import fsys;
import console;
var prcs = process.find("QQ.exe")
var handle = prcs.handle;
var GetProcessTimes = ::Kernel32.api("GetProcessTimes","int(pointer handle,struct& lpCreationTime,long& lpExitTime,long& lpKernelTime,long& lpUserTime)");
// 因为我只要获取进程的创建时间

var creationTime = ::FILETIME();
creationTime = fsys.fromFileTime(
rget(2, GetProcessTimes(handle, creationTime, 0, 0, 0)));
creationTime.addhour(8);
// 东八区(GMT +8:00)
console.log(tostring(creationTime));

点评

同意: 5.0 真棒: 5.0
同意: 5 真棒: 5
这个比较准确  发表于 2012-10-16 20:57
同意: 5
谢啦,继续学习  发表于 2011-5-13 20:49
学习了 谢谢  发表于 2011-5-13 20:01
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-6-8 13:12 , Processed in 0.068132 second(s), 28 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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