クリック証券WebサービスAPI終了

| コメント(2)

クリック証券が、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 );

コメント(2)

う~ん、相変わらず難解な内容ですな。コメントできませーん。

まぁ、技術者向けだから。
一般人には無理だと思うわ。

IE8も出てきたし。
製品化はまた遠のく・・・。

コメントする

プロフィール

よっしー
  
  
フリーで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