[英]Is it possible to modify the origin of a display? (win32)
我有許多我無法修改的應用程序(沒有源代碼),它們被硬編碼為0,0繪制。 通常這不是問題,但是我需要在這些應用程序的外部繪制一個邊界的新項目(kiosk)。 我正在尋找一種方法來改變顯示范圍:
X: 0 to 1200
Y: 0 to 900
類似於:
X: -100 to 1100
Y: -100 to 800
我在MSDN上看到了一些像SetViewportExtEx,SetWorldTransform這樣的函數,但是如果我理解它們,它們就不會對系統進行全局更改。 它們僅適用於當前流程。
我用C ++編程,但如果注冊表/控制面板/等中的設置也可以。
以前有沒有其他人做過這樣的事情?
編輯1:窗口位置硬編碼為0,0
這可能是矯枉過正,但如果你真的希望完全控制它,你總是可以使用API掛鈎來攔截Window創建,方法是在目標進程中掛鈎CreateWindow,CreateWindowEx並在將控制權交還給系統之前改變XY坐標。
流行的API掛鈎庫包括: Microsoft Detours , Madshi的madCodeHook和免費的開源EasyHook 。
我可能采取的路線是使用窗口創建一個shell應用程序,然后使用“SetParent”設置另一個的父項
例如,在C#中我這樣做了......
var info = new ProcessStartInfo {FileName = "NotePad.exe", WindowStyle = ProcessWindowStyle.Normal};
var runProcess = Process.Start(info);
Thread.Sleep(1000); // ugly, but more just proving a point
SetParent(runProcess.MainWindowHandle, Handle);
它在我的表單窗口中托管了記事本
因此,只需托管窗口,將主機大小調整為客戶端大小+一點,將客戶端放置在您想要的主機窗口中,然后在外面繪制。
十分簡單 :)
你能澄清一下'應用程序硬編碼為0,0'的含義嗎? 這是否意味着他們的窗口位置設置為0,0,或者他們是否有代碼繪制為0,0?
解決方案#1
一種可能的解決方案是使用SetWindowPosition將每個應用程序簡單地移動到您想要的任何位置。
您需要做的就是根據需要枚舉每個調用SetWindowPosition的HWNDS列表。
解決方案#2
將桌面的工作區域設置得更小。 這應該會導致您的應用程序占用工作區域,而不是整個屏幕。 然后,您可以自由地放置您需要的任何其他窗口,手動定位它們,並繪制邊框。
實際上,您可能會考慮將邊框窗口注冊為“app bars”,這會自動調整工作區域的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.