2009-10-06 156 views
0

有沒有辦法通過win32api獲得控件的名字? (C++)Win32Api - 窗口名稱屬性

我在談論的是在C#中的'名稱',如'frmMain',或'btnNext'的屬性。 有什麼辦法通過win32API檢索這些數據嗎?

我試過GetWindowInfo()之類的東西,但我覺得我不是在朝着正確的方向..

感謝

編輯:我用EnumChildWindows迭代(),我得到了正確的HWND ..不知道如果我可以用它來打印的名字..(我是一個C++/Win32的絕對菜鳥)

新增09年7月10日

順便說我發現這個操作win32應用程序的非常好的工具。 http://www.autoitscript.com/autoit3/

看看它看起來不錯,看起來像是免費軟件? :)

+1

看看Spy ++工具;它是一個有用的工具,可以找出Win32 API在所有Windows上的可用性。 – MSalters 2009-10-06 08:42:22

+0

我在看我的安裝,我只安裝了Vs2008的C#端!我認爲這是VC++。我必須設置和修復。它通常在Visual Studio Tools >>下? – 2009-10-06 22:30:00

+0

我以前用過它,對於這類東西真的很好。不幸的是,我不認爲你可以單獨下載它,或者我需要用C++來修復我的VS的安裝(我認爲它是隨之而來的) – 2009-10-06 22:31:00

回答

1

我嚴重懷疑這些信息是否在可執行代碼中,我認爲從c#編譯器的角度來看,這些符號被簡化爲對象指針或窗口標識符值( IDC_上面提到)。

在我選擇創建隱藏的靜態文本控件之前,已經面對這類問題,並在每個窗口上標識文本以向外部進程提供此命名窗口功能。不是很優雅,但當時解決了我的問題。

+0

嘿,我明白了。 :)你是從實際製作軟件來的嗎?這是我試圖控制的第三方,對不起,如果我沒有明確說明它..我有問題,而不是整體觀點問一個具體的問題。 – 2009-10-06 22:27:06

+0

是的,我做了雙方 - 作爲第三方我沒有看到任何具體的解決方案 - 你真的需要窗口的名稱還是隻是一種唯一標識它的方法? – Elemental 2009-10-07 08:31:26

+0

我其實需要這個,因爲我需要解析gridview中的單元格文本並從那裏開始操作.. – 2009-10-11 22:56:14

3

控件的名稱通常是控件的私有變量,不會暴露給win32。你可以嘗試GetWindowText來獲得一些控件的標題或GetWindowLong獲取一些屬性,但我不認爲你可以得到大多數控件的名稱。

+0

我實際上只是針對GetWindowText()。遊民。事情是,重新運行時,句柄會改變,而名稱不會。我想知道什麼樣的參考信息可以硬編碼以便在相同的Windows應用程序上重複使用,以訪問相同的控件或窗口。 – 2009-10-06 06:07:17

+0

對於ListBoxs,我懷疑GetWindowText()會有什麼.. :( – 2009-10-06 06:07:52

1

name屬性是由編譯器添加的AFAIK。 Win32不會,inttrinsicaly,支持這樣的命名。
在C/C++中,使用IDC_ *值而不是字符串比較的整數比較的附加獎金。

編輯:Btw它可能使用上面提到的IDC值通過使用GetDlgItemInt(hDlgWnd,IDC_ *)獲取控件的HWND來獲取對話框的子控件。遠比使用EnumWindows更容易... ...

+0

這個IDC_ *值究竟是什麼?我怎樣才能訪問它? – 2009-10-06 07:38:08

+0

當你定義一個給定的控件時,給它指定一個「id」。 Studio對話框設計器會自動爲它指定一個常量(實際上是一個#define in「resource.h」)整數值。這通常具有IDC_ *形式,即ID =標識符和C =控制。 – Goz 2009-10-06 08:27:58

+0

那麼我怎樣才能從C++/Win32的角度來訪問它呢?它是一個結構的一部分嗎?還是通過傳遞句柄來使用Win32 API函數?對不起,如果我聽起來很迷惑,這是全新的(我是一個對內部知之甚少的.NET男孩) – 2009-10-06 22:28:45