我想获取系统(windows)中运行程序的缩略图,类似于alt-tab快捷键中展示的样子。如下图:
问过chatgpt,提供了如下代码:
const ffi = require("ffi-napi");const ref = require("ref-napi");const ArrayType = require("ref-array-napi");const fs = require("fs");// 定义 Windows API 函数和数据类型const user32 = new ffi.Library("user32", { GetWindowRect: ["bool", ["long", "pointer"]], GetDC: ["long", ["long"]], ReleaseDC: ["int", ["long", "long"]], GetDesktopWindow: ["int", []],});const gdi32 = new ffi.Library("gdi32", { CreateCompatibleDC: ["long", ["long"]], CreateCompatibleBitmap: ["long", ["long", "int", "int"]], SelectObject: ["long", ["long", "long"]], BitBlt: [ "int", ["long", "int", "int", "int", "int", "long", "int", "int", "int"], ], GetObjectA: ["int", ["long", "int", "pointer"]], GetDIBits: [ "int", ["long", "long", "uint", "uint", "pointer", "pointer", "uint"], ], DeleteDC: ["bool", ["long"]], DeleteObject: ["bool", ["long"]],});// 找到目标窗口的句柄const windowHandle = 395014; // 替换为你要获取的窗口句柄// 获取窗口的矩形区域const rect = Buffer.alloc(16);user32.GetWindowRect(windowHandle, rect);// 计算窗口的宽度和高度const left = rect.readInt32LE(0);const top = rect.readInt32LE(4);const right = rect.readInt32LE(8);const bottom = rect.readInt32LE(12);const width = right - left;const height = bottom - top;// 获取桌面窗口的设备上下文(DC)const desktopWindow = user32.GetDesktopWindow();const hdcDesktop = user32.GetDC(desktopWindow);try { // 创建兼容的设备上下文(DC)和位图 const hdcMem = gdi32.CreateCompatibleDC(hdcDesktop); const hBitmap = gdi32.CreateCompatibleBitmap(hdcDesktop, width, height); gdi32.SelectObject(hdcMem, hBitmap); // 使用 BitBlt 函数将窗口的内容复制到位图 gdi32.BitBlt(hdcMem, 0, 0, width, height, hdcDesktop, left, top, 0x00cc0020); // CAPTUREBLT | SRCCOPY // 获取位图信息 const buffer = Buffer.alloc(width * height * 4); // 假设位图是 32 位颜色 const bmpInfo = ref.alloc("char", 40); // sizeof(BITMAPINFO) == 40 gdi32.GetObjectA(hBitmap, 40, bmpInfo); // 获取位图数据 gdi32.GetDIBits(hdcDesktop, hBitmap, 0, height, buffer, bmpInfo, 0); // 在这里,buffer 包含窗口的缩略图数据 console.log(buffer, "buffer"); fs.writeFileSync("screenshot.bmp", buffer); // 释放资源 gdi32.DeleteDC(hdcMem); gdi32.DeleteObject(hBitmap); user32.ReleaseDC(desktopWindow, hdcDesktop);} catch (e) { console.warn(e);}
buffer 存储的文件screenshot.bmp
系统提示无法打开。不知道如何解决
这段代码看起来是在使用 Node.js 和一些 Windows API 函数来获取特定窗口的缩略图。如果你得到的文件无法打开,可能有几个原因。
如果以上所有尝试都无法解决问题,那么可能需要更深入地查看代码以找出可能的问题所在。你也可以考虑在出现问题时添加更多的错误检查和日志记录,以帮助确定问题所在。例如,你可以检查每个 API 调用的返回值,确保它们都按预期工作。
问题内容: 我正在尝试在一个名为hello.js的单独文件中运行用javascript编写的hello world程序 当前正在运行Windows版本的node.js。 该代码可以在控制台窗口中完美运行,但是 如何在Windows环境中引用该路径 。 在Unix中,我猜它显示的是$ node hello.js 我绝对不是Node.js的新手,如果我做错了什么,请纠正我。 我试过了 -—没工作 -没
问题内容: 我正在使用node.js构建应用程序,我已成功上传了视频,但需要为其生成视频缩略图。目前,我使用node exec执行ffmpeg的系统命令来制作缩略图。 此代码来自http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a- resumable-video-uploade-in-node- js/中 的教程 上面
问题内容: 有一个旧的应用程序,使用可以打印出很多消息,但是我只是找不到在哪个文件和行中调用。 有没有办法挂接到应用程序并显示文件名和行号? 问题答案: 对于临时黑客来说,找到想要摆脱的日志语句,覆盖自己并不是很困难。 那将打印类似 那里有很多杂音,但调用堆栈的第二行,应该将您指向正确的位置。
问题内容: 在Windows资源管理器(和Linux gnome)中,为每个文件显示一个缩略图或 图标 。像EXE,图像,视频,txt文件,ini文件,Word文档以及许多其他文件类型一样。现在是我的问题:有没有一种方法可以通过文件获取(最好是较大的)图标。 就像是: 谢谢 问题答案: 似乎没有实现此操作的AWT方法。 如果您使用的是Swing,则可以使用一种方法来获取Swing … … 您还可以
我在jsf中学习一个网络共享项目。在这个项目中,用户可以上传文档,如. doc、. pdf、. ppt等。我想将该文档的第一页显示为缩略图。经过一番谷歌搜索,我找到了Apache POI。有人对我的问题有什么建议吗?我如何返回word doc第一页的缩略图图像?我尝试了这段代码。这段代码只得到word doc包含的第一张图片:
我有一个大尺寸的图像。在运行时,我想从存储器中读取图像,并对其进行缩放,以减少其重量和大小,并将其用作缩略图。当用户单击缩略图时,我想显示全尺寸的图像。