仔细看了你的工程代码
以下是分析说明,供参考
代码中这个截图的蒙版覆盖,你使用了
Code AardioLine:1复制
1.var
screenArea = mouse.screenArea();
来创建了覆盖蒙版,而蒙版中使用的是
Code AardioLine:3复制
1.2.3.var
srcX,srcY,srcCx,srcCy = ..win
.getScreenPos(this
.hwnd); -
this
.setPos( srcX,srcY,srcCx,srcCy,-1 ); -
var
pic = ..com
.picture.snap();
其中,继续查看com.pitcure.snap 源码,发现
Code AardioLine:7复制
1.2.3.4.5.6.7.- snap =
function
(hwnd,x=0
,y=0
,w,h,clientOnly) { -
var
hSrc = ..win
.getDesktop(); -
if
( hwnd===null
) hwnd = hSrc; -
if
( hSrc!==hwnd ){ - ..
win
.showForeground(hwnd); - ..
thread
.delay(10
); - }
win.getDesktop其实是调用的:GetDesktopWindow()
在多显示器中,桌面主要指的窗口其实是不包括副屏的。

所以,如果需要改善这个问题,只需要把snap改掉,不要用现有的com.picture.snap
具体改动方法如下:
Code AardioLine:19复制
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.-
-
this
.beforeShowWindow = function
(shown,status){ -
if
(shown){ -
var
srcX,srcY,srcCx,srcCy = ..win
.getScreenPos(this
.hwnd); -
this
.setPos( srcX,srcY,srcCx,srcCy,-1 ); -
-
-
import
gdip.snap; -
var
img = gdip.snap(,srcX,srcY,srcCx,srcCy); -
this
.setBitmap(img.copyHandle()) -
-
this
.mask.predraw(); - }
- }
至此,这个问题就解决了。再次在副屏截图就没有问题了。