使用C 在console中獲取滑鼠事件

2021-09-26 07:53:58 字數 2674 閱讀 1859

第一點,使用標頭檔案

要在console裡進行操作,首先先說一下readconsoleinput()函式。

msdn的具體解釋如下:

來自這個函式主要是用於獲取控制台資訊。

其實lpbuffer所返回的資訊中,包括了多個事件,其中有focusevent,keyevent,windowbuffersizeevent,mouseevent, menuevent多個事件。

我們這裡引用滑鼠事件,mouseevent。而在lpbuffer中返回的lpbuffer.event.mouseevent.dwmouseposition就是滑鼠在控制台介面裡的所在位置。

左鍵單擊事件

判斷滑鼠事件的話,就可以通過 lpbuffer.eventtype == mouse_event && lpbuffer.event.mouseevent.dwbuttonstate == from_left_1st_button_pressed來判斷左鍵單擊事件。

左鍵雙擊事件

lpbuffer.eventtype == mouse_event && lpbuffer.event.mouseevent.dweventflags == rightmost_button_pressed

右鍵單擊事件

lpbuffer.eventtype == mouse_event && lpbuffer.event.mouseevent.dwbuttonstate == rightmost_button_pressed

其餘的事件如下:

所以最後在程式中可以順利判斷各類滑鼠狀態。

簡單的**例程。

/

// writen by tianhuahua//

/#include "stdafx.h"

#include "windows.h"

using namespace std;

int main()

if (eventmsg.eventtype == mouse_event && eventmsg.event.mouseevent.dweventflags == rightmost_button_pressed)

} return 0;

}

有乙個問題需要注意:vs中編譯,在標頭檔案處,

#include "

windows.h

"#include

"stdafx.h

"

會出現類似錯誤。handle:為宣告的識別符號。

error c2146: 語法錯誤 : 缺少「;」(在識別符號「hservstatus」的前面)

error c2501: 「hservstatus」 : 缺少儲存類或型別說明符

error c2146: 語法錯誤 : 缺少「;」(在識別符號「hsstat」的前面)

error c2501: 「hsstat」 : 缺少儲存類或型別說明符

error c2065: 「service_table_entry」 : 未宣告的識別符號

error c2146: 語法錯誤 : 缺少「;」(在識別符號「dispatchtable」的前面)

error c2065: 「dispatchtable」 : 未宣告的識別符號

error c2059: 語法錯誤 : 「]」

error c2143: 語法錯誤 : 缺少「;」(在「」的前面)

warning c4550: 表示式計算為缺少引數列表的函式

error c2143: 語法錯誤 : 缺少「;」(在「,」的前面)

error c2143: 語法錯誤 : 缺少「;」(在「」的前面)

error c3861: 「startservicectrldispatcher」: 即使使用引數相關的查詢,也未找到識別符號

error c3861: 「dispatchtable」: 即使使用引數相關的查詢,也未找到識別符號

error c2065: 「sc_handle」 : 未宣告的識別符號

error c2146: 語法錯誤 : 缺少「;」(在識別符號「schscmanager」的前面)

error c2065: 「schscmanager」 : 未宣告的識別符號

error c2146: 語法錯誤 : 缺少「;」(在識別符號「schservice」的前面)

error c3861: 「sc_handle」: 即使使用引數相關的查詢,也未找到識別符號

error c2065: 「schservice」 : 未宣告的識別符號

error c2065: 「sc_manager_all_access」 : 未宣告的識別符號

error c3861: 「schscmanager」: 即使使用引數相關的查詢,也未找到識別符號

error c3861: 「openscmanager」: 即使使用引數相關的查詢,也未找到識別符號

error c3861: 「schscmanager」: 即使使用引數相關的查詢,也未找到識別符號

解決方法:改變標頭檔案的順序如下:

#include 「stdafx.h」

#include

在Console工程中引用CString

cstring 是封裝的非常不錯的乙個類,相比於stl的string,它提供了更加豐富的成員方法。雖然在控制台工程中,string基本已經能夠完成需要的功能,但是,如果能夠偷懶一下的話 在console工程中引用cstring方法如下 1.工程設定 project setting general 中...

在WinMain中嵌Console視窗

很多時候,除錯gui程式是很不方便的,通常的做法是使用messagebox,但是作為乙個模態視窗,它經常產生不必要的訊息,比如killfocus,setfocus或者paint,從而影響除錯的執行過程。當然,使用vc的偵錯程式也不錯,但是這樣也很容易造成視窗切換從而產生干擾訊息。因此,如果能像在控制...

Windows API了解使用者是否在使用滑鼠或鍵盤

程式設計之美 1.10的最後提到了乙個問題,就是windows中什麼api能了解使用者是否在使用滑鼠或鍵盤,或者發現使用者在幾秒之內沒有滑鼠 鍵盤的輸入?網上搜尋了一下資料,覺得大概有兩種方法 1 getinputstate 函式原型 bool getinputstate void 函式功能 該函式...