首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由电子应用程序从本机C代码创建的访问窗口

由电子应用程序从本机C代码创建的访问窗口
EN

Stack Overflow用户
提问于 2021-01-27 14:47:59
回答 1查看 45关注 0票数 1

我们有一个电子应用程序,希望在本地C代码中访问由该应用程序创建的窗口。下面是获取窗口id的电子端代码

代码语言:javascript
复制
  const handle = windowObject.getNativeWindowHandle();
  const windowId = handle.readUInt32LE(0);  // We are currently targetting x86 on linux

现在,我们用C语言编写了以下代码来创建曲面:

代码语言:javascript
复制
Display *d = XOpenDisplay(NULL);
int screen = DefaultScreen(d);
Drawable da = windowIdPassedFromElectronApp; 

// Drawable da = XCreateSimpleWindow(d, DefaultRootWindow(d), 0, 0, x, y, 0, 0, 0);
// The code in the comment above works - but that creates a new window,
// we wish to use the window created by electron application

XSelectInput(d, da, ButtonPressMask | KeyPressMask);
XMapWindow(d, da);
cairo_surface_t* sfc = cairo_xlib_surface_create(d, da, DefaultVisual(d, screen), x, y);

上面的代码抛出以下错误:

代码语言:javascript
复制
X Error of failed request:  BadAccess (attempt to access private resource denied)
Major opcode of failed request:  2 (X_ChangeWindowAttributes)
Serial number of failed request:  7
Current serial number in output stream:  9

我们如何确保C代码可以被安全地授予在电子应用程序创建的窗口上绘制的权限?对于我们的用例,一些替代的架构可以工作吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-27 15:11:35

我们设法解决了这个问题,创建了一个子窗口,父窗口作为电子应用程序传递的窗口。示例代码:

代码语言:javascript
复制
Drawable da = XCreateSimpleWindow(d, windowIdPassedFromElectronApp, offsetX, offsetY, sizeX, sizeY, 0, 0, 0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65914135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档