Steam的「遊戲內界面」是什麼原理,為什麼在自己添加的非 Steam 遊戲下也可以打開?

遊戲內界面指的就是在steam遊戲下按shift+tab可以打開的那個界面


和 FRAPS 呀 Xfire 呀這些軟體的原理一樣,所以以前上網一搜也經常見到有這些東西相互衝突的求助帖。

人話版來說,就是在遊戲的 exe 文件啟動之後截獲它繪製圖形的函數,插入自己的邏輯。

非人話版,步驟一般是這樣的:
首先啟動遊戲,確認遊戲進程名;
定位之後搜索這個進程的內存,找 d3d.dll 或者 opengl.dll 的位置;
隨後將一個包含想要插入的 GUI 繪製邏輯(就是你要的「遊戲內界面」)的 dll 注入到進程內存空間里;
最後篡改內存中 d3d / Opengl 的幾個關鍵繪製函數,插入彙編跳轉,調用新注入 DLL 的繪製函數,大功告成。

另外這個 In-game Overlay 不是所有「非 Steam 遊戲」都能打開的,超出了 DirectX 和 Opengl 的應用(例如用 GDI 的)就沒法打開遊戲內界面。

我就不細講什麼 DirectX 繪製管線啊 dll 注入啊還有什麼 Win32 Hook 了,反正我自己也聽不懂。
最後感謝賽奇老爺的技術科普。


其實有很多種方法實現
最有可能的是在steam上發行的遊戲都需要去載入steam sdk,程序使用這個sdk中提供的介面完成這些功能
或者steam在啟動遊戲進程的時候注入自己的dll(GameOverlayRenderer.dll),hook遊戲的渲染和消息過程,完成那些功能,這種方法對遊戲來說完全透明,但不一定通用


我就用steam啟動星各種來當截圖軟體


windows一個鉤子,linux不懂


推薦閱讀:

應該如何理解 Client/Server?
作為一個計算機學生,要如何預防頸椎病?
優酷1080p的kux格式文件怎麼轉換?
Perl 6 會不會重振雄風?
作為一個程序員需要學多少技能?

TAG:遊戲 | 計算機技術 | Steam |