Vậy là đã vào đông thật rồi, cái cảm giác lạnh buốt đôi khi làm con người ta ngây ngô đứng lại lặng nhìn quãng thời gian bon chen trong cuộc sống đã trôi qua. Để rồi phút chốc chợt nhận ra mình đã lãng quên điều gì rồi chăng?
Cũng đã lâu rồi không có hoạt động gì trong diễn đàn, nhân tiện bữa nay có chút thời gian trầm tư, mình xin chia sẻ một project nhỏ mà mình đã tham gia khá lâu rồi, hi vọng sẽ giúp ích được cho bạn nào đang cần tới.

Ide: Visual C++ 2005
SourceCode: PinkVirtualKeyboard.zip
Demo: DemoVirtualKeyboard.zip

Mục đích:
Xây dựng tiện ích bàn phím ảo hỗ trợ nhập các ký tự, chống lại các loại keylog thông dụng, bảo vệ thông tin và dữ liệu của người dùng.
Tính năng:
  • Trang bị các tính năng chống keylog cho class "text" của hệ thốngChống các loại keylog bắt thông điệp bàn phím:
    Tiện ích VirtualKeyboard trang bị 2 cơ chế giả lập nút bấm ở chế độ user mode thông qua Window Message queue
    <ul>
  • Public
    Cơ chế giả lập nút bấm thông thường, bị các loại keylog bắt thông điệp bàn phím phát hiệnPrivate
    Cơ chế giả lập nút bấm riêng giữa VirtualKeyboard và hộp nhập dữ liệu, không bị các loại keylog bắt thông điệp bàn phím phát hiện
Chống các loại keylog chụp màn hình:
Tiện ích VirtualKeyboard giúp người dùng có thể hoàn toàn tránh được các loại keylog chụp màn hình, với tổ hợp của hai chức năng:
  • Mặt nạ bàn phím
    Cho phép người dùng tùy chỉnh trạng thái ẩn/hiện ký tự trên các nút bấmĐảo ngẫu nhiên vị trí các nút bấm
</ul>

Sử dụng:
1. Khởi tạo
Include headers

Mã:
#include "PinkKeyboard.h"#include <OleIdl.h>#include <GdiPlus.h>
Đầu chương trình

Mã:
static Gdiplus::GdiplusStartupInput gdiInput;static ULONG_PTR gdiToken; GdiplusStartup(&gdiToken, &gdiInput, NULL);OleInitialize(NULL);PinkVkGlobalInit();
Kết thúc chương trình

Mã:
PinkVkGlobalClose();OleUninitialize();Gdiplus::GdiplusShutdown(gdiToken);
2. Functions

Mã:
PinkVkShow(TCHAR *fileConfig=NULL, int left=0x80000000, int top=0)
Hiển thị cửa sổ VirtualKeyboard, nếu đã có thì tự động đóng cửa sổ cũ
  • fileConfig: đường dẫn tới file lưu config (có thể NULL)left, top: vị trí góc trên trái cửa sổ



Mã:
PinkVkClose()
Đóng cửa sổ VirtualKeyboard nếu có



Mã:
PinkVkSetupCommunication(HWND hWnd, BOOL bSubWin=TRUE)
Tạo một kết nối giả lập bàn phím private giữa VirtualKeyboard và cửa sổ hWnd
  • hWnd: HWND của cửa sổ cần tạo kết nốibSubWin: TRUE thì sẽ tạo kết nối tới tất cả cửa sổ con của hWnd, FALSE thì chỉ có cửa sổ hWnd được tạo kết nối

Chú ý: khi cửa sổ hWnd bị hủy, kết nối private cũng sẽ bị hủy theo.

3. Resource
- Copy file PinkResource.h, PinkVirtualKeyboard.rc và folder ResourceFiles vào project cần sử dụng.
- Add 2 file PinkResource.h và PinkVirtualKeyboard.rc vào project
- Thực hiện add resource vào project như sau:
DoubleClick vào file *.rc của project chính trong cửa sổ solution


Sau đó các bạn sẽ được chuyển qua cửa sổ resource. Click phải vào dòng *.rc, sẽ hiện ra menu như sau:

Các bạn chọn dòng "Resource Includes...", sẽ hiện ra một cửa sổ mới, các bạn config như trong hình dưới