• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            轉:Windows硬件輸入模型

            Posted on 2010-01-11 23:49 S.l.e!ep.¢% 閱讀(1257) 評論(0)  編輯 收藏 引用 所屬分類: RootKit
            轉:Windows硬件輸入模型



            ------------------------------------

            1.SetForegroundWindow 和 SetActiveWindow的區別?
            ??? SetActiveWindow改變的是一個線程的局部狀態變量,所以這個函數不能夠跨線程調用(也就是說不能夠改變另外一個線程的局部變量),但是改變當前線程的局部變量的操作總是能夠成功的。 SetForegroundWindow,SetWindowPos ,BringWindowToTop三個函數改變的是系統全局的屬性:Foreground Window和Z-order,所以可以跨越線程及其進程,但是由于Windows防止突然的一個窗口跳至屏幕的Foreground,所以背景線程調用 SetForegroundWindow產生的將是任務欄閃爍效果,而BringWindowToTop和SetWindowPos (TOP)在沒有連接到RIT的時候則干脆不起效果。但是需要注意的是SetWindowPos(BOTTOM)還是有效果的(因為不違反Windows 的這個約束)。

            2.RIT,SHIQ工作原理?
            ???? 當操作系統啟動、初始化時會有一個被稱為Raw Input Thread (RIT)的特殊線程被創造出來,同時一個被稱為 System Hardware Input Queue (SHIQ) 的隊列被創造出來,RIT和SHIQ就是專門用來處理鼠標事件和鍵盤事件的。RIT平時都是睡著的,當有hardware input 事件發生時,這些硬件的驅動程序(device driver for the hardware device )將這些硬件事件放到SHIQ中,這樣就喚醒了RIT,RIT從SHIQ中提取事件并把它們翻譯成相應的消息(比如WM_MOUSEMOVE, WM_KEY*等),這些消息然后被送到相應線程的消息隊列中去。做完這些,RIT繼續睡覺,至于怎么判斷到底應該送給那個線程,對鼠標事件和鍵盤事件又區別:對鼠標事件來說,鼠標之光標在哪個窗口內,改鼠標事件就被送給創造這個窗口的線程。對鍵盤事件來說,比較復雜。在任一時間會有一個線程與RIT有聯系,這個線程被稱為foreground thread,簡單的說,這個線程創建的窗口為當前活動窗口(或者被稱為焦點窗口),于是所有的鍵盤消息被送給該線程的消息隊列。當激活另一個窗口時,新的焦點窗口所屬的線程就成了foreground thread ,于是。。。

            3.VIQ 虛假輸入隊列?
            ??? 每個執行的線程都有自己的虛擬輸入隊列(Virtual Input Queue),用來處理來自硬件、處理器(Processor)或操作系統的消息(Message)。這些隊列都是異步的,也就是說,當處理器發送一個消息給另外一個線程的隊列時,發送函數不用等待其他線程處理該消息就可返回,而接收消息的線程可以等到該線程準備好時再訪問并處理接收到的消息。


            4.虛擬輸入隊列和局部輸入狀態分別是什么? (cqf)
            ????? 虛擬輸入隊列見問題3
            ????? 局部輸入狀態:
            ????? Each thread has its own local input state, which is managed inside a thread's THREADINFO structure (discussed in Chapter 26). This input state consists of the thread's virtualized input queue as well as a set of variables. These variables keep track of the following input state management information:
            ????? Keyboard input and window focus information, such as
            ????? Which window has keyboard focus;Which window is active;Which keys are considered pressed down;The state of the caret;
            ????? The variables also keep track of mouse cursor management information, such as
            ????? Which window has mouse capture;The shape of the mouse cursor;The visibility of the mouse cursor;
            久久精品这里只有精99品| 精品久久久噜噜噜久久久| 久久久久久无码国产精品中文字幕| 久久久久国产视频电影| 亚洲午夜久久久久久久久电影网| 精品久久久久久亚洲| 久久天天躁狠狠躁夜夜躁2014| 亚洲乱亚洲乱淫久久| 欧美黑人又粗又大久久久| 国产亚洲精久久久久久无码77777| 色综合久久精品中文字幕首页 | 久久国内免费视频| 久久精品国产国产精品四凭| 久久久久久伊人高潮影院| 亚洲精品国精品久久99热| 久久久久人妻一区精品果冻| 麻豆久久| 72种姿势欧美久久久久大黄蕉| 国产精品无码久久久久久| 99久久国产主播综合精品| 国产精品丝袜久久久久久不卡 | 日韩亚洲国产综合久久久| 亚洲国产精品综合久久一线| 综合久久一区二区三区 | 国产精品99久久不卡| 久久夜色精品国产噜噜亚洲a| 精产国品久久一二三产区区别| 亚洲国产另类久久久精品黑人 | 久久婷婷国产剧情内射白浆| 精品久久久久久无码中文字幕一区| 久久精品国产亚洲网站| 久久综合九色综合久99| 亚洲乱码中文字幕久久孕妇黑人| 久久九九全国免费| 思思久久99热只有频精品66| 久久99精品久久久久久野外| 国产高潮国产高潮久久久| 日韩乱码人妻无码中文字幕久久| 国产精品久久久久久久久久影院 | 午夜欧美精品久久久久久久| 国产精品免费久久久久电影网|