Tự động hóa một số tác vụ (gõ phím) sử dụng C++
White

Minh Tú Anh viết ngày 14/07/2018

Đặt vấn đề

mình đang phải đọc một quyển ebook tiếng anh, khổ nỗi tiếng anh thì có hạn. Vì vậy mình thường xuyên phải alt+tab giữa ebook vs google translate để dịch.
Mỗi lần dịch một từ, mình phải làm như sau

  • bôi đen
  • ctrl+c
  • alt+tab
  • ctrl+a
  • ctrl+v
  • alt+tab

vừa mất thời gian, vừa mỏi tay. mình đành lên gg search một vòng xem có cách nào tối ưu cái công đoạn trên ko. tìm mãi mới có một cách chạy được, node vào đây cho đỡ quên

mình dùng linux, chương trình viết bằng C++

Bắt đầu

Đầu tiên, làm quen với công cụ xdotool. Nói chung chung nó là công cụ giúp mình giả lập các tín hiệu bàn phím, chuột thông qua terminal. Ví dụ, muốn tăng âm lượng, trên terminal, các bạn gõ lệnh
$ xdotool key XF86AudioRaiseVolume
hướng dẫn cài đặt và sử dụng ở đây
tra cứu key các bạn xem ở đây

Tiếp theo, các bạn viết chương trình C++
alt text
Hàm kbhit phát hiện có ký tự nhập từ bàn phím không
Sử dụng lệnh system để thực hiện các câu lệnh trên terminal
Dịch như một chương trình C++ bình thường
g++ -o demo demo.cpp
Trong chương trình này, mình bắt sự kiện khi nhấn phím 'a', nó sẽ tự động sao chép và paste và google translate, nhấn phím 'z' thì quay ngược lại ebook. hihi, tối ưu hơn nhiều cái công đoạn trên.

Các bạn cũng có thể áp dụng cách này cho những trường hợp mà cứ phải gõ đi gõ lại một số thao tác phím nào đó liên tục.

==> Cách trên mình chưa làm được khi chương trình chạy nền (rõ ràng khi mình đọc ebook thì nó phải chạy nền rồi), thì chương trình sẽ không nhận bàn phím nữa, search gg cũng có một vài cách nhưng chưa chạy được

VẤN ĐỀ CẦN GIẢI QUYẾT: Detect keypress of foreground application from background
Nếu bạn nào có cách giải quyết vấn đề trên thì để lại comment nhé. :smile:
Xin cảm ơn !!!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Minh Tú Anh

10 bài viết.
8 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
12 0
Giả sử ta có thư mục cdemo trong thư mục cdemo, ta có 3 file main.c, sum.c, sum.h với nội dung lần lượt như sau main.c include "sum.h" int ma...
Minh Tú Anh viết 3 tháng trước
12 0
White
6 0
1. Intent là gì ? Intents là một thành phần quan trọng trong android. Nó cho phép các thành phần ứng dụng có thể yêu cầu các hàm từ các thành phần ...
Minh Tú Anh viết hơn 1 năm trước
6 0
White
5 1
Xin chào các bạn. Vào chủ đề chính luôn nhé, hôm nay mình sẽ hướng dẫn các bạn sử dụng fragment trong android. Đây là một thành phần khá quan trọng...
Minh Tú Anh viết hơn 1 năm trước
5 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
10 bài viết.
8 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!