イメージ 1

イメージ 2

C++/CLIのプログラムはコントロールを使ってプログラミングしている限りVBやVCとあまり違いがないのがとても嬉しい。今回は以前作成したVBでのハムログ制御のVC++版をやってみようとおもっている。色々と制御以外のC++特有の処理とかが必要となるだろうけれどもまずはトライの精神で臨みます。プログラムも追加追加での対応なので、段々と拡張していき、フォームが大きくなっていきます。画面に収まっている時点では追加体制で、ある程度、機能がそろった時点で、新たに専用プログラム化することを一応目標としました。何かしらの目標がないと続かないと思って、まずは次のステップということで、アプリケーションの起動をプログラムで行います。もちろん対象のアプリケーションは、かの有名なハムログWINです。まずは買ってきてあるかんたんVC++のあらすじ読みてきなシェル系の目次をサーチし、次にインターネットでの検索サーチ、次から次とそれらしき資料が出てくるは、出てくるは、試してみるとエラーが出る。こんなことの繰り返しである。ところが、すばらしいネットの参考ブログかあった。今は伏せておくが、ヒントとして「IT.***」である。案外かゆいところへ手が届いていて私の性格にすんなりあった読みやすいし動作も間違いがないとてもすばらしいブログであると思う。とにかく検索すればすぐわかると思う。とにかく使えるサンプルがたくさんあるところが一番である。まずはさておいて、実際のアプリケーションを起動するプログラムコードは、Processを用いたものです。まずはそのセンテンスを以下に書きます。ハムログ起動のコマンドボタンのコードの中に書きます。
なお対象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コントロールもハムログも問題なく動作しています。
ついでなのでフォーム上に時計をフォーム読み込み時に表示させました。私の作業時間が何時頃かがわかります。案外深夜から朝方が多いかも。今日のステップは終了します。次はなににしようかしらん!