基於Windows DWM Hook的投影桌面融合,是其中一種實現Windows桌面融合的技術;
這種技術有優點:
可以基於普通的拼接,或者游戲顯卡就能實現桌面融合了,不需要要特定的專業顯卡支持;
但也有缺點:
桌面實際分辨率並沒有改變,還是原來拼接的分辨率,所以投影融合之后,事實上存在畫面壓縮變形了(比例不對)。
我一直對這種方式不太感冒,因為我一直推的是專業顯卡的桌融方式。這不疫情期間,老老實實待在家里,有時間好好的弄了一下,經過幾個月的努力,也把Windows 7(32&64位)的桌面弄出來了,這里記錄下研發歷程。
先show兩張效果圖:
1.既然是DWM Hook,第一步的技術就是把DMW.exe Hook下來。這位仁兄給我我最開始的提示信息,大家有興趣的話,可以看看參考:
https://www.cnblogs.com/weiym/p/3396274.html
2. DMW Hook下來之后,你會發現WIndows 7其實用的就是D3D10的渲染框架,准確點就是D3D10.1。但是早期的Win7和后來的Win7又有了比較大的變化,早期的Win7是6.1.7601,當時還沒有出來DX11,但是后來的6.2.9200則用到了Dx11。最大的區別就是d3d10_1.dll, d3d10_1core.dll, dxgi.dll這三個文件了。
3. d3d10開始,Directx的編程就取消了固定流水線(在Directx9.c的年代很流行),着實令人很不習慣。但往深層了想想,其實也好。不會搞得太亂了,一會固定,一會shader,不知道實際哪個在發生作用。DX10的生存時間很短,但跟DX11基本是一樣的。花點時間學習還是值得的。
4.對DWM的 Hook,就好比盲人摸象,它里面估計有不少未公開的_API在動作。干這種事必須要膽大、心細、本子厚。本子厚講的是存檔記錄,你永遠不知道昨天還可以的,今天怎么又有問題了,存檔很重要!
5. 還有的就是耐心了。如果不是疫情,我也靜不下心來,一點點扣出技術的細節。經常10幾天沒有一點進展,是很正常的事。如果我有老板,他肯定早就讓我去干別的了,這年頭,中國人哪里靜的下心來。
一件事能做成,技術是很重要。但是對於做成這件事的人來講,重要的卻又不是技術了,而是人心所向了。
Windows10的 DMW Hook桌融,還待進一步完善!有興趣的朋友可以一起交流,或者指點一二的!