www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 智能硬件 > 智能硬件
[導(dǎo)讀]基于Windows NT/2000 的應(yīng)用系統(tǒng)中,一些關(guān)鍵的人機交互工作站,常需要了解并記錄所有操作人員操作計算機的情況。如: 在工業(yè)控制領(lǐng)域,一些使用計算機對設(shè)備進行監(jiān)視和控制的工作站,需要非常高的可靠性和安全性。在

基于Windows NT/2000 的應(yīng)用系統(tǒng)中,一些關(guān)鍵的人機交互工作站,常需要了解并記錄所有操作人員操作計算機的情況。

如: 在工業(yè)控制領(lǐng)域,一些使用計算機對設(shè)備進行監(jiān)視和控制的工作站,需要非常高的可靠性和安全性。在這些工作站上通常要求只能運行系統(tǒng)所要求的應(yīng)用程序,不能運行與系統(tǒng)無關(guān)的程序,同時要求對計算機操作人員的所有原始輸入進行記錄,以便出現(xiàn)事故(如操作故障、程序異常退出)的時候,用來分析是人為原因,還是系統(tǒng)原因造成的。

基于以上需求,我們必須解決兩個問題,一個是如何記錄操作人員的輸入,另一個是如何控制操作人員的輸入。在DOS、Windows 3.1、Windows 95/98中都可以編寫響應(yīng)鍵盤和鼠標(biāo)輸入的中斷處理程序,截取來自鍵盤和鼠標(biāo)的輸入,記錄、分析后依情況分別處理。

但是在Windows NT和 Windows 2000中,這樣的解決方法將不再行得通,這是因為Windows NT/2000操作系統(tǒng)為了提高系統(tǒng)的可靠性,不再允許應(yīng)用程序直接對系統(tǒng)設(shè)備的底層進行操作。這樣,用戶的應(yīng)用程序?qū)⒉荒軌驅(qū)τ嬎銠C的端口地址進行讀寫操作,所以在Windows NT/2000操作系統(tǒng)中對計算機端口的讀寫是無效的。

另外一種方法能夠非常完美地解決這個問題,就是可以編寫操作系統(tǒng)的設(shè)備驅(qū)動程序來解決,但是要編寫系統(tǒng)的設(shè)備驅(qū)動程序,必須對Windows NT/2000的系統(tǒng)底層以及整個系統(tǒng)架構(gòu)有比較深入的了解。而且設(shè)備驅(qū)動程序的編寫、調(diào)試都比較困難,同時這方面的資料也比較少。所以本文沒有采取這種方法,而是采用微軟公布的標(biāo)準(zhǔn)Win32 函數(shù)和鉤子技術(shù)來解決這個問題,比較方便而且快捷。

在Windows NT/2000 操作系統(tǒng)中,稱各種輸入為事件(Event),所有的鍵盤、鼠標(biāo)輸入事件以及其他事件都是通過消息傳遞處理機制來得到響應(yīng)的??刂?、監(jiān)視計算機實際上是控制、監(jiān)視事件消息流。Windows操作系統(tǒng)為這種應(yīng)用提供鉤子(Hook)技術(shù)。這種技術(shù)的要點就是在操作系統(tǒng)的消息傳遞處理機制上外掛一個我們定義的函數(shù),可以使用這個函數(shù)來監(jiān)視、控制系統(tǒng)的事件消息流。本文采用的就是這種方法,這種方法要求將所有的程序代碼放入系統(tǒng)可以加載的動態(tài)鏈接庫中。

下面我們以鍵盤輸入的監(jiān)視和控制為例詳細(xì)敘述這種方法。其總體思路如下: 首先,定義自己的鉤子函數(shù)。 其次,安裝自定義的鉤子函數(shù),此后鉤子函數(shù)在后臺開始工作。一旦系統(tǒng)發(fā)現(xiàn)擊鍵動作或者鼠標(biāo)動作,系統(tǒng)將馬上調(diào)用該自定義的鉤子函數(shù),并將事件消息傳入,供程序分析判斷。它可以監(jiān)視所有的擊鍵和鼠標(biāo)動作,與DOS 時代的中斷調(diào)用有非常相似的地方。最后,卸載自定義的鉤子函數(shù)。

鉤子函數(shù) 的定義 微軟的鉤子技術(shù)的原理就是應(yīng)用程序可以在系統(tǒng)的消息處理機制上外掛一個子程序,在消息尚未到達(dá)目的地之前,用該子程序來截獲此消息,以進行監(jiān)視和控制。我們這里使用的是WH_KEYBOARD_LL類型的鉤子函數(shù),這種類型的鉤子函數(shù)可以截獲所有的鍵盤事件,即敲擊鍵盤上的任何一個鍵,我們自定義的鉤子函數(shù)都可以知道。該類型鉤子函數(shù)要求安裝自定義的鉤子函數(shù)必須是以下原型:

LRESULT CALLBACK LowLevelKeyboard- Proc( int nCode, WPARAM wParam, LPARAM lParam );

其中各參數(shù)的含義如下: int nCode: 用來決定鉤子函數(shù)如何處理事件消息的代碼,參數(shù)的取值為HC_ACTION時,參數(shù)wParam、lParam包含了所需的鍵盤消息事件信息。

WPARAM wParam: 鍵盤消息事件的類型ID。該參數(shù)有四種可能的消息類型取值:

WM_KEY- DOWN,WM_KEYUP,WM_SYSKEYDOWN, WM_SYSKEYUP. LPARAM lParam:

指向一個類型為KBDLLHOOKSTRUCT的結(jié)構(gòu)指針。該結(jié)構(gòu)容納了底層鍵盤輸入事件的詳細(xì)信息,它的定義如下: typedef struct tagKBDLLHOOKSTRUCT { DWORD vkCode; //一個范圍從1到254的虛擬鍵碼 DWORD scanCode; // 鍵盤的硬件掃描碼 DWORD flags; // 一系列的標(biāo)志位 //0比特位指示該鍵是不是擴展鍵(如: 功能鍵,或數(shù)字小鍵盤上的鍵),1表示是,0表示否 //1~3比特位保留 //4比特位用來區(qū)分該事件是否來自Win32 函數(shù)keybd_event()調(diào)用,1表示是,0表示否 //5比特位為狀態(tài)描述碼,如果ALT鍵按下,該位是1,否則是0。 //6比特位保留。 //7比特位是變換狀態(tài)位,鍵被按下為0,鍵被釋放為1。

DWORD time; // 該消息事件的時間標(biāo)記。 DWORD dwExtraInfo; // 該消息的其他擴展信息。

}KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOK STRUCT, *PKBDLLHOOKSTRUCT;

實際的鉤子函數(shù)的框架如下:

LRESULT CALLBACK MyLowLevelKeyboard Proc(int nCode,

WPARAM wParam,LPARAM lParam) { BOOL bSkipThisEvent = FALSE;

HWND hwndForeground;

HWND hwndFocus;

DWORD dwCurrentThreadId;

DWORD dwWindowThreadId;

if (nCode == HC_ACTION) { PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)

lParam; //系統(tǒng)傳遞來的鍵盤輸入事件信息指針

switch (wParam) { case WM_SYSKEYUP: case WM_KEYUP: //if key up /*

這段代碼用來獲得當(dāng)前擁有輸入焦點的窗口的窗口句柄,以便獲得該窗口的相關(guān)信息*/ /*獲得前端窗口(即用戶當(dāng)前正在工作的窗口)的句柄,創(chuàng)建該窗口的線程通常擁有比其他線程稍微高一些的優(yōu)先級。

*/ hwndForegroud=::GetForegroundWindow(); dwCurrentThreadId=::GetCurrentThreadId(); //當(dāng)前線程的Id //獲得產(chǎn)生前端窗口hwndForeground的線程Id值,用來惟一表示一個線程 dwWindowThreadId=::GetWindowThread- ProcessId(hwndForegroud,NULL); /*

下面這一行代碼非常重要,它的作用是使當(dāng)前線程(dwCurrentThreadId)的輸入處理機制依附到創(chuàng)建前端窗口的線程(dwWindowThreadId)的輸入機制上,否則你將得不到當(dāng)前擁有鍵盤輸入焦點的窗口句柄。這是因為在Windows NT/2000操作系統(tǒng)通常創(chuàng)建不同的線程來處理相互獨立的輸入過程,每一個輸入過程都擁有自己的輸入狀態(tài)(焦點、鍵盤狀態(tài)、隊列狀態(tài)等),通過AttachThreadInput調(diào)用,操作系統(tǒng)將允許調(diào)用線程獲得或者設(shè)置其他線程生成窗口的輸入狀態(tài)信息。只有執(zhí)行該系統(tǒng)調(diào)用,才能夠得到當(dāng)前擁有鍵盤輸入焦點的窗口的窗口句柄,否則GetFocus()系統(tǒng)調(diào)用將返回NULL。

在這一點上Windows NT/2000與Windows 9X操作系統(tǒng)有很大不同,這也正是Windows NT/2000比Windows 95/98 操作系統(tǒng)可靠性、安全性更好的一個原因

*/ AttachThreadInput(dwCurrentThreadId , dwWindowThreadId,TRUE);// //獲得擁有鍵盤輸入焦點的窗口的窗口句柄

hwndFocus =::GetFocus(); if(hwndFocus || hwndForeground) { char wnm[256]; wnm[0]=0;

//變量定義后,使用之前一定要初始化。 //獲得該窗口的窗口標(biāo)題,就是在窗口標(biāo)題欄上顯示的內(nèi)容

:: GetWindowText(hwndForeground,wnm,255);

char clsnm[266]; clsnm[0]=0; //獲得該窗口的類名字

:: GetClassName(hwndFocus,clsnm,255); //獲得該窗口的風(fēng)格 LONG style=::GetWindowLong(hwfocus,GWL_STYLE); /*如果你只對部分窗口感興趣的話,可以通過下面的形式進行過濾, 從而只處理你所感興趣的某些窗口的輸入事件

*/ if((stricmp(clsnm,“edit”)==0 ) || (0x0020 &style) || strstr(wnm,

“MyTest Wnd”)) {//你可以在此記錄供以后分析使用的相關(guān)信息 LLKEY_OutputToLog(hwfore,hwfocus,wnm,clsnm,p);

} } case WM_KEYDOWN: case WM_SYSKEYDOWN: if (p->vkCode == VK_LWIN)

更多計算機與外設(shè)信息請關(guān)注21ic計算機與外設(shè)頻道

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉