是否可以在运行特定命令时禁止MessageBox?

时间:2016-11-14 10:35:27

标签: c++ batch-file svn

我使用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 - 但有没有人做过这种事情?

2 个答案:

答案 0 :(得分:0)

我认为你以错误的方式解决这个问题。不要试图压制TortoisePlink显示的对话框,而是使用original Plink。 TortoisePlink是Plink的一个分支,用于在命令行中明确显示消息框和打印任何内容,因为它是为UI应用程序设计的,而不是为控制台应用程序设计的。

如果您真的只想从批处理文件中使用svn,请不要使用TortoiseSVN,而应使用原始的svn命令行客户端(也可以使用TSVN安装程序安装)并使用' svn& #39;命令行命令。

答案 1 :(得分:-1)

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,它使用minimalistic hook for 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"

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

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