Làm cách nào để phát hiện sự kiện bàn phím bằng ngôn ngữ C mà không sử dụng thư viện của bên thứ ba? Tôi có nên sử dụng xử lý tín hiệu không?Phát hiện sự kiện bàn phím trong C
6
A
Trả lời
8
Không phải là cách tiêu chuẩn, nhưng những điều này sẽ giúp bạn bắt đầu.
Windows:
getch();
Unix:
Sử dụng mã này từ cuốn sách Unix Programming W. Richard Stevens' để thiết lập thiết bị đầu cuối của bạn trong chế độ thô, và sau đó sử dụng read().
static struct termios save_termios;
static int term_saved;
int tty_raw(int fd) { /* RAW! mode */
struct termios buf;
if (tcgetattr(fd, &save_termios) < 0) /* get the original state */
return -1;
buf = save_termios;
buf.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
/* echo off, canonical mode off, extended input
processing off, signal chars off */
buf.c_iflag &= ~(BRKINT | ICRNL | ISTRIP | IXON);
/* no SIGINT on BREAK, CR-toNL off, input parity
check off, don't strip the 8th bit on input,
ouput flow control off */
buf.c_cflag &= ~(CSIZE | PARENB);
/* clear size bits, parity checking off */
buf.c_cflag |= CS8;
/* set 8 bits/char */
buf.c_oflag &= ~(OPOST);
/* output processing off */
buf.c_cc[VMIN] = 1; /* 1 byte at a time */
buf.c_cc[VTIME] = 0; /* no timer on input */
if (tcsetattr(fd, TCSAFLUSH, &buf) < 0)
return -1;
term_saved = 1;
return 0;
}
int tty_reset(int fd) { /* set it to normal! */
if (term_saved)
if (tcsetattr(fd, TCSAFLUSH, &save_termios) < 0)
return -1;
return 0;
}
3
Chuẩn C không có bất kỳ cơ sở nào để phát hiện sự kiện bàn phím, thật không may. Bạn phải dựa vào các tiện ích mở rộng nền tảng cụ thể. Xử lý tín hiệu sẽ không giúp bạn.
3
Bạn thực sự nên sử dụng thư viện của bên thứ ba. Có chắc chắn không có cách độc lập nền tảng để làm điều đó trong ANSI C. Xử lý tín hiệu không phải là cách.
4
Các vấn đề liên quan
- 1. Gửi sự kiện chuột và bàn phím
- 2. Có thể phát hiện sự kiện lấy nét bàn phím trên toàn cầu không?
- 3. Typeahead.js, scrollbar và bàn phím sự kiện
- 4. Sự kiện iOS khi bàn phím giấu
- 5. Kích hoạt sự kiện nhấn phím bàn phím mà không cần nhấn phím từ bàn phím
- 6. phát hiện bàn phím iPad Ẩn nút
- 7. phát hiện nút tìm kiếm bàn phím
- 8. Phát hiện móc khóa bàn phím
- 9. Sự kiện trì hoãn và bàn phím trong OCaml
- 10. các sự kiện bàn phím chụp wxpython trong một wx.Frame
- 11. Đọc các sự kiện bàn phím trong Android WebView
- 12. Phát hiện ẩn bàn phím iPad so với bàn phím bên ngoài có kết nối không?
- 13. Phát hiện sự kiện gắn ổ đĩa trong C#
- 14. Nhận nhân vật chính xác trên sự kiện bàn phím
- 15. Làm thế nào để phát hiện sự hiện diện của bàn phím phần cứng?
- 16. Phát hiện sự kiện khóa kết hợp
- 17. Bàn phím xử lý Đã nhấn sự kiện trên Iphone
- 18. Phát hiện xem trình duyệt có các phím mũi tên/bàn phím trong trang web không
- 19. Phát hiện loại bàn phím (Qwerty hoặc Dvorak)
- 20. Sự kiện cho SELECT onchange với bàn phím
- 21. Tìm thiết bị sự kiện cho bàn phím, chuột
- 22. javascript: Cách gỡ lỗi sự kiện bàn phím
- 23. Tạo sự kiện bàn phím cho ứng dụng phía trước
- 24. javascript - phát hiện phím ctrl được nhấn hoặc lên, sự kiện nhấn phím không kích hoạt
- 25. Phát hiện phím Shift được nhấn mà không sử dụng các sự kiện trong Windows Forms?
- 26. đính kèm các sự kiện bàn phím vào html5 canvas
- 27. Kích hoạt sự kiện bàn phím trên Chrome
- 28. Làm cách nào để phát hiện bàn phím libgdx
- 29. Phát hiện ngôn ngữ IME trên bàn phím trên Android
- 30. Android - Phát hiện bàn phím có thể nhìn thấy?