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

Is it possible to suppress MessageBox when running a specific command?

本文关键字:MessageBox 命令 运行 是否      更新时间:2023-10-16

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

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

它们以消息框的形式出现,需要终端用户点击。

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

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

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

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

和重写MessageBoxA/MessageBoxW -但是有人做过这种事情吗?

我觉得你处理这件事的方式不对。而不是试图抑制对话框,TortoisePlink显示,使用原始的Plink。TortoisePlink是Plink的一个分支,用于显式显示消息框和而不是在命令行上打印任何内容,因为它是为UI应用程序而不是为控制台应用程序设计的。

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

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

http://www.chiark.greenend.org.uk/sgtatham/腻子/download.html

请注意"TortoiseSVN"> "Settings"> "Network"> "SSH Client"应该使用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 FilesTortoiseSVNbin .

我试图使一个命令行工具来抑制消息框,但它是无用的TortoisePLink.exe(还没有调试什么是问题),但如果你感兴趣(有其他方法使用它):

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

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

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

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

一般来说,TortoisePlink.exe会显示messagebox -但是当像这样执行时:

mbSupress.exe "C:Program FilesTortoiseSVNbinTortoisePlink.exe"

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

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