Viết form chụp ảnh màn hình chỉ cần nhấn Print Screen

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

Post Reply
quangthach59
Thành viên chính thức
Thành viên chính thức
Posts: 26
Joined: Wed 16/05/2012 9:57 pm
Has thanked: 16 times

Viết form chụp ảnh màn hình chỉ cần nhấn Print Screen

Post by quangthach59 »

Forum đừng xóa bài vội vì bài tương tự "Tự động take screenshots bằng form vb.net" là của mình (Bài viết cũ http://www.caulacbovb.com/forum/viewtop ... 0&p=136743)
Lần này mình có hỏi khác hơn, đấy là mình muốn tạo form mà kể cả khi form đấy đang hiện hoặc ẩn đi nữa thì chỉ cần nhấn PrtScr thì ảnh vẫn tự động được lưu, chủ yếu là thao tác gì với nút PrtScr thôi vì chụp màn hình đã có code rồi :D

Code: Select all

Dim bounds As Rectangle
        Dim screenshot As Bitmap
        Dim graph As Graphics
        bounds = Screen.PrimaryScreen.Bounds
        screenshot = New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppPArgb)
        graph = Graphics.FromImage(screenshot)
        graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
        PictureBox1.Image = screenshot
        PictureBox1.Image.Save("D:\ASC\" & Now.ToString("yyyyMMdd") & "_" & Now.ToString("HH_mm_ss") & ".png", System.Drawing.Imaging.ImageFormat.Png)
User avatar
gtdcomputer
Thành viên danh dự
Thành viên danh dự
Posts: 1296
Joined: Fri 18/07/2008 12:08 pm
Location: Kiên Giang
Has thanked: 8 times
Been thanked: 116 times
Contact:

Re: Viết form chụp ảnh màn hình chỉ cần nhấn Print Screen

Post by gtdcomputer »

Dùng Hotkey để làm:
- Các khai báo cho hotkeyglocal:
  1. Public Const MOD_ALT As Integer = &H1 'Alt key
  2.  
  3. Public Const VK_PRINTSC As Integer = &H2C    ' Printsceen key
  4.  
  5. Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
  6.  
  7. Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
  8.  
  9. Public Const WM_HOTKEY As Integer = &H312

- Đăng ký hotkey với hệ thống khi mở form
  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.  
  3. RegisterHotKey(Me.Handle, 101, 0, VK_PRINTSC) 'Đăng ký hotkey
  4. 'Tham số 101 là chỉ số của hotkey, do mình tự đặt, nhiều hotkey thì đổi số khác cho mỗi hotkey
  5. 'Tham số 0 tức là phím MOD ở đây mình đặt là 0 tức là ko có phím MOD, phím MOD tức là Ctrol, alt shift các loại
  6. 'Nếu tham số 0 nó ko nhận thì sử thành &0 thử xem ;v lâu quá quên cmnr
  7.  
  8. End Sub

- Hủy đăng ký khi đóng form lại, cái này để tránh tràng bộ nhớ khi chạy ứng dụng nhiều lần:
  1. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  2.  
  3. UnregisterHotKey(Me.Handle, 101)  'Xóa hotkey số 101, có nhiều hostkey thì làm nhiều lần với các id của nó mà mình đặt ở trên
  4.  
  5. End Sub

- Xử lý khi kích hoạt hotkey
  1. Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
  2.  
  3. If m.Msg = WM_HOTKEY Then
  4.             Select Case m.WParam.ToInt32
  5.                 Case 101 'Cái này là id của hotkey ở trên
  6.                     PrintScreenFunction 'Cái hàm printscreen của bạn đặt ở đây
  7.                 Case 102 'Nhiều hotkey thì nhiều id cứ case từng cái một
  8.                     'Cái gì đó ko bik, ko có thì xóa đi
  9.             End Select
  10.         End If
  11.         MyBase.WndProc(m)
  12.  
  13. End If


PS: Code chửa có tét
Con người không quan tâm đến sự thật. Họ tin cái họ muốn, và về sau, cái đó sẽ trở thành sự thật
quangthach59
Thành viên chính thức
Thành viên chính thức
Posts: 26
Joined: Wed 16/05/2012 9:57 pm
Has thanked: 16 times

Re: Viết form chụp ảnh màn hình chỉ cần nhấn Print Screen

Post by quangthach59 »

đã test code xong, do em chỉ có nhu cầu dùng 1 phím nên bỏ mod_alt với case 102 là xong, cảm ơn boss ạ :D =D>
Post Reply

Return to “Visual Basic .NET và C# (VB.NET & C#)”