2012年11月16日

パソコン監視

2008/02/10(Sun) 03:41
最近はいろんなアカウントをたくさん使うようになり、アカウント名やパスワードを入力することが多い。ほとんどの場合記憶させることができるが、モノによっては記憶できなかったり、同じサービスで複数アカウントを使用する場合があって、その場合は面倒である。そこで、リストを作ってそれをクリックするとクリップボードにコピーするものを作った。delphiではなく、VC++2008で。こないだ両方いれた後にシステムが不安定になって、delphiのせいかどうかはわからなかったがとりあえずアンインストールした。

delphiなら、リストからの選択もクリップボードへの格納もやったことがあるから、というかそういうものを作ったことがあるからすぐできるのだが、練習のためにVC++でやってみることにした。Windows Formアプリを選択してプロジェクトを作って、listboxを置いて、itemを編集する。ここまではdelphiと同じ。あとはlistboxのアイテムを選択したイベントでクリップボードにコピーすれば終わり。ヘルプやWEBを探してすぐにみつかった。

こうなってくると、もう言語なんかどうでもいい。ただ、あまり多様だと困る。
.NETのヘルプだと、basicとc#がメインで、サンプルはそれしかないものもある。
モノによってはC++, J#とかも載っている。.NETは開発言語がなんでもよいように独立して存在するフレームワークとしてつくられたのだろうが、それは便利かもしれないが、単純にアプリをつくりたい、という人にとっては、多様な言語が存在していることはかえって混乱の元になる。

2008/02/10(Sun) 04:10
同じものを別のPCのXPに入れてあるdelphi 2005で作ってみた。同じものをpascalで書いただけのものである。もっと進化させるとしたら、つねにクリップボードの履歴を保存するようにして、自動的にリストを更新して頻度の高いものが上に表示されたりできればいいな。

08/09/05(Fri) 20:35
basic
cobol
dbmagic
c
delphi(pascal)
vb(VBA)
java script
perl
php

phpは、自分のサイトの掲示板などで使用している。フリーの掲示板をさがしていて、よさそうなものがたまたまphpであっただけで、phpを勉強しようとかphpがいいとか考えて選んだわけではない。モノがよければソースなんかなくても、レンタルでもよかった。
そのうち、まずは色やフォントなどを変えるところから始まって、表示件数や入力可能文字数や行数などを変えたり、user agentをチェックしたりまでするようになって、最近ではこれ以外にプログラミングらしいことはほとんどしていない。delphiやvcは勉強のために自費で購入して、参考書も何冊か買って意気込んでいたが、今ではさっぱり使わなくなってしまった。アプリが皆WEB上で動くものになったからだろう。

08/09/26(Fri) 20:02
監視ツールのアイディア。携帯からメールを送る。監視対象のPCで、普通のメールクライアントのように、POPアクセスを定期的に実施して受信する。これはすでに経験済み。そして受信したら、デスクトップのキャプチャをとって、その送信元に対し、メールに添付して送信する。これが基本。

拡張機能として。メールのタイトルでも本文でもいいが、簡単な命令をできるようにする。たとえば「desktop」ならdesktopのキャプチャ。「CPU」ならcpu使用率や温度などの情報。「mem」なら空きメモリなどの情報。「hdd」なら空きディスク領域。「all」なら全部、とか。

キモは、普通のメールの送受信で監視すること。SNMPとかVPNとかいうものではない。

パフォーマンスは犠牲になるが、携帯電話でもネットカフェでもどこからでもいける。

08/09/26(Fri) 20:02
もうひとつの案は、あるサイトに定期的に情報をアップロードし続ける。こっちの方が簡単かな。見るだけなら簡単そうだ。ここまでできると、操作したくなる。多分、任意の文字列をコマンドラインで実行して結果を得るのは可能だろう。GUI操作までしようなんてことは考えない。ただWEBを見るだけでも高くて敬遠しがちなのに、PCの遠隔操作なんて、そういうソフトもあるようだが・・・。

shutdownやリブートくらいは多分楽勝・・・かな?
xpではできたが、vistaはその辺厳しくなってるかもしれない。

やっぱりメールが簡単でいい。文字数もかなり入るし、画像も、ウィンドウを特定すれば多分、文字が読めるくらいの画質は送れる。

デスクトップ監視については、一定間隔で自分のサイトに画像を転送して、リフレッシュさせてそれを見に行ったほうがいいかな

08/09/27(Sat) 02:12
Delphi2007 for Win32をインストールして、Update3をあてて、とりあえずFTPバージョンを作った。bitbltでデスクトップをキャプチャし、stretchbltで半分のサイズに縮小してjpgで保存して、それをFTPでアップロードする。携帯で見ても、文字まで読める。

08/09/27(Sat) 10:39
indyをダウンロードしようとしかけてできなかったので思い出したのだが、2007 ではindyコンポーネントが正式にVCLとして最初から組み込まれている。

08/09/27(Sat) 10:41
次は、いよいよ遠隔操作である。メールを受信してその内容により特定の動作をする。indyのサーバを使えば直接何かできそうな気もするが、NAT越えがめんどくさそうなので、とりあえずは、メールで。

08/10/18(Sat) 05:38
いま、あるものを作ろうとしている。イメージとしては、リモートデスクトップやVNCのようなもの。携帯でも使えればベター。操作は後回しでもいいから、とりあえず自宅のPCを監視したい。

とりあえずやってみたのは、デスクトップにTVを全画面表示させてキャプチャしてJPGで保存し、それをFTPで自分のサイトにアップロードすること。
5秒間隔でキャプチャ&アップロードし、HTMLファイルも5秒間隔でリフレッシュする。これなら、電波状況が最悪なときのワンセグ放送程度に、内容は把握できる。とびとびの静止画像だが、モザイクのようにならない分、ワンセグよりもいいくらいだ。
だが5秒だとちょっと遅い。ちなみに携帯だと、5秒のリフレッシュはきつくて、「表示できません」というエラーが出ることがあり、そうなるとリフレッシュがとまる。再度画面を手動で更新すると再度リフレッシュが始まる。携帯の場合は10秒くらいが限界のようだ。

以前連続キャプチャをやった時には、10フレーム/secくらいまでが限界だった。それでさらに通信を行うのだから、フレーム数はもっと下がるだろうと考えている。

だが、ディスクに書き込まずに直接相手に送信すればどうだろう?もしかしたらTCP/IP(UDP?)通信のほうが、ディスクアクセスよりは速かったりするのでは?

08/10/18(Sat) 05:41
bitbltした画像を、ファイルに保存するのではなく、そのまま相手に送る。
ファイル転送ならFTPが使えるが、自分側でも相手側でもファイルとして保存しなければならない。TFTPにしたら少しは速いかな?

08/10/18(Sat) 07:46
とりあえず、UDPの使い方から。CODEZINEにサンプルがあった。が、サンプルをそのまま貼り付けて動かないのがいつものこと。そこから苦闘が始まる。
今回の問題は、TIdUDPServerの、TUDPReadEventの引数の型が、サンプルと違っていたことである。
サンプルは2005年のもので、indy9を使っている。そしてDelphi2007は10だ。その違いだと思う。
indy10ではこうなっている。
TUDPReadEvent = procedure (Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle) of object;
indy9では、ADataがTStreamだったようである。

そのため、受信したデータを表示させるところがサンプルどおりに行かなかった。
いろいろと調べた結果、以下のようにキャストするだけで解決した。
Memo1.Lines.Add(String(AData));

文字列の処理という基本的なところがわかっていない。
delphiにはstringという便利なものがあって、ポインタなども使わなくてもたいていのことはできる。

だが、APIやライブラリを使うときに、型の不一致で悩むことになる。

08/10/18(Sat) 07:48
さて、IndyのUDPの使い方自体はたいしたことはなかった。
次は、これをテキストでなく、画像でやってみる。1枚の絵を送って表示させることができれば、もう私のやりたいことはできたも同然である。

08/10/18(Sat) 08:20
いや、それだけではダメだ。画像ファイルの転送であれば、型なしファイルとして読み、一定のサイズごとにバッファにためて、それをUDPでsendbufferしてやればよいのだろう。

しかし、私がやろうとしているのは、bitbltで取得したbitmapを、ファイルに出力せずにそのまま相手に転送し、相手側もそれをファイルに保存することなくそのままbitmapとして表示することである。

・・・無理か?

08/10/18(Sat) 08:22
つまりそれって、「ストリーミング」だよね?動画配信とかと同じ事だよね?


posted by delsoli at 18:26| delphi | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。