如何实现 “Reveal in Finder” 的功能

Sublime、VSCode 这些编辑器都有一个 “Reveal in Finder” 的功能(macOS 是 Finder, Windows 下是 “Reveal in Explorer”, Linux 下是 “Open Containing Folder”),就是针对某个文件,使用系统默认的文件管理器打开其所在目录,并选中该文件。 大部分文件管理器的命令都有打开目录并选中指定文件的参数。所以要想在自己的程序中实现类似功能,只需要: 找到对应系统的文件管理器命令。macOS […]

使用 QLocalSocket 与 QLocalServer 实现程序的单实例运行。

之前在 这篇文章 中,曾用 QSharedMemory 实现了 QT 程序的单实例运行。 除此之外,还有一种方式是使用 QLocalSocket 与 QLocalServer 实现。 与 QSharedMemory 相比,QLocalSocket 更麻烦一点,因为需要第一个运行的进程启动 QLocalServer 来监听后续进程的连接。 但也因为如此,它比 QSharedMemory

macOS 下 pyinstaller 报错 “Error while signing the bundle … … .DS_Store files cannot be a symlink”

今天在 macOS 下使用 pyinstaller 打包程序的时候,遇到一个 codesign 签名的错误。 Error while signing the bundle。我一开始还以为是签名证书的问题,还按照 https://stackoverflow.com/a/68937623/5777080 这里的答案新建了一个自签名的 code signing 证书。但是依然报同样的错误。 其实这个报错的原因是在第二句话:.DS_Store files cannot

SQLServer 重置表的自增值

1 简单语句 1.1 查询自增值 SELECT IDENT_CURRENT(‘TABLE_NAME’) 1.2 重置自增值 DBCC CHECKIDENT(‘TABLE_NAME’, reseed, 10086)  // 将表 TABLE_NAME 的自增值重置为 10086 DBCC CHECKIDENT(‘TABLE_NAME’, reseed) 

CTF Writeup: from_sqli_to_shell_i386

今天给单位的小年轻讲网络安全课程,用了 from_sqli_to_shell_i386 这个靶机。题目简单,iso 文件又小,很适合入门。 这个靶机上有一个网站。先找到网站的 SQL 注入点;然后通过 SQL 注入获取 admin 帐号密码;再使用 admin 用户登录,发现有文件上传的模块;通过文件上传漏洞上传木马文件,获取系统执行权限。Done 👌   贴一下详细的解题过程: 1. 先用下载到的 from_sqli_to_shell_i386.iso 文件新建一个虚拟机

Qt: QTreeView 可视区域内节点判断与滚动事件

这两天遇到两个问题: 1、对于一个 QTreeView,如何判断一个节点的 QModelIndex 是否处于 QTreeView 可视区域内。当 QTreeView 中有太多节点,必然有些节点是处于可视区域外部的,不显示的。QTreeView 也不会对这些不显示的节点调用 itemdelegate.paint() 方法。 2、如何获取 QTreeView 内容的滚动事件。 不只是对 QTreeView,所有的 QAbstractItemView 派生类,包括 QListView,

Python 创建线程安全的单例

之前在文章《深入理解 Python 中的类与元类》中讲了使用 __new__() 方法可以很方便地实现单例模式。但其实那段代码是线程不安全的。 验证代码如下: import threading import time class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if

Qt: 自定义 QWidget 响应 StyleSheet 样式

1. 必须重写 paintEvent() 根据官方文档的说明,如果希望自定义的 QWidget 派生类能够响应 StyleSheet 中定义的样式,就必须用如下代码重写 paintEvent() 方法。(其实应该叫做实现 paintEvent(),因为 QWidget::paintEvent() 本来是个空函数,啥都没做) 换成 Python + PySide6 语法就是: class CustomWidget(QWidget):

QWidget 鼠标事件穿透

假设现在有两个重叠显示的 QWidget 部件,widget_1 与 widget_2。二者无父子关系,只是位置重叠,widget_1 在 widget_2 之上,如下图所示。 这个时候如果鼠标点击在 widget_1 上,widget_2 是不会响应鼠标事件的。因为事件被位于上层的 widget_1 捕获了。 如果我们想让鼠标事件穿透 widget_1,由 widget_2 捕获。就可以给 widget_1 设置

Scroll to Top