标签: hook

听另一个窗口调整C#中的事件

我正在实现一个小应用程序(观察者),需要将自己"附加"到另一个窗口的底部(观察到).后者不是应用程序内部的窗口.

此时我通过获取窗口的hWnd并在线程中定期查询观察窗口的位置来解决,相应地移动观察者窗口.

然而,这是一个非常不优雅的解决方案.我想做的是听取观察窗口的resize事件,以便观察者只在必要时做出反应.

我假设我应该使用一个钩子,并且我找到了很多方法,但是我对C WinAPI缺乏了解阻碍了我需要创建哪个钩子以及如何(pinvoke/parameters/etc).

我很确定这是非常简单的,你们中的一些熟悉C/C++和WinAPI就可以随时得到答案;)

谢谢

c# hook resize

21
推荐指数
2
解决办法
1万
查看次数

在Windows中为subversion编写钩子的最佳策略

Windows中Subversion编写钩子的最佳方法是什么?据我所知,只能使用可执行文件.那么最佳选择是什么?

  • 普通的批处理文件(非常有限,但对于非常简单的解
  • 专用编译的可执行应用程序(大锤要简单说一下?)
  • 其他一些混合选择(如运行Powershell脚本的批处理文件)

svn hook svn-hooks

20
推荐指数
2
解决办法
5852
查看次数

我如何勾选Perl的印刷品?

这是一个场景.您有大量遗留脚本,都使用公共库.所述脚本使用'print'语句进行诊断输出.脚本不允许任何变化 - 它们的范围广泛,得到了批准,并且早已离开了监督和控制的富有成效的山谷.

现在出现了新的需求:现在必须将日志记录添加到库中.这必须自动且透明地完成,标准库的用户无需更改其脚本.公共库方法可以简单地添加日志记录调用; 这是最简单的部分.困难的部分在于这些脚本的诊断输出始终使用'print'语句显示.必须存储此诊断输出,但同样重要的是,处理.

作为此处理的示例,库应仅记录包含"警告","错误","通知"或"注意"字样的打印行.下面的极其琐碎和被控制的示例代码(tm)将记录一些所述输出:

sub CheckPrintOutput
{
    my @output = @_; # args passed to print eventually find their way here.
    foreach my $value (@output) {
         Log->log($value) if $value =~ /warning|error|notice|attention/i;
    }
}
Run Code Online (Sandbox Code Playgroud)

(我想避免诸如"实际上应该记录什么","打印不应该用于诊断","perl糟透了"或"此示例有缺陷xy和z'等问题......这是为简洁和清晰而大大简化.)

基本问题归结为捕获和处理传递给print的数据(或任何perl builtin,沿着这些推理线).可能吗?有什么方法干净利落的吗?是否有任何具有钩子的记录模块可以让你这样做?或者它应该像瘟疫一样应该避免,我应该放弃捕获和处理打印输出?

附加:这必须运行跨平台 - 窗口和*nix相似.运行脚本的过程必须保持不变,脚本的输出也必须保持不变.

其他附加:在codelogic的回答评论中提出了一个有趣的建议:

您可以继承http://perldoc.perl.org/IO/Handle.html并创建自己的文件句柄来执行日志记录工作. - Kamil Kisiel

这可能会这样做,有两点需要注意:

1)我需要一种方法将此功能导出到使用公共库的任何人.它必须自动应用于STDOUT,也可能是STDERR.

2) IO :: Handle文档说你不能将它子类化,到目前为止我的尝试都没有结果.是否有任何特殊需要使子类化IO :: Handle工作?标准的'使用基础'IO :: Handle'然后覆盖new/print方法似乎什么都不做.

最终编辑:看起来像IO :: Handle是一个死胡同,但Tie :: Handle可能会这样做.感谢所有的建议; 他们都非常好.我将试试Tie :: Handle路线.如果它导致问题我会回来的!

附录:请注意,在使用了这个之后,我发现如果你没有做任何棘手的事情,Tie :: Handle会起作用.如果您使用IO :: Handle的任何功能与绑定的STDOUT或STDERR,它基本上是一个让它们可靠地工作的废话 - 我找不到一种方法来获得IO :: Handle的autoflush方法来处理我的绑定处理.如果我在绑上手柄之前启用了autoflush,它就能正常工作.如果这对您有用,可以接受Tie :: Handle路线.

printing perl hook tie

20
推荐指数
3
解决办法
6784
查看次数

使用SVN post-commit挂钩仅更新已提​​交的文件

我正在使用SVN存储库进行Web开发工作.我有一个开发站点设置,其中包含存储库的结帐.

我已经设置了一个SVN post-commit钩子,这样每当对存储库进行提交时,开发站点都会更新:

cd /home/www/dev_ssl
/usr/bin/svn up
Run Code Online (Sandbox Code Playgroud)

这很好但是由于存储库的大小,更新需要很长时间(大约3分钟),这在进行常规提交时相当令人沮丧.我想要的是将post-commit钩子更改为仅更新已提​​交的那些文件/目录,但我不知道该怎么做.更新"最低公共目录"可能是最好的解决方案,例如

如果提交以下文件:

  • /branches/feature_x/images/logo.jpg
  • /branches/feature_x/css/screen.css

它会更新目录:/ branches/feature_x /

任何人都可以帮我创建一个解决方案来实现这一目标吗

更新:

  • 存储库和开发站点位于同一服务器上,因此不应涉及网络问题.
  • CPU使用率非常低,I/O应该没问题(它在高规格的专用服务器上运行)
  • 开发地点约为.7.5GB大小,包含约.600,000项,这主要是由于有多个分支/标签

svn hook post-commit

20
推荐指数
2
解决办法
3万
查看次数

Discord 如何连接到特定进程的音频?

通过 Google 搜索结果,没有广为人知的方法可以从 Microsoft Windows 上的特定应用程序中捕获音频,至少不必求助于变通方法,例如将音频从一个进程发送到单独的虚拟音频环回设备(但这会导致无法听到声音,除非您使用硬件环回播放设备或通过主输出“收听”模拟输入)。

这些变通方法很笨拙,需要为每个特定应用程序进行配置,并且软件通常会出现错误行为,如果在执行期间更改其输出设备,则不再成功发出任何声音或直接停止工作。同时,推出Discord“实时流媒体”会话让您可以轻松无故障地与 VoIP 群组通话共享单个应用程序的声音。来自其他应用程序的声音被完全删除。看音频设备,似乎没有发生虚拟环回路由,客户端音频播放绝对零中断。该功能在 macOS 或 Linux 版本的软件上不可用,仅在 Windows 上可用。因此,在 Win32 中可以从特定进程捕获声音,但为什么其他人不这样做呢?比如说,在一个非常有用的软件分支中实现这样的东西需要什么,比如 OBS 或 Audacity?

audio hook winapi reverse-engineering

20
推荐指数
1
解决办法
1209
查看次数

CLR分析器:使用DefineAssemblyRef时出现问题

我想写一个CLR分析器来挂钩我们的应用程序功能GetILFunctionBody/SetILFunctionBody.

我想使用DefineAssemblyRef来导入我们的c#dll(用于IL代码),在这段代码中,DefineAssemblyRef总是返回True?我的dll必须签名吗?是否需要在全局程序集缓存(GAC)中安装?

     HRESULT CProfilerCallback::JITCompilationStarted
        (
        UINT functionId,
        BOOL fIsSafeToBlock
        )
    {
        ClassID classID;
        ModuleID moduleID;
        mdToken token;
        wchar_t wszClass[512];
        wchar_t wszMethod[512];
        HRESULT result = S_OK;
        ClassID classId = 0;
        ModuleID moduleId = 0;
        mdToken tkMethod = 0;

        // Get the moduleID and tkMethod    
        m_pICorProfilerInfo->GetFunctionInfo(functionId, &classId, &moduleId, &tkMethod);

        if(!GetMethodNameFromFunctionId(functionId,wszClass,wszMethod))
        {return S_FALSE;}


        if(wcscmp(wszMethod,L"FunctionName") == 0)
        {
            // Get the metadata import
            IMetaDataImport* pMetaDataImport = NULL;
            DebugBreak();
            result = m_pICorProfilerInfo->GetModuleMetaData
                (
                moduleId,
                ofRead, 
                IID_IMetaDataImport,
                (IUnknown** )&pMetaDataImport
                );


            if (FAILED(result)) …
Run Code Online (Sandbox Code Playgroud)

.net c# hook window clr-profiling-api

19
推荐指数
1
解决办法
831
查看次数

WH_KEYBOARD和WH_KEYBOARD_LL之间的区别?

两个人的工作有什么区别?因为WH_KEYBOARD_LL 我读到它安装了一个监视低级键盘输入事件的钩子程序.低级键盘事件是什么意思?

c c++ hook winapi wh-keyboard-ll

19
推荐指数
1
解决办法
9743
查看次数

WordPress的.Woocommerce.动作钩子在添加到购物车之前

我需要做什么: 我想在添加到购物车之前对产品进行一些检查. 更确切地说: 我想比较我即将添加到购物车的产品,以及已添加的产品,以查看是否存在一些冲突. 一个例子: 假设我们有一款名为"Both shoes"的产品和一款名为"左鞋"的产品.用户将"左鞋"添加到购物车.然后他加上"两双鞋".我想打印一个错误,而不是添加"两双鞋":对不起,但是如果你已经将左鞋添加到购物车中,则无法添加两双鞋.如果你想买"两双鞋",请先删除"左鞋".

我看过class-wc-cart.php,我在第811行发现了一个动作挂钩,但为时已晚!这是在产品添加之后

"do_action('woocommerce_add_to_cart',$ cart_item_key,$ product_id,$ quantity,$ variation_id,$ variation,$ cart_item_data);"

add_to_cart方法从第705行开始. http://wcdocs.woothemes.com/apidocs/source-class-WC_Cart.html#705

我的"产品冲突管理器"功能怎么能在第801行之前被吸引,而不会破坏woocommerce?

谢谢!

wordpress hook woocommerce

19
推荐指数
1
解决办法
2万
查看次数

有没有人得到mach_inject在雪豹上工作?

Project现在在github上,这是我的问题的链接

我成功地编译了整个事情并且能够分别运行拒绝者和拒绝者.但是,当向目标进程注入代码时,注入器将使注入器崩溃.

mach_inject_test_injectee.app 's standard output:
mach error on bundle load (os/kern) successful
mach error on bundle load (os/kern) successful
mach error on bundle load (os/kern) successful
mach error on bundle load (os/kern) successful
mach error on bundle load (os/kern) successful
FS rep     /Users/Malic/Documents/Code/c/mach_star/mach_inject_test/build/Development/mach_inject_test_injector.app/Contents/Resources/mach_inject_test_injected.bundle/Contents/MacOS/mach_inject_test_injected
LOADDDDDDDDDD!
Assertion failed: (0), function +[injected_PrincipalClass load], file     /Users/Malic/Documents/Code/c/mach_star/mach_inject_test/injected-PrincipalClass.m, line    25.
Abort trap
Run Code Online (Sandbox Code Playgroud)

mach_inject_test_injector的标准输出

injecting into pid 3680
injecting pid
mach_inject failing.. (os/kern) successful
mach inject done? 0
hi
Run Code Online (Sandbox Code Playgroud)

从输出看来,注射器没有通知注射器,任何想法?谢谢.

macos hook code-injection

18
推荐指数
1
解决办法
2447
查看次数

Jenkins CI使用错误的svn修订版进行构建

目前我正在使用Jenkins CI Server,我想通过svn post commit hook触发一个job/build.到目前为止,它按预期工作,但构建使用以前的svn修订版.

例如:我签入我的文件,客户端显示版本90,构建开始,但它使用89.

post-commit钩子看起来像这样:

UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
     --header "Content-Type:text/plain;charset=UTF-8" \
     --post-data "`svnlook changed --revision $REV $REPOS`" \
     --output-document "-" \
     --timeout=2 \
     http://ci-jenkins/job/Job1/build?rev=$REV 1>&2
Run Code Online (Sandbox Code Playgroud)

Jenkins中的签出策略配置为"始终签出新副本".怎么了?我仍然从那开始,并有很多东西需要学习.所以请记住这一点来回答我.:-)

svn hook continuous-integration jenkins

18
推荐指数
2
解决办法
8752
查看次数