怎么求一台电脑的使用时间(要减去锁屏的那段时间)

如何求一台电脑的使用时间(要减去锁屏的那段时间)
我要得到一台电脑一天的使用时间,
这台电脑已设了密码锁屏,所以如果鼠标,键盘不动,过一会就会锁屏,
我要得到这台电脑开机而不是锁屏状态的时间,该怎么求??



------解决方案--------------------
使用GetTickCount()函数。
------解决方案--------------------
都被弄糊涂了,不知道你到底想要啥
------解决方案--------------------
所谓锁屏是什么?用户锁屏还是屏保锁屏
------解决方案--------------------
这样是实行不行,不知道是不是你要的效果
在你的程序里
C/C++ code
WTSRegisterSessionNotification(m_hWnd, NOTIFY_FOR_THIS_SESSION);

------解决方案--------------------
知道了各种状态的转换就可以计算运行时间了
------解决方案--------------------
gina
------解决方案--------------------
#include <Wtsapi32.h> 
#pragma comment(lib, "Wtsapi32.lib")

------解决方案--------------------
win2000下就是不行的,因为非XP系统没有WTSAPI32.dll
------解决方案--------------------
我有一个比较傻的办法,获取当前zorder顶端的窗口,并获取该窗口的进程名,如果进程名称为空,则系统被锁定,使用psapi。
UINT GetTopProcess(char *modulename, HWND *hscrtop)
{
BOOL istop = FALSE;
DWORD procid;
*hscrtop = GetForegroundWindow();
GetWindowThreadProcessId(*hscrtop, &procid);
if(procid <= 10)
return -1;

PROCESSENTRY32* info;
info = new PROCESSENTRY32;

HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
info->dwSize = sizeof(PROCESSENTRY32);
if(Process32First(handle, info))
{
if(GetLastError()==ERROR_NO_MORE_FILES )
{
TRACE("No More Process.\n");
}
else
{
do
{
if(procid == info->th32ProcessID)
{
strcpy(modulename, info->szExeFile);
break;
}
}
while(Process32Next(handle, info)!=FALSE);
}
}
CloseHandle(handle);

return 0;
}

void main()
{
char topmodule[64];
memset(topmodule, 0, sizeof(topmodule));
GetTopProcess(topmodule, &hwnd);

if(strlen(topmodule) > 0)
{
//computer not locked
}
else
{
//computer locked
}
}
------解决方案--------------------
使用GetTickCount()函数。这里有个例子,lz去看把
http://www.functionx.com/visualc/applications/tickcounter.htm