(求助)vb 模拟键盘↓向下键 
   要求:最小化后也能正常   窗体画一个command1 跟一个 时间控件。 当5秒后自动按command1(command1对应的是键盘↓向下键)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下面的代码 最小化窗体后就不行了
 Private Sub Command1_Click()
          Timer1.Interval = 1000
          Timer1.Enabled = True
  End Sub  Private Sub Timer1_Timer()
  Timer1.Enabled = False
         SendKeys ("{DOWN}") '对应的是键盘↓向下键
  End Sub

解决方案 »

  1.   

    biXPelsPerMeter As Long '目标设备的水平分辨率
      biYPelsPerMeter As Long '目标设备的垂直分辨率
      biClrUsed As Long '使用的颜色数
      biClrImportant As Long '重要的颜色数。如果该项为0,表示所有颜色都是重要的
    End Type
       
    Private Type RGBQUAD '只有bibitcount为1,2,4时才有调色板
      Blue As Byte '蓝色分量
      Green As Byte '绿色分量
      Red As Byte '红色分量
      Reserved As Byte '保留值
    End TypePrivate Type BITMAPINFO
      bmiHeader As BITMAPINFOHEADER
      bmiColors As RGBQUAD
    End Type
    Private Const BI_RGB = 0&
    Private Const DIB_RGB_COLORS = 0&
    Private Declare Function SetDIBits Lib "gdi32" (ByVal Hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
    Private Declare Function GetTickCount Lib "kernel32" () As LongPrivate Sub CmdOpen_Click()
        
      Dim Data(499, 499) As RGBQUAD
        
      Dim MinX As Single, MaxX As Single
      Dim MinY As Single, MaxY As Single
      Dim StartR As Single, StartI As Single
      Dim MaxIterations As Long, MaxDistance As Long
      Dim ColorGradient As Double, BaseBlue As Byte
      Dim BaseRed As Byte, BaseGreen As Byte
        
      Dim i As Long, j As Long
      Dim k As Long, Temp As Long
      Dim dX As Single, dY As Single
      Dim cX As Single, cY As Single
      Dim x As Single, y As Single
      Dim XX As Single, YY As Single
        
      Dim T As Long
      Dim BmpInfo As BITMAPINFO    
      T = GetTickCount
        
      MinX = -2.1: MaxX = 2.1
      MinY = -1.2: MaxY = 1.2
      MaxIterations = 10
      MaxDistance = 1000
      ColorGradient = -0.05
      BaseRed = 150
      BaseGreen = 250
      BaseBlue = 50
        
      SpeedBlue = 2 * BaseRed - 256
      SpeedGreen = 2 * BaseBlue - 256
      SpeedRed = 2 * BaseGreen - 256
      PowColorGradient = 2 ^ ColorGradient
        
        
      'Mandelbrot集合可以用复二次多项式f(z) = z ^ 2 + c来定义.
      '其中c是一个复参数。对于每一个c,从z=0开始对f(z)进行迭代
      '序列 (0, f(0), f(f(0)), f(f(f(0))), .......)的值或者延伸到无限大
      '或者只停留在有限半径的圆盘内。  dX = (MaxX - MinX) / 500
      dY = (MaxY - MinY) / 500
      For i = 0 To 499
      cX = MinX + i * dX 'C的X分量
      For j = 0 To 499
      cY = MinY + j * dY 'C的Y分量
      x = StartR
      y = StartI
      For m = 1 To MaxIterations
      XX = x * x - y * y + cX 'Z^2+C的实部
      y = 2 * x * y + cY 'Z^2+C的虚部
      R = XX * XX + y * y 'Z^2+C与原点的距离
      If R > MaxDistance Then H = m: Exit For
      x = XX '更新
      Next
      If m = MaxIterations + 1 And R < MaxDistance Then H = R
      Speed = Log(H * H + 0.000001) * PowColorGradient '这下面的都是显示颜色的代码,可根据情况更改
      Data(i, j).Blue = Abs(Abs(BaseBlue - SpeedBlue * Speed + j + i) Mod 510 - 255)
      Data(i, j).Green = Abs(Abs(BaseGreen - SpeedGreen * Speed + j + i) Mod 510 - 255)
      Data(i, j).Red = Abs(Abs(BaseRed - SpeedRed * Speed + j + i) Mod 510 - 255)
      Next
      Next
      With BmpInfo.bmiHeader
      .biSize = Len(BmpInfo.bmiHeader)
      .biWidth = 500
      .biHeight = -500 'BMP位图默认的扫描方式是从下到上,
      '这与GDI的坐标系统相反,为方便,这里
      '改为-值,则取得数据就是以左上角为起点
      .biPlanes = 1
      .biBitCount = 32 '32位位图,默认情况下Windows不会处理最高8位
      '可以将它作为自己的Alpha通道,取为32位位图,
      '虽然多占用了点内存,但是避免了扫描行宽度问题,代码易于理解
      .biCompression = BI_RGB '无压缩
      .biSizeImage = 500 * CLng(500) * 4
      End With
        
      SetDIBits Pic.Hdc, Pic.Image, 0, 500, Data(0, 0), BmpInfo, DIB_RGB_COLORS
       
      Pic.Refresh
      Me.Caption = GetTickCount - T
    End SubPrivate Sub Form_Load()
      Me.ScaleMode = 3
      Pic.Width = 500
      Pic.Height = 500
      Pic.ScaleMode = 3
      

  2.   

    [Quote=引用 3 楼 sihonglaoren 的回复:]
    3 楼的sihonglaoren 你代码我不是很明白,加我QQ858882656详聊,10元报酬
      

  3.   

    为什么不直接调用
    Form1.Command1_Click