こんにちは、誰かがプログラムの実行コマンドの後で終了しないJSLスクリプトを見つけましたか?私は見通しが開かれているかどうか、そして開かれていないかどうかを判断しようとしています。 これが私のコードです。 任意の助けがいただければ幸いです。
Names Default To Here( 1 ); // Make sure variables are stored in this procedure
Clear Log(); // Clear the JMP Log - Select View - Log
// Get the current windows processes (process list) using teh wmic.exe
windowsProcesses = RunProgram(executable("wmic"),options({"process list"}),
readfunction(function({this},write(this<<READ></READ>本当に助けに感謝します。 私はJMPの非常に新しいユーザーです、そしてこのコミュニティは私が今まで見たことから本当に良いです。
これでいくらか成功するかもしれません。私はこれまでにさまざまな成功を収めてきました開始 JMPからプログラムを切り離します。
rp=RunProgram(Executable("cmd.exe"),options("/C start outlook.exe"))
RunProgramが外部プログラムを起動し、ReadFunction( "text")を使用しない場合、外部プログラムを管理するためにRunProgramオブジェクトがJSLに返されます(この例ではrp)。そのオブジェクトが破壊されると、rp = 0となります。おそらく、それをJSL変数に入れないことで、JMPは外部プログラムが完了するのを待ちます。もし開始見通しを切り離すと、rp << IsReadEOFは1になります。
ReadFunction( "Text")もRunProgramを待機させ、便宜上、オブジェクトではなくすべての出力を返します。
ドリュー、
wmic.exeが読み込まれていないので、使用することに興味はありません。 エラーがwmicまたはoutlookで発生しているかどうかについては言及しませんでした。
Run Program()は外部実行ファイルを実行し、コマンド(オプション)を実行します。Outlookが実行されたときにプログラムに制御を戻すコマンドがなかったため、制御がJMPに戻されないことを期待しています。 念のためOpen()を使用することをお勧めします。 述べたように、私はwmic.exeを使っていません。1つのコマンドを実行して終了しますか、それともセッションを開いたままにしますか?これにより、Run ProgramがJMPに制御を戻すこともありません。
とにかく、以下はtasklist.exeを使ったスクリプトです。
また、万が一他の人がこのスクリプトを使用したい場合に備えて、where.exeを使用してOutlook.exeのパスを見つけるためのコードを含めました。私は32ビットのOutlookも持っていますが、私の道はあなたの道とは異なりました。 outlookpathが表示されるまで3秒間待ちます。そのキャプションコードは削除することができます。
Names Default To Here( 1 ); // Make sure variables are stored in this procedure
Clear Log(); // Clear the JMP Log - Select View - Log
//find outlook
outlookpath = "";
cmd1 = "\[/c where /R "C:\Program Files (x86)" OUTLOOK.EXE]\";
rp0 = RunProgram(Executable("CMD.EXE" ),
Options({Eval(cmd1)}),
Read Function("text")
);
outval = words(Trim(rp0), "\!n");
if(StartsWith(outval[1], "C:\Program Files"), outlookpath=outval[1]);
//only run this if not found
if (outlookpath =="", //try for 64 bit version of excel
cmd1 = "\[/c where /R "C:\Program Files" OUTLOOK.EXE]\";
rp0 = RunProgram(Executable("CMD.EXE" ),
Options({Eval(cmd1)}),
Read Function("text")
);
outval = words(Trim(rp0), "\!n");
if(StartsWith(outval[1], "C:\Program Files"), outlookpath=outval[1] );
);
if(outlookpath =="", Caption("Cannot find Excel ... aborting"),
Caption( "Outlook path is: "|| outlookpath) );
wait(3);
caption(remove);
//_____________________________________________________________________________
windowsProcesses = RunProgram(executable("CMD.exe"),options({"/c tasklist /FI \!"IMAGENAME eq outlook.exe\!""}),
readfunction("text")
);
/* to get a list of all processes just use /c tasklist */
show(windowsProcesses);
//
// Check if outlook is open by searching the log file
openYesNo = If(contains(lowercase(Trim(windowsProcesses)),"outlook"),1,0);
// Open Outlook if it is currently closed
If( openYesNo == 0,
Open(outlookpath)
);