如何保证程序运行时系统时间不被修改!

原创 2004年03月02日 10:24:00

当任何程序或用户修改系统时间的时候,系统会将 WM_TIMECHANGE      消息到所有的进程,我们的程序可以捕获到该消息,然后将系统时间恢复到修改前的状态,这样就可以在我们的程序运行时系统时间的正确性,代码如下:

'窗体form1(需要一个timer控件,interval=1000):

Private Sub Form_Load()
Timer1_Timer
RegisterWindow Me.hwnd '为窗口设置子类
End Sub

Private Sub Form_Unload(Cancel As Integer)
unRegisterWindow Me.hwnd '取消窗口的子类
End Sub

Private Sub Timer1_Timer()
OldTime = Now
End Sub

'模块modle1:

Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Public OldTime As String
Public ChangeFlag As Boolean
Public Const WM_TIMECHANGE             As Long = &H1E '当系统的时间变化时发送此消息给所有顶级窗口
Public oldproc As Long
Private Type SYSTEMTIME
       wYear  As Integer
       wMonth  As Integer
       wDayOfWeek  As Integer
       wDay  As Integer
       wHour  As Integer
       wMinute  As Integer
       wSecond  As Integer
       wMilliseconds  As Integer
End Type
Private Declare Function SetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME) As Long

Public Function RegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then
  oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc)
End If
End Function
Public Function unRegisterWindow(hwnd As Long) As Long
 
If hwnd <> 0 Then
   SetWindowLong hwnd, -4, oldproc
End If

End Function
Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long

Dim i, mytt

If msg = WM_TIMECHANGE And ChangeFlag = False Then '系统时间被修改了而且不是本程序修改的

ChangeFlag = True '本程序要修改系统时间

Call SetToOldTime '修改系统时间

Exit Function

End If


ChangeFlag = False

WinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)


End Function
Public Function SetToOldTime() As String '将时间恢复到设置前的状态
Dim tmp As String
tmp = OldTime '从保存的时间中取出修改前的系统时间
Dim lpSystemTime   As SYSTEMTIME
       lpSystemTime.wYear = Year(tmp) '取出年份
       lpSystemTime.wMonth = Month(tmp) '取出月份
       lpSystemTime.wDayOfWeek = -1
       lpSystemTime.wDay = Day(tmp) '取出日
       lpSystemTime.wHour = Hour(tmp) '取出小时
       lpSystemTime.wMinute = Minute(tmp) '取出分钟
       lpSystemTime.wSecond = Second(tmp) '取出秒
       lpSystemTime.wMilliseconds = 0
       'set  the  new  time
      SetLocalTime lpSystemTime
 
End Function


'到此程序就完成了,运行一下试试

'我的邮件:ppgg2002@sina.com

'QQ:55051552

'MSN:mmcgzs@hotmail.com

Android开发之如何保证Service不被杀掉(broadcast+system/app)

最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill,这可真是一个难题。参考了现今各种定制版的系统和安全厂商牛虻软件,...
  • mad1989
  • mad1989
  • 2014年03月29日 16:48
  • 179375

Java线程详解

Java线程:概念与原理 一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个...
  • shimiso
  • shimiso
  • 2013年08月16日 16:57
  • 6001

如何保证Service不被杀死一直运行

Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart...
  • wei_chong_chong
  • wei_chong_chong
  • 2016年05月29日 22:58
  • 2555

怎么保证service不被杀死

除了常规的手段,我们可以参考一下微信和360,设置-程序-正在运行,可以看到微信是同时开启了两个进程和服务: 【有兴趣可以研究一下 守护进程 和 AIDL 】 我猜想它应该是相...
  • rabbit_in_android
  • rabbit_in_android
  • 2016年01月21日 21:29
  • 703

android 后台service 不被杀死的几种方法

自己的app的service总是容易被系统回收,搜罗了一下,基本上的解决思路有以下几种:  1.把service写成系统服务,将不会被回收(未实践):  在Manifest.xml文件中设置per...
  • sinat_30474567
  • sinat_30474567
  • 2016年06月12日 15:55
  • 4500

android如何保证service不被杀死

Android开发之如何保证Service不被杀掉(broadcast+system/app) http://blog.csdn.net/mad1989/article/details/2249...
  • kenkao
  • kenkao
  • 2015年03月16日 09:33
  • 8279

安卓应用修改系统时间

安卓应用修改系统时间
  • u010331406
  • u010331406
  • 2016年09月26日 18:42
  • 1388

Android开发之如何保证Service不被杀掉(broadcast+system/app)

序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill,这可真是一个难题。参考了现今各种定制版的系统...
  • yczz
  • yczz
  • 2014年11月24日 15:52
  • 2236

Android开发之如何保证Service不被杀掉(前台服务)

序言     最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill。参考了现今各种定制版的系统和安全厂商牛虻软件...
  • u013255737
  • u013255737
  • 2016年08月15日 08:44
  • 3209

Android保证进程不被杀掉的方法

今天看到个知识点,如何后台保证service存活**1**onStartCommand方法,返回START_STICKY2提升service优先级AndroidManifest.xml文件中对于int...
  • salute_li
  • salute_li
  • 2016年09月05日 15:03
  • 3639
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何保证程序运行时系统时间不被修改!
举报原因:
原因补充:

(最多只允许输入30个字)