忍者ブログ

Home

溺れる者はUWSCを掴め!

[PR]

  • 2024-05-17 (Fri)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

  • Comments (Close):

ADODB.Streamを使ったダウンロード

  • 2011-12-05 (Mon)
  • 実用スクリプト

ADODB.Streamを使ったダウンロードのサンプルを作ってみました。IEのダイアログを使った方法でもいいんですがいちいちダイアログが出る分時間が掛ります。画像など連続でダウンする場合はこちらの方がいいかもです。但し、ブラウザベースじゃないと弾かれる場合もあるので適材適所で使い分けを。(※弾かれた場合も一応ファイルは作られる)

IEのダイアログ版はこら
溺れる者はUWSCを掴め! - IEでサイトからダウンロード

//------------------------------------------
//動作環境 XPsp3,IE8で確認
//---------------<書式>-------------------
//      AdoDownLoad(ファイルのURL[,保存先フルパス,保存名,上書き設定])
//      ※[]内省略可

//------<初期設定>-------
PUBLIC Stream=CreateOLEObj( "ADODB.Stream" )
PUBLIC oHttp=CreateOLEObj("MSXML2.XMLHTTP")
PUBLIC defalt_over_w=false   //上書き初期設定(上書きする:True しない:false)
//------</初期設定>------

//---------------<sample 1>-------------------

url="http://***.com/007.jpg"   //ダウン先
dl_pas="C:\Down"      //保存場所のフルパス
dl_name="sample.jpg"   //保存名
over_w=false

AdoDownLoad(URL,dl_pas,dl_name,over_w)

//---------------<sample 2>-------------------

//URL以外デフォルト設定の場合
url="http://***.com/007.jpg"   //ダウン先
//※ファイル名は最後の"/"以下になる

AdoDownLoad(URL)


//--
Procedure AdoDownLoad(url,dl_pas="",dl_name="",over_w=defalt_over_w)
   sleep(1)
   ifb dl_name=""
      dl_name=Betweenstr(url,"/",,-1)
   endif
   ifb !(dl_pas="")
      ifb !(copy(dl_pas,Length(dl_pas))="\")
         dl_pas=dl_pas+"\"
      endif
   endif
   dl_pas=dl_pas+dl_name
   oHttp.Open("GET",url,0)
   oHttp.Send
   GetStream(oHttp.responseBody,dl_pas,dl_name,over_w)
Fend
//--
Procedure GetStream(obj,dl_pas,dl_name,over_w)
   ifb over_w
      over_w=2
   else
      over_w=1
   endif
   Stream.Open
   Stream.Type=1
   Stream.Write=obj
   COM_ERR_IGN
      Stream.SaveToFile(dl_pas,over_w)   
   COM_ERR_RET
   Stream.Close
Fend

IEでサイトからダウンロード

  • 2011-12-03 (Sat)
  • 実用スクリプト

ファイルのアップロードを作ったのでついでにダウンロードも作ってみようという事でそのサンプル

追記12/21:サンプルの最後の行Fendが抜けてました<(_ _)>

ちなみにアップロードの方はこちらで
溺れる者はUWSCを掴め! - IE8でファイルのアップロード

//------------------------------------------
//動作環境 XPsp3,IE8で確認
//---------------<書式>-------------------
//      右クリックから保存などの場合使用
//      IEDownLoad(IE,ファイルのURL[,保存先フルパス,保存名,上書き設定])
//      ※[]内省略可

//---------------<sample 1>-------------------

url="http:/****.****.com/down/test.txt"
dl_pas="C:\Down"      //保存場所のフルパス
dl_name="sample.txt"   //保存名
over_w=false         //上書きする:True しない:false

IEDownLoad(IE,URL,dl_pas,dl_name,over_w)

//---------------<sample 2>-------------------

//URL以外デフォルト設定の場合
url="http:/****.****.com/down/test.txt"

IEDownLoad(IE,URL)



//--
Procedure IEDownLoad(IE,URL,dl_pas="",dl_name="",over_w=true)
   IE.Navigate2(URL,"&H800")
   Repeat   //反応が悪いのでダイアログが消えるまで繰返す
      dl=getid("ファイルのダウンロード","#32770", -1)
      Ctrlwin(dl,ACTIVATE)
      sckey(dl,VK_S)
      sleep(1)
   Until getid("ファイルのダウンロード","#32770")=-1
   SaveDialog(dl_pas,dl_name,over_w)
Fend
Procedure SaveDialog(dl_pas="",dl_name="",over_w=true)
   dl=getid("名前を付けて保存","#32770", -1)
   ifb dl_name=""
      dl_name=getstr(dl)
   endif
   ifb !(dl_pas="")
      ifb !(copy(dl_pas,Length(dl_pas))="\")
         dl_pas=dl_pas+"\"
      endif
   endif
   dl_pas=dl_pas+dl_name
   Sendstr(dl,dl_pas)
   Clkitem(dl, "保存(S)")
   sleep(2)
   sub=getid(GET_ACTIVE_WIN,"#32770", -1)
      ifb pos("上書きしますか?",getstr(sub,1,4))>0
         ifb over_w
            sckey(sub,VK_Y)
         else
            sckey(sub,VK_N)
            Clkitem(dl, "キャンセル")
         endif
      endif
   dl=getid("完了しました","#32770")
   ifb !(Chkbtn(dl,"ダウンロードの完了後、このダイアログ ボックスを閉じる"))
      sckey(dl,VK_C)
   endif
   dl=getid("ダウンロードの完了","#32770")
   Clkitem(dl, "閉じる")
Fend

IE8でファイルのアップロード

  • 2011-11-19 (Sat)
  • 実用スクリプト

IE8以降からはセキュリティの関係でファイルアップロードのファイル指定をDOM操作等で出来なくなっている。

こういうやつ→ 

ファイル指定をするには参照ボタンを押してダイアログ経由からUPするわけだが今後も汎用的につかうと思われるのでユーザー関数を作成しておくといい。

今回はそのサンプル

//------------------------------------------
//動作環境 XPsp3,IE8で確認
//---------------<sample>-------------------

file="C:\001.Jpg"//アップするファイルのフルパス
name="upfile"    //参照ボタンのnameが"upfile"の場合
IEupload(IE,name,file)

//---------------</sample>-------------------



//--ダイアログ用スレッド起動&参照ボタンクリック
Procedure IEupload(IE,name,file)
   Thread FileupDialog(file)
   doc=IE.document
   COM_ERR_IGN
   for i=0 to doc.forms.length-1
      for ii=0 to doc.forms(i).elements.length-1
         ifb doc.forms(i).elements(ii).name=name
            doc.forms(i).elements(ii).click()
            Break 2
         endif
      next
   next
   COM_ERR_RET
Fend
//--ダイアログファイル選択&ボタンクリック
Procedure FileupDialog(file)
   id = Getid("アップロードするファイルの選択","#32770",-1)
   sleep(1)
   Ctrlwin(id,ACTIVATE)
   Sendstr(id,file,1,True)
   Clkitem(id,"開く(O)")
Fend

Home

Search
Meta
Links
Feeds
PR
PR

Page Top