0

Express Talk というソフトフォンをダウンロードしましたが、このプログラムに欠けているのは、sip プロトコルを使用して簡単にクリックしてダイヤルできることです。だから私は、クリックされた番号を受け入れ、その情報を Express Talk に渡して番号を自動ダイヤルする単純な C++ プログラムを作成するために最善を尽くそうと考えました。終わり。私は 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 リンクをクリックしようとすると、次のエラーが表示されます。してから、もう一度やり直してください」

この時点では、電話番号の変数を 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 に答える