在windows或linux等作業系統下視窗控制代碼對應著每個視窗的鑰匙,例如,你要對某乙個視窗進行操作,你必須知道你要操作哪乙個視窗,這裡就拿windows做舉例,windows下幾乎會建立許許多多個視窗,但是我們怎麼知道我們操作的是哪個視窗?
答:就是視窗控制代碼,每個視窗在被建立出來之後就會被賦予乙個控制代碼,該控制代碼(控制代碼實則上是乙個指標)指向乙個資料結構體,結構體裡明確表示著該視窗的各種資訊,視窗大小,視窗名等,當我們得到這個控制代碼時就可以請求作業系統對它做一系列操作,列如:移動視窗,關閉視窗,最小化最大化等,這些都是通過視窗控制代碼來告訴作業系統的,我們要對哪個視窗進行操作,而訊息則是告訴作業系統要做什麼樣的操作,訊息的附加引數就是操作值,列如移動視窗,會有附加的xy座標引數!
程序id是當乙個程序被建立出來時系統核心為其分配的乙個名字/綽號,且程序分配的首位址在gdt(局域的叫ldt,詳細可以檢視: 詳解:實體地址,虛擬位址,記憶體管理,邏輯位址之間的關係)表中,程序id會被儲存到該程序的pcb程序控制塊中(執行緒的會存放到:tcb執行緒控制塊中,都是乙個資料結構體包含:
程式計數器:接著要執行的指令位址。
程序狀態:可以是new、ready、running、waiting或 blocked等。
cpu暫存器:如累加器、索引暫存器(index register)、堆疊指標以及一般用途暫存器、狀況**等,主要用途在於中斷時暫時儲存資料,以便稍後繼續利用;其數量及類因電腦架構有所差異。
cpu排班法:優先順序、排班佇列等指標以及其他引數。
村粗氣管理:如標籤頁表等。
會計資訊:如cpu與實際時間之使用數量、時限、賬號、工作或程序號碼。
輸入輸出狀態:配置程序使用i/o裝置,如磁帶機。
),當作業系統想要操作某個程序時會通過程序id來指定要操作哪個程序!
程序控制代碼與視窗控制代碼不一樣,這裡先解釋一下上面是程序控制代碼:程序控制代碼指向程序下的pcb程序控制塊,當我們要對程序進行i/o操作時候時候需要知道程序的堆疊位址範圍以及狀態才能的值對應的ldt/gdt並轉化為實體地址(或通過段選擇符進行轉換詳細:詳解:實體地址,虛擬位址,記憶體管理,邏輯位址之間的關係),作業系統才能為我們對該程序進行讀寫操作,所以一般我們會通過程序id來獲取程序控制代碼(臨時的),來對程序進行操作。
作業系統會通過程序id來遍歷程序下的pcb程序控制塊看一下該程序屬於哪個gdt下的ldt表中,找到之後會將該程序的pcb程序控制塊位址返回給獲取者!
注意:程序id在建立時就會規定好,其id是按照程序建立順序來分配的,用完後會被**二次分配,程序控制代碼不是,當我們獲取某個程序的控制代碼時,作業系統會將pcb程序控制塊位址返回給獲取者,獲取者需要通過指標來接收它,指標占用的空間是占用的是自己程序下的!所以當我們用完釋放,二次獲取時候控制代碼的位址就會發生改變,但控制代碼指向的位址不會發生改變(是因為pe檔案對映關係,詳細請檢視pe檔案格式對映原理,在pe檔案格式中pcb程序控制塊的對映位置是:0x64(100)),控制代碼等於指標!
乙個視窗對應乙個程序,就拿人來做形容吧
人都有乙個身體和大腦,身體是對外展示的,而大腦是在控制身體應該怎樣對外展示,所以視窗就是對使用者進行視覺化介面互動的,而程序裡的資料和指令在控制著視窗應該怎樣互動!
通過程序號ID獲得視窗的控制代碼
2012年 09月 05日 通過程序號的id獲得視窗的控制代碼 最近幾天,工作的需要,打算實現將別人編譯好的exe程式,通過自己的程式去呼叫,然後根據程式中得到的id號,去得到此程序執行建立的視窗控制代碼,在網上搜了一段時間,得到了不少啟示,再結合自己的實際環境,整合出了以下三種方法,以下將針對每一...
通過程序號ID獲得視窗的控制代碼
通過程序號的id獲得視窗的控制代碼 最近幾天,工作的需要,打算實現將別人編譯好的exe程式,通過自己的程式去呼叫,然後根據程式中得到的id號,去得到此程序執行建立的視窗控制代碼,在網上搜了一段時間,得到了不少啟示,再結合自己的實際環境,整合出了以下三種方法,以下將針對每一種方法做出簡單的介紹同時給出...
已知程序控制代碼,如何知道此程序的主視窗控制代碼
已知程序控制代碼,如何知道此程序的主視窗控制代碼,在此說明兩種方法 1.呼叫findwindow 前提是必須知道該程序中視窗類名和視窗名,返回後的控制代碼可以通過iswindow 函式來驗證是否是有效的視窗控制代碼.hwnd hwnd findwindow szclassname,szwndname...