なお対象OSはWindowsXPを実使用予定でいますので、Visual C++2008Expressエディション(NetFramework3.5)が主となります。使用PC依存によります。Visual C++2010Expressエディション(NetFramework4.0)は使いません。ただし後で時間があれば試したいと思っています。(2010での他のNetFrameworkの選択は可能ですが...)
【ハムログ起動プログラム】
名前空間を記述します。(ヘッダー宣言部)
using namespace System::Diagnostics;
private: System::Void button11_Click(System::Object^ sender, System::EventArgs^ e) {
Process^ ps = gcnew Process();
ps->StartInfo->FileName = "Hamlogw.exe";
ps->StartInfo->WorkingDirectory = "C:\\Program Files\\HAMLOG2011-1";
ps->EnableRaisingEvents=true;
textBox6->Text="Hamlogw.exe ACTIVE!";
bool bSuccess;
bSuccess = ps->Start();
while (!ps->HasExited)
{
Application::DoEvents();
}
textBox6->Text="Hamlogw.exe finish";
}
【起動プログラム説明】
psをマネージドタイプでインスタンス化します。
ProcessStartInfoクラスを使用してFileNameプロパティでアプリを指定します。
同様にWorkingDirectoryプロパティでハムログのあるパスを指定します。
ここで注意しなければならないのが、私も間違えてエラーを最初だしてしまいましたが、階層の記号「¥」を一つしか書かないとエラーが出ます。「\」は2つ必要です。
ProcessEnableRasingEventsをtrueに設定してプロセスが終了したときにイベントを発生させる設定をします。
ProcessStartでアプリケーションを起動します。
プロセスの起動状態はHasExitedプロパティで判断します。詳しい説明は先のブログにありますので確認してみてください。以上がプログラムでアプリケーションを起動するコードですが、起動したら、次はアプリを止める方法です。
【ハムログ強制終了プログラム】
private: System::Void button12_Click(System::Object^ sender, System::EventArgs^ e) {
//アプリケーションの強制終了
array<Process^>^ ps = Process::GetProcessesByName("Hamlogw");
for each (Process^ item in ps)
{
item->Kill();
}
}
【強制終了プログラム説明】
これはこういうものだということでおまじない的にそのまま使います。
プロセスの名前を指定してそれをkillで強制終了させます。
以上で起動ボタンでハムログが立ち上がります。起動した画像も載せました。この状態でフォーム上からのUSBIOコントロールもハムログも問題なく動作しています。
ついでなのでフォーム上に時計をフォーム読み込み時に表示させました。私の作業時間が何時頃かがわかります。案外深夜から朝方が多いかも。今日のステップは終了します。次はなににしようかしらん!