我已经下载了一款名为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链接我收到错误:“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());
}
}
答案 0 :(得分:0)
你的引言位置错误:
system("start \"C:\\Program Files\\NCHSoftware\\Talk\\talk.exe\" -dial 5555555555");
答案 1 :(得分: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());
}
答案 2 :(得分:0)
最好的方法是使用Windows API。
查看MSDN文档中的CreateProcess()示例: