一種Windows控制項屬性的獲取方法和裝置與流程
2023-04-28 04:29:06 1

本申請涉及計算機技術領域,尤其涉及一種Windows控制項屬性的獲取方法和裝置。
背景技術:
Windows控制項從框架實現上可以分為兩類,一類是Windows標準控制項,另一類是產品研發方根據需求開發的非標準控制項。對於Windows標準控制項的屬性,可以採用已有的工具進行識別獲取。然而,對於非標準控制項的屬性,由於其使用非標準框架開發,所以目前還沒有有效的識別和獲取方法。
技術實現要素:
有鑑於此,本申請提供一種控制項獲取方法和裝置。
具體地,本申請是通過如下技術方案實現的:
一種Windows控制項屬性的獲取方法,所述方法包括:
判斷目標控制項是否為Windows標準控制項;
如果所述目標控制項不是Windows標準控制項,則發送控制項獲取請求給安裝所述目標控制項的軟體,以供所述軟體根據所述控制項獲取請求獲取所述軟體的控制項屬性;
根據已知的目標控制項屬性從所述軟體的控制項屬性中獲取所述目標控制項的全部屬性。
進一步地,所述控制項獲取請求包括:窗口句柄、存儲路徑以及存儲格式;
所述控制項獲取請求,用於供所述軟體獲取所述軟體中該窗口下的所有控 件屬性,並將所述窗口下的所有控制項屬性以所述存儲格式存儲到所述存儲路徑中;
所述根據已知的目標控制項屬性從所述軟體的控制項中獲取所述目標控制項,包括:
從所述存儲路徑中獲取所述窗口下的所有控制項屬性;
根據已知的目標控制項屬性從所述窗口下的所有控制項中獲取所述目標控制項的全部屬性。
進一步地,所述控制項獲取請求包括:窗口句柄;
所述控制項獲取請求,用於供所述軟體獲取所述軟體中該窗口下的所有控制項屬性,並將所述窗口下的所有控制項屬性返回;
所述根據已知的目標控制項屬性從所述軟體的控制項中獲取所述目標控制項的全部屬性,包括:
接收所述軟體通過進程通信返回的所述窗口下的所有控制項屬性;
根據已知的目標控制項屬性從所述窗口下的所有控制項中獲取所述目標控制項的全部屬性。
進一步地,所述方法還包括:
如果沒有在預設的時間內獲取到所述目標控制項的全部屬性,則重新發送控制項獲取請求給安裝所述目標控制項的軟體。
進一步地,所述方法還包括:
當重新發送控制項獲取請求的次數到達預設的次數時,如果還沒有獲取到所述目標控制項的全部屬性,則返回獲取失敗信息。
一種Windows控制項屬性的獲取裝置,所述裝置包括:
判斷單元,判斷目標控制項是否為Windows標準控制項;
發送單元,在所述目標控制項不是Windows標準控制項時,通過進程通信發送控制項獲取請求給安裝所述目標控制項的軟體,以供所述軟體根據所述控制項獲取請求獲取所述軟體的控制項屬性;
獲取單元,根據已知的目標控制項屬性從所述軟體的控制項屬性中獲取所述 目標控制項的全部屬性。
進一步地,所述控制項獲取請求包括:窗口句柄、存儲路徑以及存儲格式;
所述控制項獲取請求,用於供所述軟體獲取所述軟體中該窗口下的所有控制項屬性,並將所述窗口下的所有控制項屬性以所述存儲格式存儲到所述存儲路徑中;
所述獲取單元,具體從所述存儲路徑中獲取所述窗口下的所有控制項屬性,並根據已知的目標控制項屬性從所述窗口下的所有控制項中獲取所述目標控制項的全部屬性。
進一步地,所述控制項獲取請求包括:窗口句柄;
所述控制項獲取請求,用於供所述軟體獲取所述軟體中該窗口下的所有控制項屬性,並將所述窗口下的所有控制項屬性返回;
所述獲取單元,具體接收所述軟體通過進程通信返回的所述窗口下的所有控制項屬性,並根據已知的目標控制項屬性從所述窗口下的所有控制項中獲取所述目標控制項的全部屬性。
進一步地,所述裝置還包括:
重發單元,在沒有在預設的時間內獲取到所述目標控制項的全部屬性時,重新發送控制項獲取請求給安裝所述目標控制項的軟體。
進一步地,所述重發單元,當重新發送控制項獲取請求的次數到達預設的次數時,如果還沒有獲取到所述目標控制項的全部屬性,則返回獲取失敗信息。
由以上描述可以看出,本申請在獲取目標控制項時,可以先判斷目標控制項是否為Windows標準控制項,並在目標控制項不是Windows標準控制項時,通過進程間的通信發送控制項獲取請求給安裝所述目標控制項的軟體,以獲取非Windows標準控制項的全部屬性,從而實現對不同類別控制項屬性的獲取。
附圖說明
圖1是本申請一示例性實施例示出的一種Windows控制項屬性的獲取方法的流程圖。
圖2是本申請一示例性實施例示出的一種終端的結構示意圖。
圖3是本申請一示例性實施例示出的一種Windows控制項屬性的獲取裝置的結構示意圖。
具體實施方式
這裡將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數形式的「一種」、「所述」和「該」也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語「和/或」是指並包含一個或多個相關聯的列出項目的任何或所有可能組合。
應當理解,儘管在本申請可能採用術語第一、第二、第三等來描述各種信息,但這些信息不應限於這些術語。這些術語僅用來將同一類型的信息彼此區分開。例如,在不脫離本申請範圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決於語境,如在此所使用的詞語「如果」可以被解釋成為「在……時」或「當……時」或「響應於確定」。
針對上述問題,本申請提供一種控制項獲取方案,可以實現對Windows標準控制項和非標準控制項的獲取。
圖1是本申請一示例性實施例示出的一種Windows控制項屬性的獲取方法的流程圖。
請參考圖1,本申請提供一種Windows控制項屬性的獲取方法,可以應用在終端上,包括有以下步驟:
步驟101,判斷目標控制項是否為Windows標準控制項。如果所述目標控制項不是Windows標準控制項,則執行步驟102。
在本實施例中,在獲取目標控制項時,先判斷目標控制項是否為Windows標準控制項。在本步驟中,可以採用獲取Windows標準控制項的方式獲取所述目標控制項以進行判斷。具體地,可以採用相關技術中提供的Windows標準控制項的獲取工具獲取所述目標控制項,比如:AutoIt工具、WinRunner工具等,本申請對此不作特殊限制。
如果成功獲取到所述目標控制項,則說明所述目標控制項是Windows標準控制項,可以對所述控制項進行測試或者調試。如果沒有獲取到所述目標控制項,則說明所述目標控制項不是Windows標準控制項,執行步驟102。
步驟102,通過進程通信發送控制項獲取請求給安裝所述目標控制項的軟體,以供所述軟體根據所述控制項獲取請求獲取所述軟體的控制項屬性。
基於前述步驟101的判斷結果,如果所述目標控制項不是Windows標準控制項,即無法通過獲取Windows標準控制項的方式獲取到所述目標控制項,則在本步驟中,與安裝所述目標控制項的軟體進行進程間的通信,以獲取所述目標控制項的全部屬性。
在本步驟中,可以通過自定義的交互協議發送控制項獲取請求給安裝所述目標控制項的軟體。所述發送控制項獲取請求可以包括以下兩種情況:
情況一、在所述控制項獲取請求中攜帶有窗口句柄、存儲路徑以及存儲格式,然後將所述控制項獲取請求發送給安裝所述目標控制項的軟體,比如:通過所述軟體對外提供的接口發送所述控制項獲取請求。其中,所述窗口句柄是所述目標控制項所在的窗口句柄。所述安裝目標控制項的軟體在接收到所述控制項獲取請求後,獲取所述窗口句柄對應的窗口下的所有控制項屬性,然後按照所述存儲格式,將所有控制項屬性存儲到所述存儲路徑下。
具體地,所述存儲格式可以為文件格式,比如:xml格式、csv格式等,所述存儲路徑可以為文件路徑。所述軟體將所述窗口下的所有控制項屬性依據所述文件格式生成文件,並將生成的文件存儲在所述文件路徑下,然後返回 確認信息。
情況二、在所述控制項獲取請求中攜帶窗口句柄,然後將所述控制項獲取請求發送給安裝所述目標控制項的軟體。在這種情況下,安裝所述目標控制項的軟體在接收到所述控制項獲取請求後,獲取所述窗口句柄對應的窗口下的所有控制項屬性,然後通過進程間的通信將獲取到的所述所有控制項屬性返回。
步驟103,根據已知的目標控制項屬性從所述軟體的控制項屬性中獲取所述目標控制項的全部屬性。
在本實施例中,一個控制項通常包括有諸多屬性,比如:控制項標題、控制項坐標、控制項句柄等。所述已知的目標控制項屬性可以由用戶預先進行設置,比如:控制項ID等,本申請對此不作特殊限制。基於前述步驟102,當安裝所述目標控制項的軟體根據所述控制項獲取請求獲取所述軟體的控制項屬性後,在本步驟中,可以根據已知的目標控制項屬性從所述控制項屬性中獲取所述目標控制項的全部屬性。
具體地,針對步驟102中發送控制項獲取請求的兩種不同情況,本步驟也可以分別如下兩種情況:
情況一、所述控制項獲取請求包括:窗口句柄、存儲路徑以及存儲格式。在這種情況下,安裝目標控制項的軟體將所述窗口下的所有控制項屬性存儲在所述存儲路徑下,並通過進程間的通信返回確認信息。在本步驟中,在接收到所述確認信息後,可以從所述存儲路徑中獲取所述窗口下的所有控制項屬性,然後根據已知的目標控制項屬性從所述窗口下的所有控制項屬性中獲取所述目標控制項的全部屬性。比如:安裝目標控制項的軟體可以將所述窗口下的所有控制項屬性存儲為列表形式,在該列表中每一行存儲有一個控制項的全部屬性,在本情況下,終端可以遍歷該列表,通常所述已知目標控制項屬性確定所述目標控制項所在的行,然後獲取該行中存儲的全部屬性,以得到所述目標控制項的全部屬性。
情況二、所述控制項獲取請求包括:窗口句柄。在這種情況下,安裝所述目標控制項的軟體將所述窗口下的所有控制項屬性返回。在本步驟中,接收所述 進程返回的所述窗口下的所有控制項屬性,然後根據已知的目標控制項屬性從所述窗口下的所有控制項屬性中獲取所述目標控制項的全部屬性。
進一步地,在本申請另一可選實施例中,設置有控制項獲取的超時機制。具體地,在圖1所示的實施例的基礎上,所述Windows控制項屬性的獲取方法還包括有:
步驟104中,判斷是否在預設的時間內獲取到所述目標控制項的全部屬性。
在本實施例中,可以對步驟103中根據已知的目標控制項屬性從所述軟體的控制項屬性中獲取所述目標控制項的全部屬性的過程進行計時,並判斷是否在預設的時間內獲取到所述目標控制項的全部屬性,如果沒有在預設的時間內獲取到所述目標控制項的全部屬性,則返回步驟102。其中,所述預設的時間可以由開發人員進行設置,本申請對此不作特殊限制。
更進一步地,開發人員還可以設置重試的次數,即重新發送控制項獲取請求的次數。當重新發送控制項獲取請求的次數到達預設的次數時,如果還沒有獲取到所述目標控制項的全部屬性,則可以返回獲取失敗信息。
可選的,在本申請另一實施例中,當步驟101中判斷所述目標控制項不是Windows標準控制項時,可以先判斷安裝目標控制項的軟體是否提供有對其控制項屬性的獲取方式,如果沒有,則執行步驟102,發送控制項獲取請求。如果有,則可以通過所述軟體提供的控制項屬性獲取方式獲取所述目標控制項的全部屬性。舉例來說,假設安裝目標控制項的軟體提供有圖形識別方式,可以根據滑鼠傳入的坐標以定位目標控制項,則當確定目標控制項不是Windows標準控制項時,可以通過所述圖形識別方式獲取所述目標控制項的全部屬性,本申請對此不作特殊限制。
由以上描述可以看出,本申請在獲取目標控制項時,可以先判斷目標控制項是否為Windows標準控制項,並在目標控制項不是Windows標準控制項時,通過進程間的通信發送控制項獲取請求給安裝所述目標控制項的軟體,以獲取非Windows標準控制項的全部屬性,從而實現對不同類別控制項屬性的獲取。
與本申請Windows控制項屬性的獲取方法的實施例相對應,本申請還提供 一種Windows控制項屬性的獲取裝置。本申請所述的裝置可以通過軟體實現,也可以通過硬體或者軟硬體結合的方式實現。以軟體實現為例,本申請Windows控制項屬性的獲取裝置作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的電腦程式指令讀取到內存中運行形成的。
請參考圖2和圖3,本申請提供一種Windows控制項屬性的獲取裝置200,可以應用在終端上,所述裝置200包括有:判斷單元201、發送單元202、獲取單元203以及重發單元204。
其中,所述判斷單元201,判斷目標控制項是否為Windows標準控制項;
所述發送單元202,在所述目標控制項不是Windows標準控制項時,通過進程通信發送控制項獲取請求給安裝所述目標控制項的軟體,以供所述軟體根據所述控制項獲取請求獲取所述軟體的控制項屬性;
所述獲取單元203,根據已知的目標控制項屬性從所述軟體的控制項屬性中獲取所述目標控制項的全部屬性。
進一步地,所述控制項獲取請求包括:窗口句柄、存儲路徑以及存儲格式;
所述控制項獲取請求,用於供所述軟體獲取所述軟體中該窗口下的所有控制項屬性,並將所述窗口下的所有控制項屬性以所述存儲格式存儲到所述存儲路徑中;
所述獲取單元203,具體從所述存儲路徑中獲取所述窗口下的所有控制項屬性,並根據已知的目標控制項屬性從所述窗口下的所有控制項中獲取所述目標控制項的全部屬性。
進一步地,所述控制項獲取請求包括:窗口句柄;
所述控制項獲取請求,用於供所述軟體獲取所述軟體中該窗口下的所有控制項屬性,並將所述窗口下的所有控制項屬性返回;
所述獲取單元203,具體接收所述軟體通過進程通信返回的所述窗口下的所有控制項屬性,並根據已知的目標控制項屬性從所述窗口下的所有控制項中獲取所述目標控制項的全部屬性。
所述重發單元204,在沒有在預設的時間內獲取到所述目標控制項的全部屬性時,重新發送控制項獲取請求給安裝所述目標控制項的軟體。
進一步地,所述重發單元204,當重新發送控制項獲取請求的次數到達預設的次數時,如果還沒有獲取到所述目標控制項的全部屬性,則返回獲取失敗信息。
上述裝置中各個單元的功能和作用的實現過程具體詳見上述方法中對應步驟的實現過程,在此不再贅述。
以上所述僅為本申請的較佳實施例而已,並不用以限制本申請,凡在本申請的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本申請保護的範圍之內。