获取鼠标所在文件窗口 文件路径

软件和网站开发以及相关技术探讨
回复
黑豆大米
帖子: 3
注册时间: 2021-01-04 16:32
送出感谢: 1 次
接收感谢: 0

获取鼠标所在文件窗口 文件路径

#1

帖子 黑豆大米 » 2021-01-04 16:39

开发桌面软件时,遇到一个问题。
怎么才能获取鼠标指向文件窗口的文件路径。
查了好多资料都没看到相关内容。或者有其他思路也行。
头像
astolia
论坛版主
帖子: 4909
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 823 次

Re: 获取鼠标所在文件窗口 文件路径

#2

帖子 astolia » 2021-01-04 19:42

啥叫文件窗口?
x11环境下,如果进程在创建窗口时正确设置了_NET_WM_PID属性,就可以从中获取到进程id,然后从这个id入手。可以到/proc/pid/fd下面可以找进程打开的文件,也可以对进程进行调试。
如果是wayland环境,要看具体的compositor有没有提供类似获取pid的功能。
这些用户感谢了作者 astolia 于这个帖子:
黑豆大米 (2021-01-05 8:50)
评价: 3.7%
黑豆大米
帖子: 3
注册时间: 2021-01-04 16:32
送出感谢: 1 次
接收感谢: 0

Re: 获取鼠标所在文件窗口 文件路径

#3

帖子 黑豆大米 » 2021-01-05 8:50

astolia 写了:
2021-01-04 19:42
啥叫文件窗口?
x11环境下,如果进程在创建窗口时正确设置了_NET_WM_PID属性,就可以从中获取到进程id,然后从这个id入手。可以到/proc/pid/fd下面可以找进程打开的文件,也可以对进程进行调试。
如果是wayland环境,要看具体的compositor有没有提供类似获取pid的功能。
就是文件系统的界面操作,打开文件夹,显示的那个窗口。不过感谢提供一个思路,从pid入手查找。
头像
astolia
论坛版主
帖子: 4909
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 823 次

Re: 获取鼠标所在文件窗口 文件路径

#4

帖子 astolia » 2021-01-05 10:54

我有点怀疑这是一个 X-Y Problem
你为什么需要获取某个文件管理器窗口对应的路径?

要知道,文件管理器的种类可是非常多的。光ubuntu、xubuntu、kubuntu上默认使用的文件管理器都不一样。更何况不同的文件管理器的行为逻辑都不一样,你只看到了一个窗口对应一个路径的情况,还有一个窗口中包含多个标签页每个标签页对应一个路径、一个窗口分成多栏每一栏对应一个路径等等情况。如果你只考虑单一一种文件管理器的行为,那你的软件适用范围会非常窄。
黑豆大米
帖子: 3
注册时间: 2021-01-04 16:32
送出感谢: 1 次
接收感谢: 0

Re: 获取鼠标所在文件窗口 文件路径

#5

帖子 黑豆大米 » 2021-01-05 13:56

获取这个路径主要是想解决:从应用拖拽文件到文件管理器中,但因为这个源文件存储空间对于整个系统是不可见的,直接拖拽会执行系统拷贝,从而报错说文件拷贝不行。目前解决办法是,拖拽时源文件路径置空,避免系统拷贝,应用获取指向路径做拷贝动作。
因为Windows下是使用这个方法解决此问题的,就想着Ubuntu下是不是也可以按照同样思路解决问题。
头像
astolia
论坛版主
帖子: 4909
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 823 次

Re: 获取鼠标所在文件窗口 文件路径

#6

帖子 astolia » 2021-01-05 16:04

一个实现相对简单又通用的方案是,你在程序中实现一个最基础的http server,拖放时打开在127.0.0.1的监听,给uri-list里写上http://127.0.0.1:port/filename,文件管理器就会去尝试下载那个文件,你在http server里对这个路径的请求返回对应的数据就是了。我试了几个比较主流的文件管理器,都支持这种做法,虽然不同文件管理器发送的http请求细节上有些差异。只要http server实现了处理HEAD和GET请求,就能应付“复制文件”操作了,如果还处理了DELETE操作,那么连“移动文件”都可以做到
回复

回到 “软件/网站开发”