2009年2月アーカイブ

ブラウザ操作

| コメント(4)

いろいろ試しながらやっているためか、思ってた以上に進捗が悪い。
VBAで先に作って、どのオブジェクト使用しているのかを追ってから
VCに移植した方が早いかもしれない。
まぁ、いいや。じっくりやろう。

何かの役に立てばと思い、購入。
VCの本はないかねぇ。

つまずいたところを備忘録として遺しておきます。
【備忘録】
・前回のプログラムは、VISTA専用。XPで使うにはOSによる切り分けが必要。どっかで考えんといかん。
・ラジオボタンはフォーカス当ててからクリックしないと動かない。(チェックボックスもかな。
コンボボックスは動くのに・・・)
・各コントロールのvalueアトリビュートは0オリジン。(クリック証券のHTMLソース上は1オリジンで書かれている)
・nameアトリビュートを持つForm用のコントロールはnameをキーにした検索可能。書いてないのは、ループして検索しないといけなさそう。
・アンカーは、要素をループして検索するしかなさそう。(nameアトリビュートを持っていない?)

今週中に、売買できるようにしたかったが・・・。まぁ、来週にはできるだろう。
できたら、次はリアルタイム株価の取り込みだ。
まだまだ先は長い。

クリック証券が、Webサービス終了しやがった。
今年1月にWebサービス使うことを目的に口座開いたばっかなのに(怒)。
このAPIがあると、自動発注のプログラムが非常に簡単にできるんだよね。
1日あれば、実装できると見込んでいたのに・・・。5倍は時間かかりそうだ。
APIを使わずに、自動発注するにはブラウザ(IE)を制御するプログラムを
作らなければならない。
しょうがないのでクリック証券ので作り始めたのだが、早速はまりまくっている。
Windows VistaのIEのセキュリティで「保護モード」っていうのがあって、
通常こいつが有効になっている。
こいつが、ブラウザ制御の邪魔をする。ムカッ。
無効にしてやればいいんだけど、それじゃあねぇ・・・。
いろいろ調べていると、こちらに解決方法が。
でも、使用言語が違うので(VBをVCに直してやる必要あり。)、一苦労。
同じようにShell.ApplocationからWindows()メソッドで、
Windowsのインタフェイスを取得するまではいいんだけど、
VCはWindowsインタフェイスを基底クラスのIDispatchPtrで取得するので、
Windowsインタフェイスのポインタ型にダウンキャストしてやらなあかん。
これ、VBでWindowsって書いてあるんで普通にMSDNで探すと
EnvDTE::Windowsのポインタにキャストすればいいと思うよね。
しかし、キャストするとNULLで返ってくる・・・。EnvDTE80::Windows2とかも試してみるがダメ。
よくよく、そのページ読んでると、Windowsの要素(WindowsはWidowのコレクションね)である
WindowがIEオブジェクトとして動いていることに気付く。
ってことは、IEオブジェクト用のコレクションがあるはずと。
そこでもう一度、IE関係のオブジェクトがあるSHDocVwを見てみるとIShellWindowsというのを発見。
ようやく、解決したのでした。
同じように、悩む人出てくるかもしれないので、一応ソース載せときます。
その1のほうです。
その2の方はIEオブジェクトが存在しなくても0で返ってこない。
つまり、IE以外のオブジェクトも返ってきてるので、Itemの最後のインデックスをそのまま使うわけにはいかない。
ItemにIEのWindow追加してやればうまくいくのかな。ってそれなら、その1と変わらんか。
ってわけで、気が向いたらやるけど、こっちも気が向くことはないだろう・・・。

Shell32::IShellDispatchPtr pShell;
HRESULT hr = pShell.CreateInstance(__uuidof(Shell32::Shell));
if(FAILED(hr)){
return false;
}
SHDocVw::IWebBrowser2Ptr pIE;
hr = pIE.CreateInstance(__uuidof(SHDocVw::InternetExplorer));
if(FAILED(hr)){
return false;
}

//IEの表示
pIE->PutVisible(VARIANT_TRUE);
pIE->Navigate(_T("http://www.yahoo.co.jp/"));
pIE->Quit();
::Sleep( 100 );

SHDocVw::IShellWindowsPtr ptr = pShell->Windows();
long lCnt = ptr->GetCount();
pIE = ptr->Item(lCnt-1);
//ページが表示されるまで待つ
while( pIE->Busy == VARIANT_TRUE || pIE->ReadyState != READYSTATE_COMPLETE )
::Sleep( 100 );

Visitor Status

| コメント(0)

MT(MovableType:このブログ作るやつね)のVisitor Status
というプラグインをいれてみたが、動いていないみたい・・・。
チラッとソース見てみると、DBがMySQLじゃないとダメみたい。
現状使ってるのはSQLLite。
はぁ・・・。気が向いたら、DB変えよう。
当分、気が向くことはないけど。

ここのところ、週末は自作ソフト開発のため
プログラム作成に勤しんでいます。
なんで、更新頻度落ちてます・・・。

自作のソフト作るのって、大学時代以来かな。
(ExcelVBAとかでちょっとしたものは作ってるけどね。)
当時、N88Basicでドラクエの戦闘のルーチン真似て作ってた。
最初にプログラミング始めたのは、小学生頃のファミリーベーシックだけどね。
小学生なんでBasicのこと何にも分かってなかったけど
マニュアル見ながら打ち込んだプログラムが動いたときはうれしかったものだ。

今はVC++使って、コード書いてるけど
やっぱ、HTTP通信系はPHPとかと比べると断然に弱いなぁ。
(弱いって言うのは使い勝手が悪いってことね。)
Javaにしておけばよかったかな。まぁいいや。

どんなソフト作ってるかはここでは公開しないけど、
ブログの更新は落ちますってことで。
いろいろ調べながらやってるんで、
知り得たことを、書いてもいいけど
ほとんどの人が、今回書いたことですら、何言ってんのか
わからんだろうからやめときます。

プロフィール

よっしー
  
  
フリーでSEをやっています。よろしくお願いします。

2016年4月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最近のコメント