我cmd.exe在Windows上运行以下批处理脚本时遇到一个奇怪的问题:
@echo off
gradle wrapper
gradlew build
pause
Run Code Online (Sandbox Code Playgroud)
此批处理脚本只执行第一个命令,即gradle wrapper.之后,批处理脚本自动终止,并且gradlew build永远不会执行命令.
有没有办法可以强制批处理脚本,以便它不能被调用gradle wrapper,gradle wrapper并在被调用后继续正常执行?
我想让我的应用程序(纯粹在 X11 中)具有高 DPI 感知能力。为了做到这一点,我需要一种方法来找出在显示设置中配置的系统比例因子。有没有办法从 X11 应用程序中获得这个系统比例因子,而无需求助于 GTK 等更高级别的 API?
FWIW,我检查了 GTK 源代码,看看gdk_window_get_scale_factor()它是怎么做的,它似乎读取了一个名为GDK_SCALE. 然而,这个环境变量在我的系统上根本不存在,即使我在我的 4K 显示器上将缩放比例设置为 1.75。
那么如何以编程方式检索系统缩放因子?
我希望在我的上画剪辑,CGContext但我需要它反过来,即我想要使用剪切路径添加几个矩形,CGContextAddRect()剪辑应该按照我添加到剪辑中的所有矩形的方式完成路径不受任何绘图操作的影响.通常情况下,它只是反过来,即绘图函数绘制到已添加到剪切路径的矩形,并使未添加到剪切路径的区域不受影响.所以我想我需要的只是一种在调用之前反转剪切路径的方法CGContextClip().回到QuickDraw时代,可以通过使用区域然后调用XorRgn()每个矩形轻松完成.但是使用Quartz似乎更复杂.有没有人有一个简单的解决方案来实现这一点,还是我需要自己做所有这些路径反转计算?
等待X11窗口映射和查看的正确方法是什么?确切地说,我想等到我可以安全地调用XSetInputFocus()而不会遇到以下错误导致X服务器回火的任何风险:
// X Error of failed request: BadMatch (invalid parameter attributes)
// Major opcode of failed request: 42 (X_SetInputFocus)
Run Code Online (Sandbox Code Playgroud)
目前这种错误经常发生,尤其是在慢速X服务器上或者在使用libXrandr更改了监视器分辨率后立即尝试打开新窗口时.
我已经有了这个问题的解决方案,但它非常hacky因为它轮询window属性所以我想知道是否有更清洁的版本.
这是我目前的做法:
static Bool predicate(Display *display, XEvent *ev, XPointer arg)
{
return(ev->type == MapNotify);
}
static void waitmapnotify(struct osdisplayinfo *osd)
{
XEvent ev;
XWindowAttributes xwa;
XPeekIfEvent(osd->display, &ev, predicate, NULL);
do {
XGetWindowAttributes(osd->display, osd->window, &xwa);
usleep(1);
} while(xwa.map_state != IsViewable);
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作得很好,但它很hacky所以我在这里讨论它 - 以防万一有一个更干净的方式来做这件事.
我安装了 Visual Studio 9.0,但我想从 PowerShell 手动使用它。它带有两个安装脚本:vcvars32.bat用于 32 位编译器和vcvars64.bat用于 64 位编译器。当我打开cmd.exe并运行其中一个脚本时,它会设置一切正常,我可以cl.exe毫无问题地运行。但是,当我从 PowerShell 运行这些安装脚本之一时,它不起作用。脚本运行良好,但cl.exe之后尝试运行会产生“cl.exe找不到”错误!PATH在运行安装脚本之一后查看环境变量的内容,我可以看到PATH实际上根本没有修改。
因此,似乎从 PowerShell 运行的批处理文件维护自己的环境变量状态,一旦批处理文件终止,该状态就会消失。那么有没有办法从 PowerShell 运行批处理文件并使这些批处理文件影响当前 PowerShell 会话的实际环境变量?因为那是我需要的。毕竟,所有这些都是由vcvars32.bit并且vcvars64.bit正在设置环境变量完成的,但它似乎只能从cmd.exe,而不是从 PowerShell 工作。
我刚刚尝试在Android 4.0设备上运行使用Java 8编译的应用程序.虽然我习惯于仔细查看Android文档中的Android API级别,以确保我只使用Android 4.0上提供的API,但我并不习惯确保我不使用Java 4.0中的任何功能在Android 4.0上都不可用.
考虑以下代码,它尝试initializeScrollbars()从View类中导入API,因为无论出于何种原因,它已从官方SDK中删除:
try {
final Method initializeScrollbars = android.view.View.class.getDeclaredMethod("initializeScrollbars", TypedArray.class);
initializeScrollbars.invoke(this, a);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
虽然此代码在我的Android 8.0测试系统上运行良好,但它在Android 4.0上无效.错误是:
Could not find method java.lang.ReflectiveOperationException.printStackTrace
Run Code Online (Sandbox Code Playgroud)
经过一些研究后我发现ReflectiveOperationException在Java 7之前不可用,显然,Android 4.0不支持Java 7.
这让我想知道:是否有一个概述清楚地显示哪个Android版本附带哪个Java版本?例如,我如何找到支持Java 7的第一个Android版本?我怎样才能找到第一个支持Java 8的Android版本?
这真的很容易找到,但我只是没有看到它.谷歌搜索总会导致人们询问Android Studio支持的Java版本,而不是Android本身.
那么,任何人都可以对此有所了解吗?我知道它必须在某个地方非常明显,但我似乎没有找到它......
我将如何实现用 C 编写的 Linux 程序之间的通信?具体来说,我想要以下内容:
我的程序可以在多个实例中运行。在启动时,我希望我的程序检测到我的程序的所有其他实例已经在运行,然后它应该能够向它们发送文本字符串。另一方面,我还希望已在运行的实例得到通知,新实例已启动,并且它们还应该能够向新实例发送文本字符串。
有人可以指出一些可用于在 Linux 上实现此类软件设计的 API 吗?在 Windows 上,我可以简单地枚举所有窗口,检查它们的类名以找出我的程序的所有实例,然后向系统注册一条自定义消息,我可以使用它向它们发送数据。但是我将如何在 Linux 上做到这一点?
感谢您的任何提示!
在 Ubuntu 上打开非装饰全屏窗口的技巧是什么?我曾经将 _NET_WM_STATE 属性更改为 _NET_WM_STATE_FULLSCREEN 来实现此目的,但是虽然在 KDE 上运行良好,但它似乎不适用于 Ubuntu(GNOME;使用 12.04 LTS 进行测试)。左侧的启动器和标题栏仍然存在,并出现在我的未装饰的全屏窗口上方,这不是我想要的。
然而,当在 Firefox 中切换到全屏模式时,Firefox 的全屏窗口会覆盖整个屏幕,包括启动器面板和标题栏,因此必须能够以某种方式打开覆盖整个屏幕的窗口,包括 Ubuntu 的启动器和标题栏。
有人可以解释如何使用普通 X11 而不使用任何中间件来实现这种行为吗?
谢谢!
根据 MSDN,EM_GETTEXTEX返回以下内容:
The return value is the number of TCHARs copied into the
output buffer, including the null terminator.
Run Code Online (Sandbox Code Playgroud)
现在看一下下面的代码:
GETTEXTLENGTHEX gtl;
GETTEXTEX gt;
int len;
TCHAR *buf;
memset(>l, 0, sizeof(GETTEXTLENGTHEX));
gtl.flags = GTL_DEFAULT;
gtl.codepage = 1200;
len = SendMessage(hEditWnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
printf("LEN: %d\n", len);
buf = malloc((len + 1) * sizeof(TCHAR));
memset(>, 0, sizeof(GETTEXTEX));
gt.cb = (len + 1) * sizeof(TCHAR);
gt.flags = GT_DEFAULT;
gt.codepage = 1200;
len = SendMessage(hEditWnd, EM_GETTEXTEX, (WPARAM) >, (LPARAM) buf); …Run Code Online (Sandbox Code Playgroud) 考虑这个小程序:
int main(int argc, char *argv[])
{
*((int *) 0) = 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
显然,写入 $0 会导致内存访问错误。当用 Visual C 将此程序编译为 32 位可执行文件并运行它时,Windows 7 清楚地显示该程序已崩溃:(德国系统)
然而,当使用 Visual C 将程序编译为 64 位可执行文件时,它只是静静地崩溃。不会弹出系统对话框来通知用户程序刚刚崩溃。
这是 x64 二进制文件的正常行为还是我的 Windows 7 配置有问题?我认为操作系统应该在程序崩溃时清楚地向用户显示,而不是只是默默地杀死它们......
编辑:对于所有声称编译器可能只是优化空指针访问的人,这里是程序集。您可以看到非法内存访问就在那里,运行程序后它也显示在 Windows 的应用程序日志中。
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
include listing.inc
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC main
; Function compile flags: /Odtp
_TEXT SEGMENT
argc$ = 8
argv$ = 16
main PROC
; File d:\test.c
; Line 2 …Run Code Online (Sandbox Code Playgroud)