【问题标题】:Is it possible to suppress MessageBox when running a specific command?运行特定命令时是否可以抑制 MessageBox?
【发布时间】:2016-12-03 15:29:01
【问题描述】:

我使用 Tortoise SVN 和 TortoisePlink 进行远程 ssh 连接。 TortoisePlink 有时会显示如下错误:

---------------------------
TortoisePlink Fatal Error
---------------------------
Network error: Software caused connection abort
---------------------------
OK   
---------------------------

它们显示为消息框,需要最终用户点击。

我尝试通过从命令行使用 -batch 来抑制消息框,但问题仍然可以重现。对我来说,如果我禁用消息框提示并在命令行中打印相同的信息就足够了 - 因为我的批处理稍后会自动重试。

是否存在这样的软件可以覆盖默认窗口行为并在控制台窗口中打印消息框中显示的任何内容。

我想用最简单的术语来说,这样的命令行工具可以很容易地创建,例如使用

http://www.codeproject.com/Articles/44326/MinHook-The-Minimalistic-x-x-API-Hooking-Libra

并覆盖 MessageBoxA / MessageBoxW - 但是有人做过这种事情吗?

【问题讨论】:

  • 如果您觉得幸运,您可以直接更改TortoisePlink code
  • 啊,不知道那个代码在哪里。让我稍后检查。谢谢顺便说一句!
  • 当然它需要一些windows的依赖,不能直接编译。

标签: c++ batch-file svn


【解决方案1】:

我认为你的做法是错误的。不要试图抑制 TortoisePlink 显示的对话框,而是使用original Plink。 TortoisePlink 是 Plink 的一个分支,用于显式显示消息框并且在命令行上打印任何内容,因为它是为 UI 应用而不是控制台应用设计的。

如果你真的只想从批处理文件中使用 svn,不要使用 TortoiseSVN,而是使用原始的 svn 命令行客户端(也可以使用 TSVN 安装程序安装)并使用命令中的“svn”命令行。

【讨论】:

  • 我使用 Tortoise SVN 进行自动 svn 更新 - 所以我需要将它作为一个批次使用。是的,我为此使用 svn 命令。但除此之外,我还使用 TortoisePLink 来支持 svn+ssh:// 协议。
  • 改用'svn up /path/to/workingcopy'。 TortoiseSVN 是一个 UI 客户端,它不适用于批处理。然后配置Plink而不是使用TortoisePlink。
  • 据我所知,它旨在用于批处理 - 甚至存在 -batch 命令行参数。但是我在哪里可以得到 Plink.exe 来代替 windows 呢?
  • 可以将它用于批处理,但是您必须期望 UI/对话框会出现。 TSVN 中的命令行开关旨在用于自动化 UI,而不是完全无人看管的使用。
  • Windows 上 Plink 的链接在我原来的答案中。
【解决方案2】:

TortoisePLink.exe 是针对最终用户的 - 因此它旨在显示消息框,但是 - 也存在 PLink.exe 的命令行版本,它可以从这里下载:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

请注意“TortoiseSVN”>“设置”>“网络”>“SSH 客户端”应该使用 TortoisePLink.exe - 错误将显示给最终用户。

但是对于以下文件 -

%appdata%\Subversion\
file ‘config’:
In section [tunnels]
Add line like this:
ssh = Plink.exe  -l <your login> -pw <password>

您应该使用命令行版本的 PLink.exe(启动时也会显示命令提示符)。

接下来用 TortoisePLink.exe 保存 PLink.exe 比较容易,也就是进入 C:\Program Files\TortoiseSVN\bin.

我曾尝试制作一个用于抑制消息框的命令行工具,但它对 TortoisePLink.exe 没用(尚未调试出问题所在),但如果您有兴趣(有其他方法可以使用它) :

https://sourceforge.net/p/diagnostic/svn/HEAD/tree/Tools/msgboxSupress/

msSupress.cpp 被编译成 .dll,它使用 Windows 的简约挂钩来禁用 MessageBoxA 和 MessageBoxW - 实际上它们将被打印到控制台或重定向到文件。

msSupressExe.cpp 被编译成 .exe 并以挂起模式启动进程,用 EB FE 替换 .exe 的入口点(跳转到自身),等待到达该地址,注入 .dll 和 .dll 将挂钩新过程。

我只在 64 位平台上进行了测试 - 我怀疑正在执行的命令必须与 msSupress.exe 匹配相同的平台。

所以通常 TortoisePlink.exe 会显示消息框 - 但是当像这样执行时:

mbSupress.exe "C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe"

消息框上显示的内容将显示在控制台中。

我认为这个解决方案是进一步构建病毒或特洛伊木马的良好原型 - 使用这样的技术甚至可以拦截任何应用程序上的键盘按下 - 但我现在制作了一个命令行实用程序,而不是病毒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2018-09-28
    • 2021-05-15
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多