テキストファイルを見て室温変化の経緯を調べるのではなく、単純に今の計測値を直ぐに得たいこともあるよね
結論からいうと、sshクライアントを外部起動して、標準出力される結果を得るという流れです。大昔に触れたPopen()を使います。
これですね。Popen.hとPopen.cppを得ておきます。さて、ssh.exeを起動して室温計測結果を得てみましょう。テストともいふ。前の記事で作った公開鍵があるディレクトリで、Bashを起動します。

ここの何もないところで、”得意の右クリック”です。

上図のように“Open Git Bash here”を選択。
docna@Lavie-note MINGW64 ~/Dropbox/common-keys
$ ssh -i id_ed25519 nao@192.168.0.220 ./rtemp.sh
Sat 25 Jul 13:42:52 JST 2026, 28.1875
起動すべきコマンドは、
ssh -i id_ed25519 nao@192.168.0.220 ./rtemp.sh
でおけです。ただし念のために、sshは絶対パスで起動しましょうかね。その確認は、
$ which ssh
/usr/bin/ssh
/usr/bin/sshはCygwinの記法なので、普通のWindowsのパスでは、
"C:\\Program Files\\Git\\usr\\bin\\ssh.exe"
となります。C++のリテラルなので、\が2個で\1個ですね。これにパラメータを付けて、コマンドライン全体は、
ret = Popen("C:\\Program Files\\Git\\usr\\bin\\ssh.exe","-i ./id_ed25519 nao@192.168.0.220 ./rtemp.sh",rc);
Label1->Caption = IntToStr((int)rc);
Memo1->Lines->Add(ret);
でよいでしょう。さて、ほぼこれだけですね。フォームは、

Unit1.hは省略して、Unit1.cppは、
#include <vcl.h>
#pragma hdrstop
#include "Popen.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Memo1->Lines->Clear();
}
//---------------------------------------------------------------------------
/* String Popen(const String command,const String arguments,DWORD& rc); */
void __fastcall TForm1::GetTempClick(TObject *Sender)
{
String ret;
DWORD rc;
ret = Popen("C:\\Program Files\\Git\\usr\\bin\\ssh.exe","-i ./id_ed25519 nao@192.168.0.220 ./rtemp.sh",rc);
Label1->Caption = IntToStr((int)rc);
Memo1->Lines->Add(ret);
}プロジェクトにPopen.hとPopen.cppを忘れずに追加して、build and runすると、

ここで“GetTemp”をクリックすると、

のように今の室温計測結果が得られます。Label1の所の”0″はPopen()の戻り値です。ssh.exeの戻り値が0ということですね。以前にiosのショートカットを使う例をいくつか示しましたが、このケースでももちろん使えます。
等を参照してください。工夫すると秘密鍵暗号鍵を使ってsshすることもできようですが、今は簡易的にパスワード使います。

上図のように、最後尾に”シェルスクリプトの結果”を表示を付けます。テストのために右下右向き矢印をクリックすると、

よさそうなので、ホーム画面に追加して、

いつでも値がわかります。手近なWindowsマシンが起動してなく、iPhone持っていればワンクリックで直ちに結果が得られて大変便利です。




コメント