leanflutter / screen_capturer

This plugin allows Flutter desktop apps to capture screenshots.
MIT License
83 stars 32 forks source link

Are there any "implicit" method? #7

Closed HaloWang closed 2 years ago

HaloWang commented 2 years ago

I find this package actually does what keyboard shortcut win + shift + s does. Are there any function which capture screen implicitly (so it need some addtional permission)? I want to implement implicit capturing. Where, or in which website, shall I find this C++ API? Thank you.

我发现这个包实际上是调用 Windows 系统的截图快捷键. 有没有那种调用函数直接无提示地截取指定 rect 的功能(这个功能或许需要额外的用户许可)? 如果我想自己实现这样的功能, 我应该去哪个网站查阅资料(估计是某个 windows C++ API)?

英语不好, 如有错误还请指出, 谢谢

lijy91 commented 2 years ago

你可以参考一下截取全屏的API,感觉做一些小改动即可以实现你所说的功能。

https://github.com/leanflutter/screen_capturer/blob/95119d5572158bf267dba5e937b38d2f96f31b90/windows/screen_capturer_plugin.cpp#L64

HaloWang commented 2 years ago

我感觉 robot.js 中, screen.capture 能很好地实现我说的功能. 我主要还是觉得 Biyi.app 在截屏翻译时总是会唤起 Windows 的截屏组件有点烦

这个方法的 native 实现如下:

https://github.com/octalmage/robotjs/blob/8ae87a91f06f49559f0db387bc2bd1ea01419880/src/screengrab.c#L110

另外:

  1. 你是如何在 commits 中展示可视化的代码而非链接的啊?
  2. 如果偷懒图省事儿(比如复用一些很成熟的 node.js addons)的话是不是可以让 flutter 做 app 的前端, 让 node.js 做 app 的本地后端, 为 app 提供一些支持(通过 websocket 通讯)? 这种思路可取吗? 有什么风险吗? 谢谢
lijy91 commented 2 years ago
  1. 我也是粘贴了一个你这样的链接,但不确定为什么我的会显示成代码块而你的链接不会。
  2. 这个思路完全可行,因为本质上这个库干的就是类似的事情,但将 nodejs 集成到应用内也不是个好主意。
lijy91 commented 2 years ago

调用系统的截屏主要是因为它有选择屏幕区域的功能,但是你提供的代码似乎没有办法做到这一点。

HaloWang commented 2 years ago

调用系统的截屏主要是因为它有选择屏幕区域的功能,但是你提供的代码似乎没有办法做到这一点。

主要还是我实验了一下 Robot.js 提供的 screen.capture, 发现能实现我的需求. 我并不确定是这行代码, 但想来肯定也是调用某个非常相似系统 API, 但顺着方法实现找应该是能找到的(node.js addon, 可能有点像是 dart:ffi)

HaloWang commented 2 years ago
  1. 我也是粘贴了一个你这样的链接,但不确定为什么我的会显示成代码块而你的链接不会。
  2. 这个思路完全可行,因为本质上这个库干的就是类似的事情,但将 nodejs 集成到应用内也不是个好主意。

我现在的想法就是让 App 调起一个 node.js 进程来提供服务. 我完全没有给 Windows/macOS 开发应用的经历. 我想知道, 你为什么说: "将 nodejs 集成到应用内也不是个好主意"? thx

你是指, 如果目标是做一个开源软件的话, 不应该将技术栈做的特别复杂, 是吗?

lijy91 commented 2 years ago

调用系统的截屏主要是因为它有选择屏幕区域的功能,但是你提供的代码似乎没有办法做到这一点。

主要还是我实验了一下 Robot.js 提供的 screen.capture, 发现能实现我的需求. 我并不确定是这行代码, 但想来肯定也是调用某个非常相似系统 API, 但顺着方法实现找应该是能找到的(node.js addon, 可能有点像是 dart:ffi)

根据你提供的这些信息,完全可以在 screen_capturer 中添加这个功能。

lijy91 commented 2 years ago
  1. 我也是粘贴了一个你这样的链接,但不确定为什么我的会显示成代码块而你的链接不会。
  2. 这个思路完全可行,因为本质上这个库干的就是类似的事情,但将 nodejs 集成到应用内也不是个好主意。

我现在的想法就是让 App 调起一个 node.js 进程来提供服务. 我完全没有给 Windows/macOS 开发应用的经历. 我想知道, 你为什么说: "将 nodejs 集成到应用内也不是个好主意"? thx

你是指, 如果目标是做一个开源软件的话, 不应该将技术栈做的特别复杂, 是吗?

主要是考虑到用户机器需要装 node 环境或者需要装 node 环境打包进安装包,以及调试等问题

HaloWang commented 2 years ago

让 App 调起一个 node.js 进程来提供服务

https://stackoverflow.com/questions/71090014/how-to-launch-other-appgo-service-when-flutter-windows-app-start