2015-10-21 45 views
-3

爲什麼我不能只是寫:FindWindow函數在C++

GetWindowThreadProcessId("Name of Window", &PID); 

代替:

HWND Name = FindWindow(("Name of Window", NULL)); 

GetWindowThreadProcessId(Name, &PID); 

什麼是手柄的功能呢?就像,如果沒有什麼特別有HWND,如果它只是存儲一個字符串,爲什麼不使用「字符串」,那麼什麼是存儲?

,因爲如果我這樣做:

cout << Name << endl; 

它給出了一個字符串???

我在想,如果它存儲功能:

GetWindowThreadProcessId(FindWindow(("Name"), NULL)), &PID); 
+0

如果你有兩個窗口具有相同名稱會發生​​什麼?愚蠢的問題我很抱歉。 –

+0

...這是我的問題...... HWND商店是什麼?它不存儲一個字符串,所以它存儲了什麼? – user3742860

+0

'HWND'不存儲任何東西。它是一個(散列)索引到一個內核控制的'WND'結構容器中。每個「WND」結構存儲相應窗口的位置,大小,父窗口和所有者窗口,窗口文本等。有了這些信息,你可以猜到,窗口管理器是如何實現'FindWindow'的。 – IInspectable

回答

1

從應用程序中查看窗口句柄是一個抽象值唯一標識一個窗口,也看到What is a Windows Handle?Handle in Wikipedia。操作系統可能會以不同的方式看到它,並將窗口句柄看作指向帶有關於窗口的信息的結構體的指針。或者它可能會將窗口句柄視爲數組中的索引,或者可能會完全不同。但這取決於操作系統。

窗口標題不是唯一的,多個窗口可以用相同的標題存在。

GetWindowThreadProcessId需要準確知道要在哪個窗口上工作,所以不能將窗口標題傳遞給函數,但需要傳遞窗口句柄。

此外,cout << hwnd_value;將無法​​正常工作,它只是打印一個指針值,而不是字符串。

+0

所以HWND存儲的指針結構,並且PROCES ID從在該結構的主要入口點偏移量? – user3742860

+0

@ user3742860可能是類似的東西。如果你想確切地知道它,那麼你必須問問微軟。 –