问题标签 [hook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
668 浏览

c# - 如何在 C# 中挂钩多个窗口?

我正在尝试创建一个应用程序,使窗口(应用程序外部)在失去焦点时透明。大多数事情(获取窗口 id、设置透明等)都很容易,除了一件事 - 我如何挂钩窗口?

0 投票
2 回答
2089 浏览

linux - 拦截子进程文件系统活动的方法

我有一个用 C 语言编写的小型命令行应用程序,它充当其他程序的包装器/启动器(想想:xargs)。该应用程序是为在 FreeBSD/Linux(通过 fork()/exec())和 Windows(CreateProcess())上编译而编写的。除了能够拦截、注入或以其他方式操作子应用程序的命令行参数之外,我想知道是否有一种简单的方法可以拦截子程序的文件系统活动(或者它的子程序,等等)。我主要对读取或写入访问的文件名感兴趣,而不是所述文件的内容,并且希望拦截尽可能轻量级。

在谷歌搜索上面的一些相关关键字时,似乎在 Win32 中有很多方法可以做到这一点。从文件系统过滤器驱动程序到篡改 PE 导入表头。这些似乎都不是微不足道的,或者我可以在我的包装程序的可执行文件中独立包含的东西(例如,大多数都需要额外的 DLL 或驱动程序文件以及主可执行文件。)此外,如果可能的话,我希望它能够在 Windows XP 到 7 上工作,而无需破解 UAC 或其他平台增量。这是我的子进程,所以我认为我应该能够安全地监控它的活动:)

在 Linux 上,有 inotify(),但它监视一般文件系统访问,而不只考虑我的子进程/es。FreeBSD 的 kqueue() 也是如此。在 SMP 情况下,这些情况也会出现问题,其中包装器的多个实例可能正在运行不同的程序,并且每个实例都需要消除它们自己子文件系统活动的歧义。

我当然会感谢 SO 社区可能必须提供的任何建议。

0 投票
3 回答
322 浏览

java - 当方法生成 std​​err 时,如何将信息添加到 STDERR?

当一个方法生成对 STDERR 的写入时,有什么方法可以捕捉到吗?我正在尝试在每次 STDERR 写入时预先添加一些信息。

假设我们的方法是:

它会产生类似的东西

第 37:29 行在字符“a”处没有可行的替代方案

我可以用一些可以捕获要写入的 stderr 的东西来包装它并预先附加一些信息,所以它看起来像这样:

文件:mybadfile.txt——第 37:29 行在字符“a”处没有可行的替代方案

我知道我可能可以深入研究编写 STDERR 的实际代码,但我真的不想这样做——我宁愿只在这个方法周围包装一些代码。

我应该注意,这种方法并不总是生成 STDERR——我试图捕捉它们的原因是它不应该生成任何 STDERR——但是因为它在很多文件(超过 40 个)上被调用,所以我永远不知道哪个文件正在生成错误消息——它需要很长时间才能找到。

更新 所以是的,我们可以更改我们的 STDERR - 我只是忘记了我需要在我的新 STDERR 中覆盖我的 println ......这是相关代码:

然后对于我正在测试的每个文件,我所要做的就是将 errfile 更改为文件名,并且我的输出结果符合预期......

多谢!

0 投票
2 回答
3596 浏览

windows - windows mobile 5 或更高版本(智能手机平台)中的全局键盘挂钩,如何?

所以,我想我必须用 C++ 来做,有人知道这个问题吗?我已经到处搜索了,我发现了一些关于 windows ce 上的键盘挂钩的文章,windows mobile 是 windows ce,不是吗?另一个问题:我可以使用哪个免费的编译器,适用于 windows mobile 的 ide?

0 投票
3 回答
946 浏览

svn - 预更新 svn 脚本以过滤得到的内容

想象一个包含多种文件的存储库。然后,我想从这个存储库中获取“过滤过程”中的某种文件。

我的意思是所有文件都是版本化的。但是对于我的本地工作,我只想获取 *.php 文件,而忽略下载 *.jpg。

我想到了客户端钩子脚本(更新前)。有谁知道这是否可能?

谢谢!

0 投票
6 回答
490 浏览

c++ - 检测何时将对象传递给 C++ 中的新线程?

我有一个对象,我想跟踪引用它的线程数。通常,当调用对象上的任何方法时,我可以检查线程本地布尔值以确定当前线程的计数是否已更新。但是,如果用户说使用 boost::bind 将我的对象绑定到 boost::function 并使用它来启动 boost::thread,这对我没有帮助。新线程将引用我的对象,并且在调用它的任何方法之前可能会无限期地持有它,从而导致过时的计数。我可以围绕 boost::thread 编写自己的包装器来处理这个问题,但是如果用户 boost::bind 的对象包含我的对象(我不能根据成员类型的存在进行专门化——至少我不知道有什么方法可以做到这一点)并使用它来启动 boost::thread。

有没有办法做到这一点?我能想到的唯一方法需要用户做太多工作——我提供了一个围绕 boost::thread 的包装器,它在传入的对象上调用一个特殊的钩子方法,前提是它存在,并且用户将这个特殊的钩子方法添加到任何类包含我的对象。

编辑:为了这个问题,我们可以假设我控制了制作新线程的方法。所以我可以包装 boost::thread 例如并期望用户会使用我的包装版本,而不必担心用户同时使用 pthread 等。

Edit2:也可以假设我有一些可用的线程本地存储方法,通过__threadboost::thread_specific_ptr。它不在当前标准中,但希望很快就会出现。

0 投票
4 回答
518 浏览

drupal - 如何在用户页面中执行请求目的地

我正在尝试重定向任何登录的用户尝试访问 /user。

在我的模块中,登录后要重定向的下一个代码:

这是有效的。然后我尝试使用case 'view':但它没用。

0 投票
4 回答
416 浏览

c++ - KeyboardProc 返回 TRUE 会导致性能下降

我正在为游戏的附加组件开发一个界面。我不能使用游戏 API(有几个原因,包括代码必须与游戏无关),我需要从用户那里获取键盘输入,所以我决定使用键盘挂钩 (WH_KEYBOARD) 来处理用户满足特定条件时输入。
问题是,虽然我可以正确接收和处理输入,但当我的钩子返回 TRUE 而不是CallNextHookEx时,系统似乎需要花费大量时间(远超过 800 毫秒)才能让事情按预期进行,这是不可接受的,因为它甚至不允许流畅的打字体验。
我必须实现的是阻止按键消息到达 WndProc,所以问题是:我可以做些什么来实现我的目标,而不会对游戏性能造成太大影响,以至于结果将是不可接受的?
编辑:由于特定要求(使用反作弊的游戏,尽管它与作弊无关,但可能会对我的代码造成问题)对活动的 wndproc 进行子类化不是一种选择。

0 投票
1 回答
421 浏览

python - 如何在twisted.web(或twisted.web2)中添加钩子?

如何在处理 twisted.web 上的请求之前和之后添加一个钩子(twisted.web2 也可以)?相当于 webpy 的:

谢谢!

0 投票
2 回答
3441 浏览

php - 在 Git 预提交 Hook 上从 STDIN 读取(使用 PHP)

我正在寻找一种git-commit等待标准输入的方法。我正在对此进行编码PHP,因为我的bash技能不存在,所以我想经常做

会做的伎俩,并等到我写东西继续,但它只是继续并继续执行我的PHP脚本。

这背后的想法是,在我标记发布后,git 将推HEAD送到测试网络服务器,发送几条推文,然后让我在 CHANGELOG 中写下有关发布的一些细节。

虽然我可以实现对文件的写入(使用exec('mate -w')),但我希望它一直保持下去,直到我在服务器上进行快速测试。如果我发现任何错误(懒惰,我知道),这将使我能够回滚。

谢谢你的帮助!