日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

窗口与线程的关系

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 窗口与线程的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 能產生消息的四種情況
    • 消息到哪里去
    • 如何通過窗口找到消息隊列呢?
    • 窗口在哪?
    • 窗口對象
    • 子窗口控件:
    • Windows把窗口對象放在0環,那么我們如何去操作窗口呢?
    • 總結:

能產生消息的四種情況

  • 鼠標
  • 鍵盤
  • 其它的應用程序(其它進程送過SendMessage發送消息)
  • 操作系統的內核程序
  • 消息到哪里去


    當鼠標點擊按鈕時,那么這個消息就會去這個窗口所對應線程的消息隊列,w32k.sys中開啟了兩個線程監聽鼠標和鍵盤

    這就是為什么程序卡死之后,鼠標還能動的原因。因為鼠標的監控是在0環的一個線程,和程序無關

    如何通過窗口找到消息隊列呢?

    首先我們得了解窗口實際是在哪?所以需要近一步往下了解

    窗口在哪?


    用IDA看user32.dll中的CreateWindow,跟蹤到3環的最后一步,然后就進入了0環,進行下一步操作。

    也就說是:
    CreateWindow畫窗口,進入0環,大于1000進入的就是W32k.sys這個模塊,小于1000進入的就是讓ntosKernel這個模塊,關于窗口的一切詳細信息全在0環中

    窗口對象

    _WINDOW_OBJECT(0環結構體)的結構:
    ……
    PTHREADINFO pti;//所屬線程
    ……

    PTHREADINFO pti表示當前這個窗口指向哪個線程

    這里不止一個窗口,包括那些按鈕,也屬于窗口,也就是說這里有十多個窗口,這些窗口都屬于一個線程。(這些按鈕就是子窗口控件

    子窗口控件:

    1.WINDOWS提供了幾個預定義的窗口類以方便我們的使用,我們一般把它們叫做子窗口控件,簡稱控件

    2.控件會自己處理消息,并在自己狀態發生狀態改變時通知父窗口

    3.預定義的控件有:按鈕,復選框,編輯框,靜態字符串標簽和滾動條

    窗口對象中還有一個重要成員是Wnd

    這里面有一些重要信息:當前窗口什么風格,父窗口,子窗口這些,以及窗口過程等。

    Windows把窗口,畫窗口,消息處理全部放在0環(關于窗口的數據問題都在0環)。不需要考慮線程通信問題。

    Windows把窗口對象放在0環,那么我們如何去操作窗口呢?

    在0環的對象,不可能把實際地址直接告訴我們,因為0環一旦出錯,直接藍屏。所以它跟那些進程對象和線程對象有相同的地方,但是也有不同的地方。

    相同的地方:對窗口對象進行操作時,使用0環返回來的一個窗口句柄值(也就是一個實際內核對象地址的一個索引值),也就是說,窗口在零環也有個句柄表

    不同的地方:這個句柄表是全局的,拿到窗口的句柄值都一樣,而且都有效。

    總結:

  • 窗口是在0環創建的
  • 窗口句柄是全局的
  • 一個線程可以用多個窗口,但每個窗口只能屬于一個線程
  • 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的窗口与线程的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。