2015-05-06 11 views
0

我不確定我應該用什麼關鍵字來搜索這個,所以我會在這裏問一下。如果這是重複的,我很抱歉。用於Linux的C++背景程序

基本上,我想做到以下幾點

./my_prog & 

其中my_prog,在C++ 14的編碼,

  • 添加到文件一個,每當我右鍵單擊一個字符。
  • 每當我離開單擊時向文件B添加一個字符。
  • 無論何時按下某個鍵,都會在文件C中添加一個字符。

(這將使我,看我怎麼經常做上述任何在這一天結束。)

首先,我想使用Qt,但我意識到,不久即Qt的做,在其只有自己的窗戶。 (或者至少,就我可以使用它而言。)這不會有幫助,因爲我寧願每計算一次點擊和按鍵都有my_prog

任何人都知道我應該使用什麼庫/函數?謝謝。

+0

你想要[KeyLogger](http://en.wikipedia.org/wiki/Keystroke_logging)? –

+0

是的,有點。但我想自己編寫代碼,除非這太複雜了。 –

+1

它比調用一個函數更復雜。在將事件/中斷記錄到後臺應用程序時,您需要在OS或中斷中攔截事件並讓事件或中斷通過。換句話說,這是一個系統級別的功能,而不是應用程序級別。 – lurker

回答

0

您需要在Linux中讀取鼠標設備。在我的Ubuntu中,該設備是'/ dev/input/event4',你可以從'/ proc/bus/input/devices'中檢查你的設備。

在linux/input.h頭文件中,您可以找到'input_event'結構,它可以用來處理不同的鼠標事件。

下面是簡單的例子

#include <stdio.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include <time.h> 
#include <linux/input.h> 

#define MOUSEFILE "/dev/input/event4" 

int main() 
{ 
    int fd; 
    struct input_event ie; 

if((fd = open(MOUSEFILE, O_RDONLY)) == -1) { 
    perror("Cannot access mouse device"); 
    exit(EXIT_FAILURE); 
     } 
while(read(fd, &ie, sizeof(struct input_event))) { 
    printf("%d, %d, %d\n", ie.type, ie.value, ie.code); 
} 
return 0; 

}

你可以找到更多關於input_event結構和代碼的定義從http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/input.h?v=2.6.11.8

例如在我的機器,我意識到,我離開的時候點擊我鼠標發生以下組合

ie.type = 1 
ie.value = 1 
ie.code = 272 

這可能有助於在Linux中捕獲不同的事件。