2011-01-19 114 views
0

我有一個Windows窗體應用程序,我想查找DirectX應用程序的句柄,在該窗口中找到DirectX按鈕,然後單擊它。點擊Windows窗體中的DirectX按鈕

這是可能的,如果是這樣,那麼最好的地方在哪裏開始?

謝謝!

回答

2

這實在是不可能的。

與Windows窗體不同,「DirectX按鈕」沒有不同的窗口句柄。你實際上並沒有「點擊」DirectX窗口中的按鈕,而是將鼠標點擊到整個DirectX窗口,並允許應用程序進行自己的點擊測試以「點擊」「按鈕」(這只是一個圖形)。

最接近你可以做的就是發送一個鼠標點擊窗口內的位置 - 但是,找到一個「按鈕」的位置可能是非常困難的。

+0

哦,好的。那對於我希望完成的簡單任務來說,這是太多的工作。雖然感謝;) – tcables 2011-01-20 16:41:53

1

事實上,如果是這樣的話,並不難。如果可以通過反轉系統將鼠標與鼠標隔離,則DX對象可能會收到點擊,具體取決於它是基於3D還是基於2D。 2D使用掩蔽效應,並且3D向量添加以在向量演算中使用的特定屬性的基於2D/3D的空間上進行平移。

與邏輯空間相差太遠,在3D中,3D對象的一部分被映射到2D空間,然後映射到相機空間,然後渲染。原油,那麼還有更多,但我保持它儘可能簡單。現在,任務是查找2D音量/每個像素的位置,翻譯3D圖像的2D渲染副本,該3D圖像將成爲DeviceContext以便監視器顯示()到地圖,並組合工作區一個可點擊的對象(它將運行預期的代碼,就像按鈕應該那樣)到2D地圖對象副本。

換句話說,找到屏幕中的對象被渲染的位置,並在屏幕的渲染部分上生成可點擊的遮罩。無論是位圖遮罩,多邊形遮罩還是多維數據集遮罩,或者您可以用數學方法創建的任何其他形狀;只要2D可點擊對象實際上與常量更新系統中的鼠標位置和狀態交互。例如,假設應用程序是全屏的,分辨率是800 x 600(保持簡單,可以是任何東西),並且希望能夠交互的對象在呈現在上下文中這不允許它是自己的(* 1),並且渲染的對象顯示一個矩形。可以說這就是它的意義所在,並且您用於翻譯的系統會輸出一個Rectangle(C#.NET代碼,不過這只是一個示例,還有更好的浮動效果)。所以我們可以說掩模矩形座標與渲染對象座標相同。所以我們假設:「矩形蒙板=新矩形(100,100,200,100); // X起點,Y起點,長度,寬度」。相當不言自明。添加每幀光標位置與遮罩位置的比較,將指示光標是否位於遮罩之上,並且如果光標在遮罩範圍內點擊(或其他事件),則可以指示額外的編碼。

讓我們假設按鈕打開主菜單。並且發生事件,特別是「MouseClick」事件,而光標熱點位於Point(125,200)處。哪一個當然是在面具的範圍內。在這種情況下,通過所有那些微不足道的代碼,打開主菜單。如果正確的話,在這個系統中添加新的可點擊的對象是很容易的。

是的,還有其他更簡單的方法。但是從他們這一切來看,這是更加動態和靈活的系統之一。使用範圍從你在遊戲中獲得的現金,你必須點擊以獲取,到用戶界面,菜單,任何可點擊的。範圍也不只是在遊戲中。喜歡重新發明輪子的自定義UI設計者可以並且已經利用類似的系統(比如我自己)來定義從微碼到宏碼的每個方面。準確地說,根據需要定義宏代碼,因爲它是預期的,並且沒有通過微代碼管理的不必要的膨脹。並不是說我喜歡微碼,因爲它可能太過血腥,而且經常是這樣。值得一提的是從第一次精簡到第幾次FPS,但是...>: - D

* 1 =(從3D渲染模型中可預測的,從視角來看渲染不是修改(這似乎包括對象選擇(通過鼠標/光標位置和所有這些),這本質上就是你要找的東西),因此不包括(直接)。通過翻譯它變得可能,以最好的精度完成此外,DirectX,OpenGL和其他類似軟件默認爲渲染器。)

+0

非常有趣,雖然對我的大腦很複雜。如果你可以提供一個例子,這將是有益的;) – tcables 2011-03-28 17:16:30