0

我已经下载了一个名为 Express Talk 的软件电话,该程序缺少的一件事是能够使用 sip 协议轻松单击拨号。所以我想我会尽力创建一个简单的 c++ 程序,它会接受点击的号码,然后将该信息传递给 Express Talk 以自动拨打号码,我尝试了一些通常会导致我死掉的事情结尾。我对 c++ 不太熟悉,所以希望这里有人可以帮助我找出问题所在,该文件位于 C:/Program Files/NCHSoftware/Talk/talk.exe 中。为了使用命令行拨打号码,我可以输入 /talk.exe -dial "5555555555" 这将打开程序并拨打号码。

该程序有效,名为 dial.exe(与 talk.exe 位于同一文件夹中):

    #include <stdlib.h>
    #include <windows.h>

    int main ()
    {
        system("start talk.exe -dial 5555555555");
    }

现在的问题:如果我指示 firefox (12.0) 处理到 dial.exe 的 sip 链接,然后尝试单击一个 sip 链接,我会收到错误消息:“Windows 找不到 'talk.exe'。确保您输入了正确的名称,然后再试一次”

在这一点上,我什至不关心将电话号码变量传递给talk.exe,因为我只想确保当我单击一个sip链接时它会打开。我想也许它很难找到talk.exe的原因是因为某种原因mozilla可能会改变程序的目录?我不太确定,所以现在我试图将talk.exe的完整路径放入程序中,所以我尝试了

    #include <stdlib.h>
    #include <windows.h>

    int main ()
    {
        system("start \"C:\\Program Files\\NCHSoftware\\Talk\\talk.exe -dial 5555555555\"");
    }

所有这些只是打开一个命令提示符窗口而不实际执行程序。当然,如果我能以某种方式在 Firefox 的应用程序窗口中传递参数,这一切都可以解决,但这是不允许的。任何人都可以帮助我调试吗?我只是不知道该怎么办了。

这是当前代码:

    #include <stdlib.h>
    #include <windows.h>
    #include <direct.h>
    #include <string.h>
    #include <string>


    //Written to implement click-to-dial functionality for soft phones (assuming softphones allow arguments to be passed to dial the phone.)
    int main ()
    {
        _chdir("C:\\Program Files\\NCHSoftware\\Talk\\");
    if (argc > 1 && _strnicmp(argv[1], "sip:", 4))
        { // match "sip:" prefix, case insensitive
     std::string cmd = "start talk.exe -dial " + std::string(argv[1]+4);
     system(cmd.c_str());
    }
    }
4

3 回答 3

0

你有你的报价在错误的地方:

system("start \"C:\\Program Files\\NCHSoftware\\Talk\\talk.exe\" -dial 5555555555");
于 2012-05-17T20:29:49.583 回答
0

Windows 命令处理器start命令有一个怪癖,使使用包含空格的命令行变得困难。

如果第一个参数包含在空格中,则将其视为标题,而不是命令。解决方案是提供一个带引号的虚拟标题:

system("start \"caption\" \"C:\\Program Files\\NCHSoftware\\Talk\\talk.exe\" -dial 5555555555");

或者,只需事先更改工作目录:

#include <direct.h>
#include <string.h>
#include <string>

_chdir("C:\\Program Files\\NCHSoftware\\Talk\\");
if (argc > 1 && _strnicmp(argv[1], "sip:", 4)) { // match "sip:" prefix, case insensitive
    std::string cmd = "start talk.exe -dial " + std::string(argv[1]+4);
    system(cmd.c_str());
}
于 2012-05-17T20:36:51.083 回答
0

最好的方法是使用 Windows API。

查看 MSDN 文档中的 CreateProcess() 示例:

http://msdn.microsoft.com/en-us/library/ms682512.aspx

于 2012-05-17T22:08:21.937 回答