首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在多个显示器上绘制所有窗口

在多个显示器上绘制所有窗口可以采用以下步骤:

  1. 获取所有窗口的句柄和位置信息。可以使用Windows API函数EnumWindowsGetWindowRect来获取所有窗口的句柄和位置信息。
  2. 创建一个窗口列表。可以使用一个哈希表或数组来存储所有窗口的句柄和位置信息。
  3. 对于每个窗口,绘制其边框和标题栏。可以使用Windows API函数DrawEdgeDrawCaption来绘制窗口的边框和标题栏。
  4. 重复步骤3,直到所有窗口都被绘制在多个显示器上。

以下是一个简单的示例代码:

代码语言:go
复制

package main

import (

代码语言:txt
复制
"fmt"
代码语言:txt
复制
"syscall"
代码语言:txt
复制
"unicode"

)

func main() {

代码语言:txt
复制
// 获取所有窗口的句柄和位置信息
代码语言:txt
复制
windows := getWindowsInformation()
代码语言:txt
复制
// 创建一个窗口列表
代码语言:txt
复制
windowList := make(map[int]struct {
代码语言:txt
复制
    handle  syscall.Handle
代码语言:txt
复制
    position struct {
代码语言:txt
复制
        x, y, w, h int
代码语言:txt
复制
    }
代码语言:txt
复制
})
代码语言:txt
复制
// 遍历所有窗口,绘制其边框和标题栏
代码语言:txt
复制
for _, window := range windows {
代码语言:txt
复制
    // 获取窗口句柄和位置信息
代码语言:txt
复制
    handle := window.handle
代码语言:txt
复制
    position := window.position
代码语言:txt
复制
    // 绘制窗口边框
代码语言:txt
复制
    drawEdge(handle, position.x, position.y, position.w, position.h)
代码语言:txt
复制
    // 绘制窗口标题栏
代码语言:txt
复制
    drawCaption(handle, position.x, position.y, position.w, position.h)
代码语言:txt
复制
    // 将窗口句柄和位置信息添加到窗口列表中
代码语言:txt
复制
    windowList[handle] = struct {
代码语言:txt
复制
        handle  syscall.Handle
代码语言:txt
复制
        position struct {
代码语言:txt
复制
            x, y, w, h int
代码语言:txt
复制
        }
代码语言:txt
复制
    }{handle: handle, position: position}
代码语言:txt
复制
}
代码语言:txt
复制
// 遍历窗口列表,绘制每个窗口的边框和标题栏
代码语言:txt
复制
for handle, window := range windowList {
代码语言:txt
复制
    // 获取窗口句柄和位置信息
代码语言:txt
复制
    position := window.position
代码语言:txt
复制
    // 绘制窗口边框
代码语言:txt
复制
    drawEdge(handle, position.x, position.y, position.w, position.h)
代码语言:txt
复制
    // 绘制窗口标题栏
代码语言:txt
复制
    drawCaption(handle, position.x, position.y, position.w, position.h)
代码语言:txt
复制
}

}

// 获取所有窗口的句柄和位置信息

func getWindowsInformation() []struct {

代码语言:txt
复制
handle  syscall.Handle
代码语言:txt
复制
position struct {
代码语言:txt
复制
    x, y, w, h int
代码语言:txt
复制
}

} {

代码语言:txt
复制
windows := make([]struct {
代码语言:txt
复制
    handle  syscall.Handle
代码语言:txt
复制
    position struct {
代码语言:txt
复制
        x, y, w, h int
代码语言:txt
复制
    }
代码语言:txt
复制
}, 0)
代码语言:txt
复制
err := windowsSystemInformation(syscall.GetDesktopWindow(), &windows)
代码语言:txt
复制
if err != nil {
代码语言:txt
复制
    panic(err)
代码语言:txt
复制
}
代码语言:txt
复制
return windows

}

// 获取窗口的边框和标题栏

func drawEdge(handle syscall.Handle, x, y, w, h int) {

代码语言:txt
复制
const (
代码语言:txt
复制
    left    = 1
代码语言:txt
复制
    right   = 2
代码语言:txt
复制
    top     = 3
代码语言:txt
复制
    bottom  = 4
代码语言:txt
复制
    caption  = 5
代码语言:txt
复制
)
代码语言:txt
复制
var style uint32
代码语言:txt
复制
var color uint32
代码语言:txt
复制
if s, ok := windowStyles[handle]; ok {
代码语言:txt
复制
    style = s
代码语言:txt
复制
} else {
代码语言:txt
复制
    style = 0
代码语言:txt
复制
}
代码语言:txt
复制
if s, ok := windowColors[handle]; ok {
代码语言:txt
复制
    color = s
代码语言:txt
复制
} else {
代码语言:txt
复制
    color = 0
代码语言:txt
复制
}
代码语言:txt
复制
// 获取窗口边框和标题栏的尺寸
代码语言:txt
复制
borderRect := syscall.Rect(x, y, x+w, y+h)
代码语言:txt
复制
titleRect := syscall.Rect(x, y, x+w, y+h)
代码语言:txt
复制
// 绘制边框
代码语言:txt
复制
if style&left != 0 {
代码语言:txt
复制
    drawRect(borderRect, color, style)
代码语言:txt
复制
}
代码语言:txt
复制
if style&right != 0 {
代码语言:txt
复制
    drawRect(borderRect, color, style)
代码语言:txt
复制
}
代码语言:txt
复制
if style&top != 0 {
代码语言:txt
复制
    drawRect(borderRect, color, style)
代码语言:txt
复制
}
代码语言:txt
复制
if style&bottom != 0 {
代码语言:txt
复制
    drawRect(borderRect, color, style)
代码语言:txt
复制
}
代码语言:txt
复制
// 绘制标题栏
代码语言:txt
复制
if style&caption != 0 {
代码语言:txt
复制
    drawRect(titleRect, color, style)
代码语言:txt
复制
}

}

// 获取窗口的标题栏

func drawCaption(handle syscall.Handle

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

窗口管理:Magnet for Mac可以自动将多个窗口组合在一个屏幕

Magnet 中文版是Mac的一款窗口管理工具,它可以帮助用户将多个窗口自动地组合在一个屏幕,从而提高Mac电脑的工作效率。通过简单的快捷键操作,可以轻松将窗口定位到指定位置、大小等参数。...窗口管理:Magnet可以自动将多个窗口组合在一个屏幕,并按照设定的位置对其进行排版。支持多种排版设定,如全屏、半屏、四分之一屏等。3....多屏幕支持:Magnet还支持多个屏幕的管理,因此用户可以多个屏幕充分利用空间。4. 支持多种窗口:Magnet支持多种窗口类型的管理,如浏览器、编辑器、办公软件等。5....快速切换:Magnet支持快速切换窗口,用户可以通过快捷键操作来实现窗口间的切换。...总之,Magnet是一款简单但实用的窗口管理工具,它可以帮助Mac电脑用户更加高效地管理窗口,提高工作效率,特别是需要多窗口管理的用户。

1.4K00

Android窗口管理分析(1):View如何绘制到屏幕的主观理解

窗口管理知识图谱.png WMS的作用是窗口管理 不负责View绘制 既然是概述,我们不妨直观的思考一个问题,Activity是如何呈现到屏幕的,或者说View是如何被绘制到屏幕上来的?...wmParams.width = 800; wmParams.height = 800; mWindowManager.addView(mview, wmParams); 以上代码可以主屏幕添加一个...利用WindowManager.addView添加窗口之前,TextView的onDraw不会被调用,也就说View必须被添加到窗口中,才会被绘制,或者可以这样理解,只有申请了依附窗口,View才会有可以绘制的目标内存...,但是从直观理解,比较像子窗口(其实不是)。...每个View都有自己的onDraw回调,开发者可以onDraw里绘制自己想要绘制的图像,很明显View的绘制APP端,直观理解,View的绘制也不会交给服务端,不然也太不独立了,可是View绘制的内存是什么时候分配的呢

2K61

Android 使用Canvas图片绘制文字的方法

【Android】Android中 Paint 字体、粗细等属性的一些设置 Android SDK中使用Typeface类来定义字体,可以通过常用字体类型名称进行设置,如设置默认黑体: Paint mp...实际发现,最后绘制的效果与手机硬件也有些关系,比如前面的绘图测试程序....一个小应用,图片绘制文字,以下是绘制文字的方法,并且能够实现自动换行,字体自动适配屏幕大小 private void drawNewBitmap(ImageView imageView, String...icon Canvas canvas = new Canvas(icon); // 建立画笔 Paint photoPaint = new Paint(); // 获取更清晰的图像采样...canvas.translate(start_x, start_y); staticLayout.draw(canvas); } 以上这篇Android 使用Canvas图片绘制文字的方法就是小编分享给大家的全部内容了

4.2K20

【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 一个图形绘制多个小图形 )

3文章目录 一、绘制多图 1、绘制多图 2、代码示例 二、设置图形对话框在 Windows 界面的位置和大小 三、一个图形绘制多个小图形 一、绘制多图 ---- 1、绘制多图 存在一种绘图情况 ,...需要同时展示两条曲线 , 但是二者的 x 或 y 轴差距过大 , 需要绘制两个图中 ; 绘制每个图前 , 先调用一次 figure , 就会在新的对话框中生成一张新的图形 ; 使用示例如下 :...500 像素 ; 三、一个图形绘制多个小图形 ---- 使用 subplot 可以指定内部的小图形 ; subplot(m, n, 1); m 参数 : 行数 ; n 参数与 : 列数 ; 第三个参数是...); axis equal tight 执行结果 : 上面绘制出来的图的效果 , 最正确的是第 张图的样式 equal , x 轴长度 1 与 y 轴长度 1 相同 , 是最直观的效果 ;...square 样式表示的是坐标轴的 x 轴和 y 轴长度相同 ; equal tight 样式是 equal 样式基础 , 贴边切割有效曲线图形 ;

6.2K70

如何让IDEA像Eclipse一样一个窗口打开多个项目

我们刚开始学习java的时候,使用的最多的ide工具就是eclipse,eclipse中我们可以同时打开多个项目,很方便的项目之间进行切换,刚开始接触idea的时候,我们发现在一个窗口只能打开一个项目...,如果需要打开多个项目就只能打开多个窗口,非常不方便,所以就需要让idea也能支持这样的功能。...Eclipse中,我们打开的时候,他会让我们指定一个工作空间,这个工作空间里面存放的就是我们后面创建的项目Project IDEA里面没有工作空间的概念,只有项目,因为IDEA中的项目Project...其实就是eclipse里面的workspace,project下面时module,IDEA时这么定义的,一个project下面可以包括多个模块model,所以我们idea下面可以创建多个模块,每个模块对应一个单独的项目程序...然后重复同样的动作把eclipse下所有的maven项目依次导入

4.3K20

Windows 系统用 .NETC# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态

Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWindows 这个 API 来枚举这些窗口。 你可以使用本文编写的一个类型,查找到所有窗口中你关心的信息。...---- 需要使用的 API 枚举所有窗口仅需要使用到 EnumWindows,其中需要定义一个委托 WndEnumProc 作为传入参数的类型。 剩下的我们需要其他各种方法用于获取窗口的其他属性。...比如,我写了下面一个简单的示例,可以输出当前可见的所有窗口以及其位置和尺寸: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 using System;...如果不指定,则会找可见的,包含标题的,没有最小化的窗口。如果你希望找一些看不见的窗口,可以自己写过滤条件。 什么都不要过滤的话,就传入 _ => true,意味着所有窗口都会被枚举出来。...如果设置为 null,将仅查找可见窗口。 /// 找到的所有窗口信息。

81730

windows 系统下 workerman 同一个运行窗口中开启多个 websocket 服务

support 错误,意思 windows 中禁止同一个文件中开启多个 websocket 服务send('hello websocket');};// 运行所有...Worker实例Worker::runAll(); 开启服务失败解决办法windows 版本的 workerman 不支持同一个文件中实例化多个 Worker。...Worker实例(这里只有一个实例)Worker::runAll(); 同一个窗口中运行上面虽然可以解决运行多个 websocket 实例,但是你会发现有几个文件,就会有几个运行窗口如果开启的服务更多,...窗口也会更多,那么如何在同一个窗口中运行启动多个服务呢那么如果要解决这个问题,我们就可以创建一个 init.bat 文件,然后文件中加入以下代码,然后双击运行即可实现在同一个窗口中启动多个服务/d:

1.4K103

一个服务器多个网站会被分流吗?

一个服务器,放多个网站,会被分流吗?会造成网站卡顿吗?  ...服务器的带宽不足的话,网站的同时打开操作速度会受影响,此处不包括服务商提供的服务器,他们的服务器每个网站空间会专门设定带宽和运行内存;另外,同一个服务器同一个IP放多个网站在搜索引擎优化上会相互影响,如果其中一个站是垃圾站被百度...同一服务器,服务器够大、速度稳定,10几个网站模板不一样,白帽运营,不会受多大影响。 ...同一类内容,同一个ip,降权也会是同一时间。 一个服务器多个网站的话,如果在带宽不充足的情况下,可能会导致网站打开速度受到影响。

4.3K10

Apache服务器同时运行多个Django程序的方法

昨天刚刚找了一个基于Django的开源微型论坛框架Spirit,部署自己的小服务器。...脚本之家搜索到了一篇名为Apache服务器同时运行多个Django程序的方法,该文章声称可以apache的配置文件中使用SetEnv指令来部署多站点Django, 但是wsgi.py中已经存在...我还特意试了下,保留wsgi.py中已经存在os.environ.setdefault()不动,单独apache的配置文件中使用SetEnv,证明确实没有解决问题。...函数对该环境变量设置另一个不同的值(如VAL2),会因为setdefault函数的特性导致无法设置为新值 也是因为上述这一点,如果进程A先设置了环境变量(如ENV=VAL1),而A启动了子进程B,子进程B会继承A进程的所有与环境变量...我去掉了wsgi.py中的os.environ语句,apache配置文件中使用SetEnv进行配置文件的选择,奇怪的是不论SetEnv后面有没有使用引号,该问题都无法解决,有时候报错为模块找不到(与背景中的报错信息相同

3.5K30

一台Apache服务器创建多个站点(不同域名)

使用不同的域名来区分不同的网站,所有的域名解析都指向同一个 IP 地址。Apache通过HTTP头中附带的 host参数来判断用户需要访问哪一个网站。...例如要在一台服务器设置如下两个站点: http://www.test1.com http://www.test1.com ---------------------------------------...第一步:开启Apache的vhost模块 http.conf 配置文件中,找到下面的代码行,删除前面的 # 号,并开启这个 vhost 模块。... http.conf 文件中加入一行 Include /etc/httpd/conf/vhost.conf,将 vhost.conf 文件内容包含进来。...第三步:/etc/hosts文件中将网站的域名绑定到本地环回地址hosts文件末尾加入以下信息) 127.0.0.1 www.test1.com 127.0.0.1 www.test2.com

2.9K20
领券