问题仅是,怎么知道电脑是刚开机?在注册表启动项里传参是可以知道是开机启动,但是如果我是注销了电脑并不是开机,这样判断就不对了。怎么解决这个问题呢?

解决方案 »

  1.   

    GetTickCount函数
      函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数。   
       VB声明:   Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long 
      

  2.   

    对,注销了用户或不登录,开机时间就不准确了。GetTickCount函数能获得准确的开机时间。
      

  3.   

    Command 语句可以获取程序启动装载的命令行。在启动项里面配置程序启动为 myapp.exe /autostartup在程序里面判断:
    Sub From_Load()
        If Command = "/autostartup" Then
            ... ' 自动启动的
         Else
            ... ' 用户点击启动的
         End If
    End Sub另外一个办法是查找当前程序的父进程,如果是 Explorer 说明用户打开的。
      

  4.   

    不是啊,不对,你们基本都没看清楚问题啊。GetTickCount是获取系统启动到现在的时间,如果注销了,程序一样是自动启动的了,这样又把那个显示开机时间蝗框显示了。我的问题是:怎样实现开机才会显示提示框,而我注销了不会显示那个框。有没有函数知道是刚开机还是刚注销登录。如果做一个注销的标志,那么我注销了,再关机,下次开机时就不会显示提示框了。
      

  5.   

    程序每次运行读取GetTickCount值和当前系统时间:
    如果为空说明第一次运行,显示开机时间框。
    计算这2个值的时间差和当前GetTickCount与当前系统时间差,相差20秒内检测原GetTickCount值与当前GetTickCount值,当前GetTickCount值大为注销重登录;小为重新启动,显示开机时间框。
    完毕更换GetTickCount值和当前系统时间
      

  6.   

    有可能开机后一直不登录的,超过30分钟的都有。
    上楼的要写入文件。可以直接记录2个数值:一个为GetTickCount值,一个计算出启动时间比如“2011-03-30 08:00:15启动计算机”,如果是注销重登录,新的计算机启动时间与老的不会相差10秒。新的GetTickCount值如果小于老的GetTickCount值,可直接判断为重新启动。
    要额外考虑修改系统时间的问题,这个也可以进行比较。
      

  7.   

    只需要一个判断就可以知道是不是刚开机
    软件运行时查注册表或配置文件内记录的值 如果当前GetTickCount小于这个值则肯定是刚开机,用新值更新注册表或配置文件内的这个值
      

  8.   

    注销后软件是不在运行,但是不影响你取值啊。
    程序运行先读老的记录文件,如果没有说明第一次运行,弹窗;
    如果有就比较,决定弹窗与否。
    然后写入新的记录,替换掉老的。只要不是重启,GetTickCount值是一直在增加的,与你程序运行与否没有关系。
      

  9.   

    这个要考虑长时间不登录的问题。假如我第一次立即登录,GetTickCount小于2分钟;重启后一直不登录,30分钟后登录,是否不会弹出提示框?
      

  10.   

    我试了,你注销了,但是GetTickCount获得的数值一值加的,也就是不管你有没有登录,反正挂着都计时。好像用事件器里的数据就不错,但是不知道怎么访问,以前没用过它
      

  11.   

    可以hook系统注销的消息来标记。
      

  12.   

    GetTickCount是不错的选择,这函数返回WIndows启动以来所经历的时间,单位是ms。
      

  13.   

    举个例子吧:
    你程序启动后去读取C:\START.TXT,里面有2个值,一个是电脑启动以来的毫秒数“旧ms”,一个是算得的启动时间“旧Time”。
    假如没有,说明你程序第一次运行,肯定弹窗吧
    假如有,就拿文件中的这2个值,与当前的这2个值(叫“新ms”,“新time”吧)比较:
    如果“新ms”小于“旧ms”,那么肯定不是注销重登录了,弹窗吧
    如果“新ms”大于“旧ms”,那就比较启动时间。如果是注销重登录的,2次计算的启动时间应该很接近。你定个判断标准,接近到什么程度判断为注销重登录,否则为重新启动,决定是否弹窗。
    另外,事件查看器我也不知道读取方法……