仔细看了你的工程代码
以下是分析说明,供参考
代码中这个截图的蒙版覆盖,你使用了
var screenArea = mouse.screenArea();
来创建了覆盖蒙版,而蒙版中使用的是
var srcX,srcY,srcCx,srcCy = ..win.getScreenPos(this.hwnd);
this.setPos( srcX,srcY,srcCx,srcCy,-1/*_HWND_TOPMOST*/ );
var pic = ..com.picture.snap();
其中,继续查看com.pitcure.snap 源码,发现
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()
在多显示器中,桌面主要指的窗口其实是不包括副屏的。
![](https://aardio.online/upload/files/20240625/1719319262.png)
所以,如果需要改善这个问题,只需要把snap改掉,不要用现有的com.picture.snap
具体改动方法如下:
//修改库文件 mouse.screenArea 源码
this.beforeShowWindow = function(shown,status){
if(shown){
var srcX,srcY,srcCx,srcCy = ..win.getScreenPos(this.hwnd);
this.setPos( srcX,srcY,srcCx,srcCy,-1/*_HWND_TOPMOST*/ );
/*
var pic = ..com.picture.snap();
this.setBitmap(pic.CopyHandle() )
..com.Release(pic);
*/
//修改以下三行
import gdip.snap;
var img = gdip.snap(,srcX,srcY,srcCx,srcCy);
this.setBitmap(img.copyHandle())
this.mask.predraw();
}
}
至此,这个问题就解决了。再次在副屏截图就没有问题了。