本人现在正在编一个系统加密程序,当空闲几分钟时,就会启动,并且黑幕.不过用客户身份可登陆系统:
问题如下:
1.(50分)
    在黑幕那时隐藏鼠标,而可以单击鼠进入其他程序?
2.(50分)
    如何禁用Ctrl+Alt+Del来结束程序?

解决方案 »

  1.   

    2。
    http://expert.csdn.net/Expert/TopicView1.asp?id=2212553
      

  2.   

    1、不是很明白你的要求
    隐藏鼠标可用API函数ShowCursor(FALSE/TRUE)来实现
    单击鼠进入其他程序可通过设自己的窗口状态为最小化WindowState=1来实现
    2、禁止 Ctrl+Alt+Del
    Const SPI_SCREENSAVERRUNNING = 97
    Private Declare Function SystemParametersInfo Lib "user32" Alias _
    "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
    lpvParam As Any, ByVal fuWinIni As Long) As Long
    使用:
    '禁止
    Dim pOld As Boolean
    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
    '开启
    Dim pOld As Boolean
    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)
      

  3.   

    //在黑幕那时隐藏鼠标,而可以单击鼠进入其他程序?不是太明白你的意思,进入其他程序是什么意思?是调用其他程序吗?隐藏鼠标用ShowCursor:
    说明:
    控制鼠标指针的可视性
    声明:
    Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long返回值:
    Long,显示计数。windows维持着一个内部显示计数;倘若bShow为TRUE,那么每调用一次这个函数,计数就会递增1;反之,如bShow为FALSE,则计数递减1。只有在这个计数大于或等于0的情况下,指针才会显示出来
    参数:
    bShow ----------  Long,TRUE(非零)显示指针,FALSE隐藏至于单击鼠标后进行某种操作,你应该在子类中截获有关消息,进行处理。
    //如何禁用Ctrl+Alt+Del来结束程序
    这个问题如果在98下很容易解决,如果在win2k下就很麻烦了,不过也不是没有办法,以前讨论过这个问题,你可以搜索一下。
      

  4.   

    1.(50分)
    Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
    Declare Function SetCursorPos Lib "user32" (ByVal x As Long, _
            ByVal y As Long) As Long    
    ShowCursor (False)'隐藏鼠标指针
    2.(50分)
    将程序做成服务.
    http://www.dapha.net/down/list.asp?id=2035
      

  5.   

    第二个问题你也可以参考一下这个代码,我没试过,你可以试试
    你需要定时执行一个程序吗?
     
    你需要定时执行一个程序吗?或者不想让你的程序在系统开始的时候就启动,甚至你根本就不想让人知道你的程序是怎么调度的,就算别人在任务管理器中查到了你的程序,没关系,它的属性是系统服务,也就是说根本不能像结束其他进程一样结束你的程序。 在模块中放入下面内容: Option Explicit 
    Type AT_INFO  定时任务消息。 
       JobTime     As Long ’设置为你要执行程序的时间。 
       DaysOfMonth As Long ’如果你希望你的程序再每月的某一天运行,设置它。 
       DaysOfWeek  As Byte ’如果你希望你的程序再每个星期的某一天运行,设置它。 
       Flags       As Byte ’定时任务标志。 
        Command     As String 
    End Type 
    Public Const JOB_RUN_PERIODICALLY = &H1  按预定义执行。 
    Public Const JOB_NONINTERACTIVE = &H10  ’是否允许你的定时程序不受任何影响的执行 
    Public Const NERR_Success = 0 ’表示定时设置成功。 Declare Function NetScheduleJobDel Lib "netapi32.dll" (ByVal servername As String, min As Long, max As Long) As Long 
    Declare Function NetScheduleJobEnum Lib "netapi32.dll" (ByVal servername As String, buffer As Any, PreferredMaximumLength As Long, EntriesRead As Long, TotalEntries As Long, ResumeHandle As Long) As Long 
    Declare Function NetScheduleJobAdd Lib "netapi32.dll" (ByVal servername As String, buffer As Any, JobId As Long) As Long 在窗体中放入下面内容: Private Sub Command1_Click() 
       Dim lngWin32apiResultCode As Long 
       Dim strComputerName As String 
       Dim lngJobID As Long 
       Dim udtAtInfo As AT_INFO 
       Dim udt(20) As AT_INFO 
       Dim a As Long 
       Dim m As Long 
       Dim n As Long 
        
       '转变你的计算机名为Unicode-----因为这几个函数仅仅支持Unicode,即仅仅被windows2000,windowsNT 或windowsXP 
       strComputerName = StrConv(Text1.Text, vbUnicode) 
        
       ' Setup the tasks parameters 
       SetStructvalue udtAtInfo 
        
       ' 添加你的定时任务。 
       lngWin32apiResultCode = NetScheduleJobAdd(strComputerName, udtAtInfo, lngJobID) 
        
       ' 检查你的定时任务是否设置成功,注意windows98返回失败。 
       If lngWin32apiResultCode = NERR_Success Then 
           MsgBox "程序" & lngJobID & " 定时设置成功。" 
       End If 
          
    End Sub 
    Private Sub SetStructvalue(udtAtInfo As AT_INFO) 
       Dim strTime As String 
       Dim strDate() As String 
       Dim vntWeek() As Variant 
       Dim intCounter As Integer 
       Dim intWeekCounter As Integer 
       ’注意下面的格式,可能影响你的输入。(你可以设置你的格式) 
       vntWeek = Array("M", "T", "W", "TH", "F", "S", "SU") 
        
       With udtAtInfo 
            
           ' 改变这个时间格式。 
           strTime = FORMat(Text2.Text, "hh:mm") 
            
           ' 把时间都换算成统一的毫秒单位。 
           .JobTime = (Hour(strTime) * 3600 + Minute(strTime) * 60) * 1000 
            
           ' 设置日期参数。 
           If Val(Text3.Text) > 0 Then 
                
               ' 设置你的程序在指定的每月的某一天运行。 
               strDate = Split(Text3.Text, ",") 
               For intCounter = 0 To UBound(strDate) 
                   .DaysOfMonth = .DaysOfMonth + 2 ^ (strDate(intCounter) - 1) 
               Next 
            
           Else 
                
               ' 设置你的程序在指定的每星期的某一天运行。 
               strDate = Split(Text3.Text, ",") 
               For intCounter = 0 To UBound(strDate) 
                   For intWeekCounter = 0 To UBound(vntWeek) 
                       If UCase(strDate(intCounter)) = vntWeek(intWeekCounter) Then 
                           .DaysOfWeek = .DaysOfWeek + 2 ^ intWeekCounter 
                           Exit For 
                       End If 
                   Next 
               Next 
           End If 
            
            
                   ' 设置允许你的定时程序不受任何影响的执行。 
           If Check1.value = vbUnchecked Then 
               .Flags = .Flags Or JOB_NONINTERACTIVE 
           End If 
            
           '设置为按预定义执行。 
           If Option2.value = True Then 
               .Flags = .Flags Or JOB_RUN_PERIODICALLY 
           End If 
            
           ' 你可以设置你的运行参数。 
           .Command = StrConv(Text4.Text, vbUnicode) 
       End With 
    End Sub 
      

  6.   

    禁用Ctrl+Alt+Del?2000/Xp(包括2003)似乎都不允许
      

  7.   

    的确是不允许,不过,你可以替换:原理
    在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的,GINA DLL提供了一个交互式的界面为用户登陆提供认证请求。在WinLogon初始化时,就向系统注册截获CTRL+ALT+DEL消息,所以其他程序就无法得到CTRL+ALT+DEL的消息。
    WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供了接口,我们可以编GINA DLL来代替MSGINA.DLL。