Chụp ảnh màn hình

Liên hệ QC

ilvba

Thành viên mới
Tham gia
24/6/19
Bài viết
32
Được thích
7
các anh chị cho em hỏi, có cách nào để macro chụp ảnh một vùng cố định trên màn hình không ạ.
và làm thế nào để xác định tọa độ 4 điểm trên màn hình ạ.
Em cảm ơn ạ.
 
@ Chủ thớt và bài #15:

Các bạn không cần phải làm gì ngoài việc dùng Excel 2010 trở lên.

Sử dụng chức năng có sẵn Insert/ Screenshot/ Screen Clipping.

Nó còn hịn tới mức gợi ý sẵn/ cho chọn cửa sổ ứng dụng đang chạy. Khi kích hoạt tính năng Screen Clipping thì cửa sổ Excel hiện hành tự động chui xuống taskbar (Nếu muốn chụp chính cửa số Excel đó thì ta click chuột vào nó ở dưới taskbar cho nó hiện lên màn hình).
Nó cho phép QUÉT một cửa sổ hình chữ nhật bất kỳ để được khung hình theo ý muốn (Clipping), và tự động chèn luôn vào bảng tính.


219976
 
Upvote 0
Hay nhỉ, Excel 2010 có cả tính năng này à
 
Upvote 0
32 bit cho cái gì nhỉ? ===\. thế cấu hình của mình đang ko tương thích hở bác?
Có office 32 bit và office 64 bit. Bạn có 64 bit còn code viết cho 32 bit.
vậy có cách nào cắt ảnh của pdf được bác nhỉ?
Làm chơi tí.

Tôi đính kèm tập tin để test. Chạy cả trong Excel 2007 (tôi không có 2007 nhưng tin là sẽ chạy). Ít ra thì những người dùng Excel < 2010 có công cụ để dùng.

Vài chú ý:
1. Vấn đề xác định vùng trên màn hình cần copy là vấn đề "khó". Ý tưởng hiện tại của tôi là hook chuột. Khi bạn click ở đâu đó và giữ chuột trái không thả thì code ghi nhớ điểm đó trên màn hình. Sau đó vẫn không thả chuột mà kéo tới điểm kết thúc (kéo sang phải và xuống dưới) thì trong quá trình kéo sẽ nhìn thấy (code vẽ hình chữ nhật trên màn hình) vùng hiện hành đang được chọn. Khi tới điểm kết thúc vừa ý thì mới thả chuột trái. Lúc này code sẽ ghi nhớ điểm kết thúc và dựa vào điểm đầu và kết thúc để xác định vùng cần copy rồi copy vùng đó trên màn hình vào sheet. Đây là cách thực hiện trong tập tin copy desktop to sheet with drawing.xlsm.

Tuy nhiên trong quá trình kéo chuột trên vd. cửa sổ PDF thì đôi khi ta thấy cửa sổ bị xê dịch - cái này là do chương trình soạn thảo PDF chứ không phải là lỗi code. Thậm chí nếu thao tác trong cửa sổ notepad thì đoạn văn bản trong vùng chọn được bôi đen. Đó là do notepad xử lý, chả phải do Excel với code của nó. Chả mở Excel mà mở notepad thì khi nhấn giữ chuột rồi kéo thì notepad sẽ bôi đen vùng chọn. Hậu quả là các hình chữ nhật trung gian không được xóa chuẩn. Và nếu văn bản được bôi đen (vd. trong notepad) thì ảnh đen đó sẽ hiển thị trong Excel, vì code copy những gì mắt nhìn thấy.

Thực ra để xác định điểm đầu và cuối không cần vẽ hình chữ nhật. Vẽ chẳng qua để người dùng nhìn thấy vùng mình chọn. Để không vẽ thì dùng tập tin copy desktop to sheet without drawing.xlsm. Nhưng lúc này thao tác là: đưa chuột vào điểm đầu, nhớ là căn chính xác, và click. Tiếp theo đưa chuột vào điểm kết thúc ở dưới và bên phải so với điểm đầu rồi click lần thứ 2.

Cả 2 code, vẽ và không vẽ, sau khi copy vùng vào sheet thì đều gỡ bỏ hook chuột. Tức muốn copy nữa thì lại phải thao tác lại.

Tất nhiên để tránh bôi đen, xê dịch (cuộn cửa sổ) thì ta có thể tạo 1 cửa sổ của Windows lớp "STATIC" và cho nó trong suốt và nằm trên cửa sổ cần copy (PDF, word, VBA ...). Lúc đó thao tác sẽ được thực hiện trên cửa sổ STATIC nên không có chuyện xê dịch, bôi đen. Code để tạo window (CreateWindowEx), làm trong suốt thì ngay trên GPE cũng từng có. Tôi lười viết thêm, nhưng việc tạo STATIC là không hề khó. Lúc đó thì có thể bỏ hook chuột vì việc phát hiện click sẽ được thực hiện trong hàm cửa sổ (WindowProc) của cửa sổ STATIC. Hàm WindowProc sẽ được thay, đánh tráo cho hàm cửa sổ mặc định của STATIC - dùng SetWindowLong + GWL_WNDPROC. Tất nhiên khi xong việc thì trả lại hàm cửa sổ mặc định cho STATIC. Những trò này tôi chơi hơn 20 năm trước nhưng bây giờ lười viết quá.

2. Do code được khởi động khi Excel hoạt động và nó hook chuột để bắt sự kiện về chuột (nhấn, di chuyển, thả) nên tiếp theo không thể chuyển sang ứng dụng khác (notepad, word, PDF, cửa sổ VBA ...) bằng chuột được. Vì sao? Vd. sau khi nhấn Button1 mà ta nhấn icon của PDF trên taskbar bằng chuột thì có nghĩa là lúc đó đã sảy ra sự kiện chuột nhấn và chuột thả, mà chuột thả thì là copy vùng chữ nhật có 2 chiều = 0 (vì 2 điểm nhấn thả trùng nhau) rồi gở bỏ hook chuột. Do vậy khi PDF hiển thị thì không còn hook chuột để theo dõi nhấn thả nữa.

Vì lý do trên sau khi nhấn Button1 thì phải dùng bàn phím để hiển thị PDF. Thao tác như sau: Nhấn Button1 -> nhấn Alt trái và giữ -> nhấn lần lượt TAB tới khi tới icon của PDF -> thả Alt -> click điểm đầu rồi giữ (trường hợp copy desktop to sheet with drawing.xlsm), hoặc click điểm đầu (copy desktop to sheet without drawing.xlsm) -> kéo chuột tới điểm cuối rồi thả (trường hợp copy desktop to sheet with drawing.xlsm), hoặc click điểm cuối (trường hợp copy desktop to sheet without drawing.xlsm).

3. Trong cả 2 tập tin thì giữa 2 thời điểm click điểm đầu và cuối không được phép cuộn cửa sổ - hoặc ứng dụng tự cuộn hoặc ta tự cuộn thì đều không được. Vì sao? Vd. khi click điểm đầu và nó có tọa độ là (x1, y1) trên màn hình. Khi click điểm cuối nó có tọa độ (x2, y2). Nhưng do cửa sổ được cuộn nên cái điểm (x1, y1) trên màn hình kia bây giờ nó lại nằm ở nội dung khác trong cửa sổ ứng dụng (notepad, word, PDF, VBA ...). Thậm chí do cuộn thì điểm click (x2, y2) tuy nằm trên màn hình nhưng có thể rơi vào đoạn nội dung mà khi click điểm đầu nó không được nhìn thấy do nằm ngoài màn hình. Hậu quả là vẽ cũng không đúng mà hình chữ nhật được xác định từ các tọa độ đầu và cuối cũng không chính xác, tiếp theo là vùng không mong muốn sẽ được copy vào sheet.

4. Cách tốt nhất là dùng copy desktop to sheet without drawing.xlsm và click 2 lần để chọn điểm đầu (góc trên bên trái) và điểm cuối (gọc dưới bên phải). Cần di chuyển chuột thật chính xác tới điểm đầu và cuối rồi click.
 

File đính kèm

  • copy desktop to sheet with drawing.xlsm
    25.2 KB · Đọc: 11
  • copy desktop to sheet without drawing.xlsm
    24.4 KB · Đọc: 12
Upvote 0
@ Chủ thớt và bài #15:

Sử dụng chức năng có sẵn Insert/ Screenshot/ Screen Clipping.

Nó còn hịn tới mức gợi ý sẵn/ cho chọn cửa sổ ứng dụng đang chạy. Khi kích hoạt tính năng Screen Clipping thì cửa sổ Excel hiện hành tự động chui xuống taskbar (Nếu muốn chụp chính cửa số Excel đó thì ta click chuột vào nó ở dưới taskbar cho nó hiện lên màn hình).
Nó cho phép QUÉT một cửa sổ hình chữ nhật bất kỳ để được khung hình theo ý muốn (Clipping), và tự động chèn luôn vào bảng tính.


View attachment 219976
Ôi em làm được rồi, cám ơn bác lắm ạ. Nhưng nó nhanh quá, không kịp tìm được cửa sổ khác là nó bị dính ở cửa sổ hiện hành luôn, em phải làm nhanh thật nhanh mới kịp
 
Upvote 0
Ôi em làm được rồi, cám ơn bác lắm ạ. Nhưng nó nhanh quá, không kịp tìm được cửa sổ khác là nó bị dính ở cửa sổ hiện hành luôn, em phải làm nhanh thật nhanh mới kịp
Tôi không hiểu bạn nói gì. Với tôi cứ phải diễn giải cụ thể.

Tôi có làm lại như đã định, tức giống như tool trong Excel. Bạn thử test xem
 

File đính kèm

  • myScreenClipping.xlsm
    38.4 KB · Đọc: 27
Upvote 0
Tôi không hiểu bạn nói gì. Với tôi cứ phải diễn giải cụ thể.

Tôi có làm lại như đã định, tức giống như tool trong Excel. Bạn thử test xem
Tôi không hiểu bạn nói gì. Với tôi cứ phải diễn giải cụ thể.

Tôi có làm lại như đã định, tức giống như tool trong Excel. Bạn thử test xem
Tuyệt vời bác ạ. Em thích code hơn là cách sẵn có của Excel
Cách bác befaint hướng dẫn, trong vòng vài giây là nó đã đứng yên và bắt mình phải chọn khu vực chụp.
Khi em bấm nút, nó đưa về màn hình trang GPE nhưng em đang muốn chụp trang excel thì khi em bấm vào excel nó lại trả về dấu + như hình (nghĩa là mất lệnh chụp).
Để kịp chụp là phai chọn trang excel ngay tức thì thì nó mới còn lệnh chụp (em nghĩ trong vòng 3 giây phải mở excel lên mới kịp, nếu không nó sẽ xem như mình muốn chụp màn hình mà chưa kịp chuyển). Bác thử làm mà để yên cỡ 5 giây đi ạ, nó sẽ không cho mình chọn thứ khác trên taskbar nữa (nếu chọn thì coi như mất lệnh chụp)
Em có video mà ko up được
 

File đính kèm

  • FDAA5BF4-16B4-4FDD-9B12-EA86BCD28C91.jpeg
    FDAA5BF4-16B4-4FDD-9B12-EA86BCD28C91.jpeg
    4.8 MB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom