开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
main
分支 (1)
main
main
分支 (1)
main
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
main
分支 (1)
main
sharecode
/
java
/
src
/
WinCon.java
sharecode
/
java
/
src
/
WinCon.java
WinCon.java 5.59 KB
一键复制 编辑 原始数据 按行查看 历史
dwing 提交于 2025年02月27日 15:23 +08:00 . java: add some
import java.io.Console;
import java.lang.foreign.Arena;
import java.lang.foreign.FunctionDescriptor;
import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SymbolLookup;
import java.nio.charset.StandardCharsets;
import util.UnsafeUtil;
import static java.lang.foreign.ValueLayout.*;
public class WinCon {
public static final int STD_INPUT_HANDLE = -10;
public static final int STD_OUTPUT_HANDLE = -11;
public static final int STD_ERROR_HANDLE = -12;
public static final int FOREGROUND_BLUE = 0x0001;
public static final int FOREGROUND_GREEN = 0x0002;
public static final int FOREGROUND_RED = 0x0004;
public static final int FOREGROUND_INTENSITY = 0x0008;
public static final int BACKGROUND_BLUE = 0x0010;
public static final int BACKGROUND_GREEN = 0x0020;
public static final int BACKGROUND_RED = 0x0040;
public static final int BACKGROUND_INTENSITY = 0x0080;
/*
public static final MethodHandle getDeclaredFields0MH;
static {
try {
var getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
unsafe.putBoolean(getDeclaredFields0, OVERRIDE_OFFSET, true);
getDeclaredFields0MH = MethodHandles.lookup().unreflect(getDeclaredFields0);
var m = WinCon.class.getModule();
var fs = (Field[])getDeclaredFields0MH.invokeExact(m.getClass(), false);
for (var f : fs) {
if ("ALL_UNNAMED_MODULE".equals(f.getName())) {
unsafe.putBoolean(f, OVERRIDE_OFFSET, true);
var allUnnamedModule = f.get(null);
for (var f2 : fs) {
if ("enableNativeAccess".equals(f2.getName())) {
// suppress WARNING: Use --enable-native-access=%s to avoid a warning for callers in this module
unsafe.putBoolean(f2, OVERRIDE_OFFSET, true);
f2.set(allUnnamedModule, true);
break;
}
}
break;
}
}
} catch (Throwable e) {
throw new AssertionError(e);
}
}
*/
public static void main1(String[] args) throws Exception {
var c = Class.forName("jdk.internal.org.jline.terminal.impl.ffm.Kernel32");
var m = UnsafeUtil.getMethod(c, "GetStdHandle", int.class);
var hout = m.invoke(null, STD_OUTPUT_HANDLE);
m = UnsafeUtil.getMethod(c, "SetConsoleTextAttribute", MemorySegment.class, short.class);
m.invoke(null, hout, (short)(FOREGROUND_GREEN | FOREGROUND_INTENSITY));
System.out.println("Hello");
m.invoke(null, hout, (short)(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED));
System.out.println("end");
}
@SuppressWarnings("OptionalGetWithoutIsPresent")
public static void main(String[] args) throws Throwable {
var libKernel32 = SymbolLookup.libraryLookup("kernel32.dll", Arena.global());
var linker = Linker.nativeLinker();
// DWORD GetLastError();
var mhGetLastError = linker.downcallHandle(libKernel32.find("GetLastError").get(),
FunctionDescriptor.of(JAVA_INT));
// BOOL WINAPI AllocConsole(void);
var mhAllocConsole = linker.downcallHandle(libKernel32.find("AllocConsole").get(),
FunctionDescriptor.of(JAVA_INT));
// BOOL WINAPI FreeConsole(void);
var mhFreeConsole = linker.downcallHandle(libKernel32.find("FreeConsole").get(),
FunctionDescriptor.of(JAVA_INT));
// HANDLE WINAPI GetStdHandle(DWORD nStdHandle);
var mhGetStdHandle = linker.downcallHandle(libKernel32.find("GetStdHandle").get(),
FunctionDescriptor.of(JAVA_LONG, JAVA_INT));
// BOOL WINAPI WriteConsole(HANDLE hConsoleOutput, const VOID* lpBuffer, DWORD nNumberOfCharsToWrite,
// LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved);
var mhWriteConsoleA = linker.downcallHandle(libKernel32.find("WriteConsoleA").get(),
FunctionDescriptor.of(JAVA_INT, JAVA_LONG, ADDRESS, JAVA_INT, ADDRESS, ADDRESS));
// BOOL WINAPI SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
var mhSetConsoleTextAttribute = linker.downcallHandle(libKernel32.find("SetConsoleTextAttribute").get(),
FunctionDescriptor.of(JAVA_INT, JAVA_LONG, JAVA_SHORT));
int r = (int)mhFreeConsole.invoke();
System.out.println("FreeConsole = " + r);
r = (int)mhAllocConsole.invoke();
int e = (int)mhGetLastError.invoke();
System.out.println("AllocConsole = " + r);
System.out.println("GetLastError = " + e);
var hout = (long)mhGetStdHandle.invoke(STD_OUTPUT_HANDLE);
System.out.println("GetStdHandle(STDOUT) = " + hout);
r = (int)mhSetConsoleTextAttribute.invoke(hout, (short)(FOREGROUND_GREEN | FOREGROUND_INTENSITY));
System.out.println("SetConsoleTextAttribute = " + r);
var str = Arena.global().allocateFrom("Hello\n", StandardCharsets.UTF_8);
r = (int)mhWriteConsoleA.invoke(hout, str, (int)str.byteSize() - 1, MemorySegment.NULL, MemorySegment.NULL);
e = (int)mhGetLastError.invoke();
System.out.println("WriteConsole = " + r);
System.out.println("GetLastError = " + e);
mhSetConsoleTextAttribute.invoke(hout, (short)(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED));
Thread.sleep(999_999_999);
}
public static void main2(String[] args) throws Exception {
System.setProperty("jdk.console", "jdk.internal.le");
var console = (Console)UnsafeUtil.getField(Console.class, "cons").get(null);
System.out.println(console.getClass().getName());
var console2 = UnsafeUtil.getField(console.getClass(), "delegate").get(console);
System.out.println(console2.getClass().getName());
var terminal = UnsafeUtil.getField(console2.getClass(), "terminal").get(console2);
System.out.println(terminal.getClass().getName());
var writer = UnsafeUtil.getField(terminal.getClass().getSuperclass(), "writer").get(terminal);
System.out.println(writer.getClass().getName());
System.out.println(UnsafeUtil.getField(writer.getClass(), "out").get(writer).getClass().getName());
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

分享个人编写的各种编程语言的短代码
暂无标签
MIT
使用 MIT 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
其他
1
https://gitee.com/dwing/sharecode.git
git@gitee.com:dwing/sharecode.git
dwing
sharecode
sharecode
main
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /