GetTickCount函数 函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数。 VB声明: Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
对,注销了用户或不登录,开机时间就不准确了。GetTickCount函数能获得准确的开机时间。
Command 语句可以获取程序启动装载的命令行。在启动项里面配置程序启动为 myapp.exe /autostartup在程序里面判断: Sub From_Load() If Command = "/autostartup" Then ... ' 自动启动的 Else ... ' 用户点击启动的 End If End Sub另外一个办法是查找当前程序的父进程,如果是 Explorer 说明用户打开的。
函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数。
VB声明: Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
Sub From_Load()
If Command = "/autostartup" Then
... ' 自动启动的
Else
... ' 用户点击启动的
End If
End Sub另外一个办法是查找当前程序的父进程,如果是 Explorer 说明用户打开的。
如果为空说明第一次运行,显示开机时间框。
计算这2个值的时间差和当前GetTickCount与当前系统时间差,相差20秒内检测原GetTickCount值与当前GetTickCount值,当前GetTickCount值大为注销重登录;小为重新启动,显示开机时间框。
完毕更换GetTickCount值和当前系统时间
上楼的要写入文件。可以直接记录2个数值:一个为GetTickCount值,一个计算出启动时间比如“2011-03-30 08:00:15启动计算机”,如果是注销重登录,新的计算机启动时间与老的不会相差10秒。新的GetTickCount值如果小于老的GetTickCount值,可直接判断为重新启动。
要额外考虑修改系统时间的问题,这个也可以进行比较。
软件运行时查注册表或配置文件内记录的值 如果当前GetTickCount小于这个值则肯定是刚开机,用新值更新注册表或配置文件内的这个值
程序运行先读老的记录文件,如果没有说明第一次运行,弹窗;
如果有就比较,决定弹窗与否。
然后写入新的记录,替换掉老的。只要不是重启,GetTickCount值是一直在增加的,与你程序运行与否没有关系。
你程序启动后去读取C:\START.TXT,里面有2个值,一个是电脑启动以来的毫秒数“旧ms”,一个是算得的启动时间“旧Time”。
假如没有,说明你程序第一次运行,肯定弹窗吧
假如有,就拿文件中的这2个值,与当前的这2个值(叫“新ms”,“新time”吧)比较:
如果“新ms”小于“旧ms”,那么肯定不是注销重登录了,弹窗吧
如果“新ms”大于“旧ms”,那就比较启动时间。如果是注销重登录的,2次计算的启动时间应该很接近。你定个判断标准,接近到什么程度判断为注销重登录,否则为重新启动,决定是否弹窗。
另外,事件查看器我也不知道读取方法……