Dockit——超越画中画,有点强的窗口局部显示软件(脚本)

不知道,我没有遇到过这种问题

不过需要注意激活热键的时候,edge浏览器得是激活状态的

是的,确实存在bug,而且依我看触发率还挺高。

方便截个gif看看嘛,
(gif太大的话,用路过图床中转一下)

在用admin打开的窗口上使用时显示黑屏,大家有遇到同样的问题吗?如何解决呢?

有,我是直接结束进程…

抱歉不行,人工复现太麻烦了。

obs实现录屏有一定效率问题, 且绿屏抠图效果只能在obs中能看见, 交互体验不佳

最新实现绿屏抠图思路:

利用ShaderGlass应用一个chroma key滤镜到桌面(滤镜需要自己编写, 可参考chrome key, 并集成进ShaderGlass),
ShaderGlass窗口叠加在桌面最上层,相当于在桌面加了一个图层, 它显示的是绿屏抠图后的效果,
且窗口能够穿透鼠标事件, 这就解决了效率和交互的问题

最终实现效果如下:


gif演示

滤镜颜色调整后的效果:

这个软件好牛逼啊……

试用了下,
正常工作的APP有: Chrome, Notepad 等
黑屏的APP有: 内网通, WPS 等

实测word可以,wps的窗口可能不怎么标准吧?

我提供一个方案,可以把任意软件的窗口3D化。

在另一台电脑上开这个软件,然后通过chrome浏览器控制那台电脑,这样就能用那个网页3D化软件了。

不过我只有一台电脑,测试结果如下:

这个妙, 普通的分享可以做到分享某个窗口,但不能反向操作,要是这个软件能直接分享某个窗口 就能在本机就能窗口3d化了

我借了个电脑实测了一下
效果拔群,如果给另一台电脑设置一个鼠标跟随的点,(3d情况下鼠标会偏移但不会失效)那么甚至可以在3d情况下操纵!!!


可以看到图里的绿点点,那就是另一台电脑上的鼠标光标,是可以操纵的!
调试好了,甚至可以3D地打游戏?

刚刚试了下游戏(用守望先锋为例),即便是窗口化的游戏,也是黑屏的。可惜了。

" gdip_all.ahk为依赖,也必须下载",但是我没下载也能用啊,单文件执行,win系统

全是由GPT写的,我不懂AHK语法或类似的语法
功能修改:

  1. 支持最大化窗口(方法比较简陋 :应该在原有的程序逻辑中修改,但是我不会,只能曲线____了,即先将最大化无损替换为正常)
  2. 窗口关闭时,将窗口大小恢复为原先大小

DockIt类中 增加代码

_SetChildNoFull(){
		try{
			if (This.Child.Positions.Start.Style & 0x01000000) {  ; WS_MAXIMIZE = 0x01000000
				newWidth := A_ScreenWidth 
				newHeight := A_ScreenHeight
				
				; 取消窗口的最大化状态
				WinRestore, % "ahk_id " This.Child.Hwnd

				;Windows全屏比较特殊  不能采用0, 0, 1920, 1080  应采用-8, -8, 1920+16, 1080+16
				WinMove, % "ahk_id " This.Child.Hwnd ,, % This.Child.Positions.Start.X , % This.Child.Positions.Start.Y, % This.Child.Positions.Start.W, % This.Child.Positions.Start.H
			}
		}
		
	}

__NEW()中增加This._SetChildNoFull()This._GetChild()的后面

_CloseWindow()更改为

_CloseWindow(){
		DockIt.ActiveWindow := ""
		try{
			DllCall("SetParent", "uint", This.Child.Hwnd , "uint", 0 )
			WinSet, AlwaysOnTop, Off , % "ahk_id " This.Child.Hwnd
			

			;MsgBox, % "style: " This.Child.Positions.Start.Style
	
			; 判断窗口是否为全屏
			if (This.Child.Positions.Start.Style & 0x01000000) {  ; WS_MAXIMIZE = 0x01000000
				; 计算窗口的新大小
				newWidth := A_ScreenWidth *  0.7
				newHeight := A_ScreenHeight *  0.7

				; 计算窗口应该放置的位置
				newX := (A_ScreenWidth - newWidth) / 2
				newY := (A_ScreenHeight - newHeight) / 2

				; 移动并调整窗口的大小
				WinMove, % "ahk_id " This.Child.Hwnd ,, newX, newY, newWidth, newHeight
			
				WinMaximize, % "ahk_id " This.Child.Hwnd
			}
			else{
				WinMove, % "ahk_id " This.Child.Hwnd ,, % This.Child.Positions.Start.X , % This.Child.Positions.Start.Y, % This.Child.Positions.Start.W, % This.Child.Positions.Start.H
			}
		}

Commands类中修改GetWinPos()

	GetWinPos(hwnd){
		local x, y, w, h, style

		; 获取窗口位置和大小
		WinGetPos, x, y, w, h, % "ahk_id " hwnd

		; 获取窗口样式
		WinGet, style, Style, % "ahk_id " hwnd

		return {X: x, Y: y, W: w, H: h, Style: style}
	}
2 个赞

试了一下字幕提取器只能显示黑色

你好,这个怎么弄的,能提供下spn的脚本吗

ok,自己弄出来了

额 忘回复了
我好久没用过鼠标手势了,脚本也丢完了