purbam 发表于 2015-1-7 16:37:44

请问mush中如何用简单方法实现zmud中的#mess?

本帖最后由 purbam 于 2015-1-7 06:12 PM 编辑

因为不方便使用声音,所以希望实现弹窗,并且是在mush最小化时仍然能够弹出
zmud中可以使用#mess,mush中也找到个类似的lua自带函数utils.msgbox,不过似乎限制在mush窗口内,不能在mush最小化时弹出到桌面。

cappuccino 发表于 2015-1-7 19:03:00

回复 1# purbam


    呃(⊙o⊙)…

标准MUSH命令里好像没太有这么人性化的设定?(我不太了解……)

这里提供一个不那么原生的方法,利用MUSH的os.execute()函数,执行DOS指令,用弹出的cmd控制台窗口进行提示,具体代码是:

os.execute("echo 密信来了!&pause")

cappuccino 发表于 2015-1-7 19:16:20

楼主刚发这个帖子的时候我就看到了,只是刚刚才想到解决方案。。
感谢楼主,让我在思考这个问题的时候想通了另一件困扰自己很久的事情,关于未来有了一个新的决定^_^

purbam 发表于 2015-1-7 20:22:23

回复purbam


    呃(⊙o⊙)…

标准MUSH命令里好像没太有这么人性化的设定?(我不太了解……)
...
cappuccino 发表于 2015-1-7 07:03 PM http://pkuxkx.com/forum/images/common/back.gif

看来还是要用系统命令,不过我没想到利用dos窗口,这样就简单多了,差点去研究脚本的gui kit..
太感谢了{:7_277:}

littleknife 发表于 2015-1-8 15:40:54

MUSH系统发声可参考如下代码:只能是英文。

require "luacom"
      talk=luacom.CreateObject("SAPI.Spvoice")
      function speak(str)
                talk:speak(str);return
      end
speak("Master has gaven you a letter!")

rubbie 发表于 2015-2-22 15:03:37

umsgbox

supertu 发表于 2015-2-23 14:04:32

本帖最后由 supertu 于 2015-2-23 02:07 PM 编辑

无论通过LUA对COM或者DLL调用系统的MessageBox函数,都能实现最小化窗口后的弹窗。
只是过程要稍微麻烦点,需要用到COM封装知识或者遵循LUA对DLL调用Cfunction的规范。

下面以DLL调用为例:

int msgbox(lua_State* L)
{
    const char* message = luaL_checkstring(L, 1);
    const char* caption = luaL_optstring(L, 2, "");
    int result = MessageBox(NULL, message, caption, MB_OK);
    lua_pushnumber(L, result);
    return 1;
}


很明显看出是调用了系统自带的MessageBox的函数。



测试环境为 WIN7 64bit + Mushclient4.94 + GNU GCC

purbam 发表于 2015-2-23 16:22:22

恩,我现在用Perl,perl里面直接通过Win32::MsgBox模块调用系统messagebox还是挺方便的
use Win32;
sub MyNote {
my $msg = "$_";
Win32::MsgBox("$msg",0x40000,"Warn");
}
0x40000就是让messagebox总在最前

supertu 发表于 2015-2-23 17:00:39

条条道路通罗马。

kaimenman 发表于 2015-6-5 00:13:58

问题来了,js里面应该如何搞呢?
页: [1] 2
查看完整版本: 请问mush中如何用简单方法实现zmud中的#mess?