获取桌面项目/图标的桌面坐标。
我已经获得了 SysListView32 窗口句柄,其中包含使用以下命令的桌面图标:
HWND hWnd_Progman = User32.INSTANCE.FindWindow("Progman", "Program Manager");
HWND hWnd_SHELLDLL_DefView = User32.INSTANCE.FindWindowEx(hWnd_Progman, null, "SHELLDLL_DefView", null);
HWND hWnd_SysListView32 = User32.INSTANCE.FindWindowEx(hWnd_SHELLDLL_DefView, null, "SysListView32", "FolderView");
Run Code Online (Sandbox Code Playgroud)
我已经获得了桌面项目数:
LRESULT result = User32.INSTANCE.SendMessage(hWnd_SysListView32, LVM_GETITEMCOUNT, new WPARAM(), new LPARAM());
long desktopIconCount = result.longValue();
Run Code Online (Sandbox Code Playgroud)
我已设置桌面项目位置(验证 SysListView32 是桌面项目的正确列表视图)。传递的 x 和 y 坐标与从最左边显示器的左上角到桌面项目左上角的偏移量相对应。代码:
int itemIndex = 0; // Allows 0 to desktopIconCount - 1.
int x = ...;
int y = ...;
LRESULT res = User32.INSTANCE.SendMessage(hWnd_SysListView32, LVM_SETITEMPOSITION, new WPARAM(itemIndex), new LPARAM((x & 0xFFFF) | (y << …Run Code Online (Sandbox Code Playgroud) 我无法在使用 ASM 库修改字节码后加载类。
这里是恒等变换器,我希望得到与字节一大小相同的修改后的数组,但它短两倍!(439 比 278)
String path = SimpleClass.class.getName().replace(".", "/") + ".class";
ClassLoader classLoader = SimpleClass.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream(path);
byte[] bytes = IOUtils.toByteArray(is);
ClassReader reader = new ClassReader(bytes);
ClassWriter writer = new ClassWriter(reader, 0);
byte[] modified = writer.toByteArray();
Run Code Online (Sandbox Code Playgroud)
无法加载并没有什么了不起的。我怀疑标头被截断,但两个数组中的第一个字节是相同的。
-54, -2, -70
static class ByteClassLoader extends ClassLoader {
public Class define(String name, byte[] body) {
return defineClass(name, body, 0, body.length);
}
}
ByteClassLoader myLoader = new ByteClassLoader();
Class myClass = myLoader.define("Ooo", modified);
Run Code Online (Sandbox Code Playgroud)
失败并出现错误:
java.lang.UnsupportedClassVersionError: Ooo has been compiled …Run Code Online (Sandbox Code Playgroud)