我正在处理经常(几乎不可思议)在分辨率超过5000x3000像素的计算机上运行的软件.
在如此大的显示器上,我们需要一种向用户显示鼠标位置的方法.我们试图将实际光标放大,但这在Windows上似乎是不可能的; 相反,我们已经决定在某个按键上我们将创建一个与桌面大小相同的透明形式,然后我们将绘制一个每隔40-100ms刷新一次的MouseCursor.png文件.
但是,在如此大的画布上,它不能像我们想的那样响应.有没有人对如何最好地解决这个问题有任何建议?
我正在尝试使用Ansible playbooks在AWS上配置我的基础架构.我有实例,并且能够提供docker-engine,docker-py等等,我发誓,昨天这个工作正常,我没有更改代码.
我的剧本的相关部分是:
- name: Ensure AWS CLI is available
pip:
name: awscli
state: present
when: aws_deploy
- block:
- name: Add .boto file with AWS credentials.
copy:
content: "{{ boto_file }}"
dest: ~/.boto
when: aws_deploy
- name: Log in to docker registry.
shell: "$(aws ecr get-login --region us-east-1)"
when: aws_deploy
- name: Remove .boto file with AWS credentials.
file:
path: ~/.boto
state: absent
when: aws_deploy
- name: Create docker network
docker_network:
name: my-net
- name: Start Container
docker_container:
name: …
Run Code Online (Sandbox Code Playgroud) 我们在程序中创建了一些自定义"窗口",当VisualStyles
启用时,我们可以找到窗口的每个元素及其大小,并使用相应的渲染器自行绘制,包括最小化和关闭按钮.
我们想在VisualStyles
禁用时做同样的事情并且当前绘制我们自己的窗口,但它们非常难看.在WinForms C#中是否可以绘制Windows经典风格的窗口?我发现了ClassicBorderDecorator
它,但是它适用于WPF.
或者,如果不这样做,我们怎样才能得到我们以下列方式做的窗饰的像素大小:
// Get the height of the window caption.
if (SetRenderer(windowElements["windowCaption"]))
{
captionHeight = renderer.GetPartSize(graphics.Graphics, ThemeSizeType.True).Height;
}
// Get the thickness of the left, bottom,
// and right window frame.
if (SetRenderer(windowElements["windowLeft"]))
{
frameThickness = renderer.GetPartSize(graphics.Graphics, ThemeSizeType.True).Width;
}
Run Code Online (Sandbox Code Playgroud) 我们正在使用 SetWindowPos 来设置窗口的位置,并且效果很好。
我对它唯一的疑虑是,如果我们正在移动的窗口最大化,那么它会移动并变成合适的大小,但是,它仍然会认为自己处于最大化状态,并继续显示“恢复“ 按钮。
有没有办法在调用 SetWindowPos 后告诉该窗口替换最大化按钮?
另请注意:这些窗口不一定是 Windows 窗体窗口,也可能是资源管理器、Chrome、Firefox、记事本等应用程序。
这是我们对 SetWindowPos 的调用:
PInvokeMethods.SetWindowPos(
hwnd, 0,
position.Left + x, position.Top + y, position.Width, position.Height,
PInvokeMethods.SWP_NoZOrder | PInvokeMethods.SWP_NoActivate);
我有以下代码,我看到它写了两种不同的方式.我只是好奇这两种方式中的哪一种更好的做法:
if (this.IsDisposed) return;
if (this.IsHandleCreated)
{
if (this.InvokeRequired)
{
this.Invoke(action);
}
else
{
action();
}
}
log.Error("Control handle was not created, therefore associated action was not executed.");
Run Code Online (Sandbox Code Playgroud)
与
if (this.InvokeRequired)
{
this.Invoke(action);
}
else
{
if (this.IsDisposed) return;
if (!this.IsHandleCreated)
{
log.Error("Control handle was not created, therefore associated action was not executed.");
return;
}
action();
}
Run Code Online (Sandbox Code Playgroud)
我主要关心的是需要控件有一个句柄的动作所产生的问题,而这些问题并非显而易见.如果我要做这样的事情,它似乎通过确保控件在执行操作之前具有句柄来解决我的问题.思考?
if (control.InvokeRequired)
{
control.Invoke(action);
}
else
{
if (control.IsDisposed) return;
if (!control.IsHandleCreated)
{
// Force a handle to be created to prevent …
Run Code Online (Sandbox Code Playgroud) 所以,我们的单声道从3.12.0更新到4.0.1并且导致nunit出现了一堆问题,如下所示:升级到运行NUnit测试的Mono 4后的新SIGABRT虽然升级到4.1.0快照修复了这些问题,但它还没有已正式发布,我们不想使用它.相反,我们想降级回3.12.0,但似乎我甚至不能这样做.跑步apt-cache showpkg mono-complete
只给我以下选项
matt@matt-T420:~/vw3$ apt-cache showpkg mono-complete
Package: mono-complete
Versions:
4.0.1-0xamarin4 (/var/lib/apt/lists/download.mono-project.com_repo_debian_dists_wheezy_main_binary-amd64_Packages)
Description Language:
File: /var/lib/apt/lists/ca.archive.ubuntu.com_ubuntu_dists_vivid_universe_binary-amd64_Packages
MD5: dacc30c6a4347277b44c68a99c998d5f
Description Language: en
File: /var/lib/apt/lists/ca.archive.ubuntu.com_ubuntu_dists_vivid_universe_i18n_Translation-en
MD5: dacc30c6a4347277b44c68a99c998d5f
3.2.8+dfsg-4ubuntu4 (/var/lib/apt/lists/ca.archive.ubuntu.com_ubuntu_dists_vivid_universe_binary-amd64_Packages)
Description Language:
File: /var/lib/apt/lists/ca.archive.ubuntu.com_ubuntu_dists_vivid_universe_binary-amd64_Packages
MD5: dacc30c6a4347277b44c68a99c998d5f
Description Language: en
File: /var/lib/apt/lists/ca.archive.ubuntu.com_ubuntu_dists_vivid_universe_i18n_Translation-en
MD5: dacc30c6a4347277b44c68a99c998d5f
Run Code Online (Sandbox Code Playgroud)
但是,如果我浏览http://origin-download.mono-project.com/repo/debian/dists/wheezy/snapshots/3.12.0/我可以看到包但我不知道如何将它添加到我的回购清单.我不知道如何修改echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
到3.12.0文件夹的pint.
我基本上只想吹掉单声道4.0,重新安装3.12.0,然后在那个版本固定/保持它.有人可以帮忙吗?
我正在尝试将用户的整个桌面捕获为图像.我通过以下方式执行此操作:
public Bitmap CaptureScreen()
{
// Set up a bitmap of the correct size
Bitmap CapturedImage = new Bitmap((int)SystemInformation.VirtualScreen.Width,
(int)SystemInformation.VirtualScreen.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
// Create a graphics object from it
System.Drawing.Size size = new System.Drawing.Size((int)SystemInformation.VirtualScreen.Width, (int)SystemInformation.VirtualScreen.Height);
using (Graphics g = Graphics.FromImage(CapturedImage))
{
// copy the entire screen to the bitmap
g.CopyFromScreen(0, 0, 0, 0,
size, CopyPixelOperation.SourceCopy);
}
return CapturedImage;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将PixelFormat
from 更改Format32bppArgb
为Format16bppArgb1555
,则会产生一个OutOfMemoryException
我不太懂的,考虑到我降低了质量.
有任何想法吗?或者我如何降低此图像的质量(因为它将以非常频繁的间隔通过网络发送)
我试过这个没有成功:如何在log4net中过滤自定义级别
这是我正在使用的代码:
public static class SpecialLogging
{
public static readonly log4net.Core.Level specialLevel = new log4net.Core.Level(35000, "SPECIAL");
public static void Special(this ILog log, string message)
{
log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType,
specialLevel, message, null);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我测试它:
private static void Main()
{
//Logger
LogManager.GetRepository().LevelMap.Add(SpecialLogging.specialLevel);
ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Special("Special");
}
Run Code Online (Sandbox Code Playgroud)
最后我的log4net.config文件:
<log4net>
<appender name="RollingLogFileAppenderDebug" type="log4net.Appender.RollingFileAppender">
<file value="./Logs/DEBUG.log" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="3" />
<maximumFileSize value="5GB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="DEBUG" />
<levelMax value="FATAL" /> …
Run Code Online (Sandbox Code Playgroud) 我们正准备部署商业应用程序.我们的软件使用了其他几个库,这些库拥有代码项目开放许可证(CPOL),LGPL,Apache许可证和MIT许可证等许可证.
显然,我们希望遵守所有这些许可证,但我们是一个小型服装,没有法律部门来帮助我们解决这些问题.目前,由于所有库都是动态链接的,而不是嵌入到可执行文件中,我认为我们大多都是明确的.我们的项目是封闭源,旨在出售,并可能由我们提供给他们的人转售.
在使用这些库的源代码中,我们已将相关许可证放在文件的头部.
在我们的About Box中,我们也放置了许可证(这是否必要)
在分发我们的软件时,我们是否还需要包含LICENSE文件?
谢谢你的帮助!