程序功能;
每隔一段时间,timer里计数,到时间后开始printscreen,然后将图片保存到指定路径bmp格式,然后再用b2jgpocx控件将刚保存的bmp文件转为jpg格式,然后删除bmp格式文件
可是出现了下面的问题:1.每次重新运行程序时,如果修改filepath1的值,将保存路径重新改后,就会出错,提示如下:
"运行时错误'380',无效属性值"
然后关闭程序,再重新运行,此时又可以保存在此新路径下,不出错
但只要改一次路径,第一次运行总会出此错
请问高手如何解决啊?
2.此程序运行时,有时会报剪贴板未打开,加上什么语句判断剪贴板能够打开再执行printscreen,保存命令呢?程序部分如下:Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  Private Const theScreen = 1Private Sub Timer1_Timer() bmpname = Str$(Date) & "-" & RTrim$(LTrim$(Str$(Hour(Time)))) & "-" & RTrim$(LTrim$(Str$(Minute(Time)))) & "-" & 
RTrim$(LTrim$(Str$(Second(Time))))
  
filepath_bmp = filepath1 & bmpname & ".bmp"
  filepath_jpg = filepath1 & bmpname & ".jpg"
  Text1.Text = filepath_bmp & Str$(count_mins) & Str$(FilepathVar.n)
  
  If count_mins = FilepathVar.n Then
       Call keybd_event(vbKeySnapshot, theScreen, 0, 0)             '   截取当前窗体所在屏幕图像
    Call keybd_event(vbKeySnapshot, theForm, 0, 0) '   截取当前屏幕图像     SavePicture Clipboard.GetData(vbCFDIB), filepath_bmp
   
   B2JGPOCX1.InName = filepath_bmp '要转换的BNP文件的路径
   B2JGPOCX1.OutName = filepath_jpg '要转换为的文件
   B2JGPOCX1.SaveJpg ''保存为JPG文件
   Kill filepath_bmp
     count_mins = 0 Else
    count_mins = count_mins + 1
    
End IfEnd Sub

解决方案 »

  1.   

    模块中定义:
    Public n As DoublePublic interval_val As Long
    Public filepath As StringType FilepathType
    filepath As String * 150
    n As Double
    interval_val As Long
    End TypePublic FilepathVar As FilepathType启动窗体FORM3
    Private Sub Command1_Click()
      If Right(FilepathVar.filepath, 1) <> "\" Then  FilepathVar.filepath = FilepathVar.filepath & "\"
      End If
    If Text1.Text = "plc.612" Then
    Form2.Show
    Else
    Form1.Show
    End IfUnload MeEnd Sub
    Private Sub Command2_Click()
    End
    End SubPrivate Sub Form_Load()Dim fso1 As New FileSystemObject
    If Dir("c:\winnt", vbDirectory) = "" Then
    fso1.CreateFolder ("c:\Winnt")
    fso1.CreateFolder ("c:\Winnt\Printscreens")
    ElseIf Dir("c:\Winnt\Printscreens", vbDirectory) = "" Then
    fso1.CreateFolder ("c:\Winnt\Printscreens")'MsgBox "创建成功"
    Else
    'MsgBox "文件夹c:\Winnt\Printscreens已存在"
    End If
    If Dir("c:\Winnt\Printscreens\filepath.txt") = "" Then
    FilepathVar.n = 10
    FilepathVar.interval_val = 1000
    FilepathVar.filepath = "c:\Winnt\Printscreens\"
    Open "c:\Winnt\Printscreens\filepath.txt" For Random As #1 Len = Len(FilepathVar)
    Put #1, 1, FilepathVar
    Close #1
    Else
    Open "c:\Winnt\Printscreens\filepath.txt" For Random As #1 Len = Len(FilepathVar)
    Get #1, 1, FilepathVar
    Close #1
    End If
    Timer1.Enabled = True
    Timer1.Interval = 5000
    End SubPrivate Sub Timer1_Timer()
      If Right(FilepathVar.filepath, 1) <> "\" Then  FilepathVar.filepath = FilepathVar.filepath & "\"
      End IfForm1.Show
    Unload Me
    End Sub
    FORM2中设置路径及每隔多长时间保存
    Dim filepath1 As StringPrivate Sub Command1_Click()
    If Combo1.Text = "分" Then
    FilepathVar.interval_val = 60000
    ElseIf Combo1.Text = "秒" Then
    FilepathVar.interval_val = 1000
    End If
    If Right(Text1.Text, 1) <> "\" Then
    FilepathVar.filepath = Text1.Text & "\"
    Else
    FilepathVar.filepath = Text1.Text
    End IfFilepathVar.n = Val(Text3.Text)
    If Dir("c:\Winnt\Printscreens\filepath.txt") <> "" Then
    Kill "c:\Winnt\Printscreens\filepath.txt"
    Open "c:\Winnt\Printscreens\filepath.txt" For Random As #1 Len = Len(FilepathVar)
    Put #1, 1, FilepathVar
    Close #1
    End If Form1.ShowUnload MeEnd Sub
    Private Sub Command2_Click()
    Text3.Text = 10
    Text1.Text = "C:\WINNT\Temp\"
    Text3.SetFocus
    End
    End SubPrivate Sub Form_Load()Combo1.AddItem "分"
    Combo1.AddItem "秒"
    If FilepathVar.interval_val = 1000 Then
    Combo1.Text = "秒"
    ElseIf FilepathVar.interval_val = 60000 Then
    Combo1.Text = "分"
    End If
    Form2.Picture = Form3.Picture
    Text1.Text = FilepathVar.filepath
    Text3.Text = FilepathVar.n
    End Sub
    FORM1中,PRINTSCREEN,并保存为bmp, 同时转化为jpg保存Option Explicit
    Dim count_mins As Long
    Dim filepath1, filepath_bmp, filepath_jpg As String
    Dim bmpname As String
      Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
      Private Const theScreen = 1
       Private Const theForm = 0
    Private Sub Form_Load()
    Form1.Picture = Form3.Picture
    If Dir("c:\Winnt\Printscreens\printscreen.bmp") = "" Then
    SavePicture Picture1.Picture, "c:\Winnt\Printscreens\printscreen.bmp"
    End If'ImgEdit1.Image = "c:\Winnt\Printscreens\printscreen.bmp" '先让ImgEdit随便显示一幅图片,不然后面的语句执行时会发生错误
    'ImgEdit1.Display
    Timer1.Interval = FilepathVar.interval_val
    Timer1.Enabled = True
    count_mins = 0
    filepath1 = RTrim$(FilepathVar.filepath)End SubPrivate Sub Timer1_Timer() bmpname = Str$(Date) & "-" & RTrim$(LTrim$(Str$(Hour(Time)))) & "-" & RTrim$(LTrim$(Str$(Minute(Time)))) & "-" & RTrim$(LTrim$(Str$(Second(Time))))
      filepath_bmp = filepath1 & bmpname & ".bmp"
      filepath_jpg = filepath1 & bmpname & ".jpg"
      Text1.Text = filepath_bmp & Str$(count_mins) & Str$(FilepathVar.n)
      
      If count_mins = FilepathVar.n Then
           Call keybd_event(vbKeySnapshot, theScreen, 0, 0)             '   截取当前窗体所在屏幕图像
        Call keybd_event(vbKeySnapshot, theForm, 0, 0) '   截取当前屏幕图像
       'If (ImgEdit1.IsClipboardDataAvailable And ImgEdit1.ImageDisplayed) Then
    '从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标
         'ImgEdit1.ClipboardPaste 0, 0
          'ImgEdit1.CompletePaste
        ' End If
        ' ImgEdit1.SaveAs filepath, wiFileTypeJPG, , 6
      SavePicture Clipboard.GetData(vbCFDIB), filepath_bmp
       
       B2JGPOCX1.InName = filepath_bmp '要转换的BNP文件的路径
       B2JGPOCX1.OutName = filepath_jpg '要转换为的文件
       B2JGPOCX1.SaveJpg ''保存为JPG文件
       Kill filepath_bmp
         count_mins = 0 Else
        count_mins = count_mins + 1
        
    End IfEnd Sub'Private Sub Command1_Click()
    'If (ImgEdit1.IsClipboardDataAvailable And ImgEdit1.ImageDisplayed) Then
    '从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标
    'ImgEdit1.ClipboardPaste 0, 0
    'ImgEdit1.CompletePaste
    'End If
    '保存图片为jpg格式
    'ImgEdit1.SaveAs App.Path & "\" & "mytest.jpg", wiFileTypeJPG, , 6
    'End Sub
    'Private Sub Form_Load()
    'ImgEdit1.Image = App.Path & "\" & "06.jpg" '先让ImgEdit随便显示一幅图片,不然后面的语句执行时会发生错误
    'ImgEdit1.Display
    'End Sub