按下按钮单击屏幕截图

时间:2014-05-06 08:21:30

标签: mouseevent vb.net-2010

我正在尝试创建一个屏幕捕获工具。到目前为止,我有一个简单的程序,当在表单上单击一个按钮时,它会显示一个屏幕。

我想知道当你在屏幕上的任何地方点击鼠标时,如何让我的代码运行,而不仅仅是在按钮或表单上。

感谢您的帮助

到目前为止我的代码

    Private Sub btnCapture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCapture.Click
    Dim ScreenShot As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Dim ScreenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(ScreenGrab)
    g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenShot)
    ScreenGrab.Save("C:\snap.jpg")
End Sub

3 个答案:

答案 0 :(得分:0)

我可以建议您在项目中使用Usersnap之类的工具,而不是重新发明轮子。

答案 1 :(得分:0)

请尝试以下代码:

Imports System.Runtime.InteropServices
Public Class Form1
Dim result As Integer
<DllImport("user32.dll")> _
Public Shared Function GetAsyncKeyState(ByVal vKey As Int32) As Short
End Function
Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MOVE = &H1
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10
Private Structure MSLLHOOKSTRUCT
    Public pt As Point
    Public mouseData As Int32
    Public flags As Int32
    Public time As Int32
    Public extra As IntPtr
End Structure
Private _mouseHook As IntPtr
Private Const WH_MOUSE_LL As Int32 = 14
Private Delegate Function CallBack(ByVal nCode As Int32, ByVal wParam As IntPtr, ByRef lParam As MSLLHOOKSTRUCT) As Int32
<MarshalAs(UnmanagedType.FunctionPtr)> Private _mouseProc As CallBack
Private Declare Function SetWindowsHookExW Lib "user32.dll" (ByVal idHook As Int32, ByVal HookProc As CallBack, ByVal hInstance As IntPtr, ByVal wParam As Int32) As IntPtr
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hook As IntPtr) As Boolean
Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal idHook As Int32, ByVal nCode As Int32, ByVal wParam As IntPtr, ByRef lParam As MSLLHOOKSTRUCT) As Int32
Private Declare Function GetCurrentThreadId Lib "kernel32.dll" () As Integer
Private Declare Function GetModuleHandleW Lib "kernel32.dll" (ByVal fakezero As IntPtr) As IntPtr
Public Function InstallHook() As Boolean
    If _mouseHook = IntPtr.Zero Then
        _mouseProc = New CallBack(AddressOf MouseHookProc)
        _mouseHook = SetWindowsHookExW(WH_MOUSE_LL, _mouseProc, GetModuleHandleW(IntPtr.Zero), 0)
    End If
    Return _mouseHook <> IntPtr.Zero
End Function
Public Sub RemoveHook()
    If _mouseHook = IntPtr.Zero Then Return
    UnhookWindowsHookEx(_mouseHook)
    _mouseHook = IntPtr.Zero
End Sub
Private Function MouseHookProc(ByVal nCode As Int32, ByVal wParam As IntPtr, ByRef lParam As MSLLHOOKSTRUCT) As Int32
    Try
        For i = 1 To 255
            result = 0
            result = GetAsyncKeyState(i)
            Me.Text = result
            If result = -32767 Then
                Dim ScreenShot As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
                Dim ScreenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
                Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(ScreenGrab)
                g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenShot)
                ScreenGrab.Save("C:\snap.jpg")
            End If
        Next i
    Catch ex As Exception
    End Try
End Function
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    RemoveHook()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    InstallHook()
End Sub

结束班

答案 2 :(得分:-1)

在Asp Dotnet上拍摄屏幕截图

客户端

asp:Button runat="server" ID="Button1" OnClick="Button1_Click" />

服务器侧

using System.Drawing;
using System.Drawing.Imaging;
using System.Timers;


protected void Button1_Click(object sender, EventArgs e)
{
    Capture("E:/ScreenShot.bmp");//path to Save Captured files  
}
public static void Capture(string CapturedFilePath) 
{
    Bitmap bitmap = new Bitmap
       (Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

    Graphics graphics = Graphics.FromImage(bitmap as System.Drawing.Image);
    graphics.CopyFromScreen(25, 25, 25, 25, bitmap.Size);

    bitmap.Save(CapturedFilePath, ImageFormat.Bmp);
}
相关问题