HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0219
まけちゃ「右クリック⇒対象をファイルに保存」を自動でできませんか?6解決


まけちゃ

リンク

2012/2/19(Sun) 18:45:55|NO.44970

HSPの初級者です。ちょっと試しに下のようなスクリプトを組んでみました。(何の役に立つかはわかりませんが)
この中の「o->"click"」は左クリックですが、ここを「「右クリック⇒対象をファイルに保存」にはできませんでしょうか?


#include "user32.as" #const WM_LBUTTONDOWN $00000201 ; マウス左ボタンを押し下げ #const WM_LBUTTONUP $00000202 ; マウス左ボタンを離した #const WM_SETTEXT $0000000C OyaPage="http://hsp.tv/play/pforum.php?mode=all&num=44655" Savename="hsp33_hspinet_binary-v3a.zip" ItemNo=31 newcom ie, "InternetExplorer.Application" ie->"navigate" OyaPage ie("Visible") =1 repeat wait 100 if ie("Busy")=0:break loop doc=ie("Document") repeat wait 10 if doc("readyState")="complete":break loop o = ie("Document") o = o("links") o = o("item",ItemNo) o->"click" ;---------------------------- repeat 2 ;***** 2つ目の「ファイルのダウンロード」ダイアログのハンドル取得 ***** repeat wait 100 gsel 0,1 FindWindow 0,"ファイルのダウンロード" PWnd2=stat :mes "PWnd2 = "+PWnd2 :if PWnd2!0 :break loop loop repeat ;***** 「保存」ボタンのハンドルを取得して、クリック ***** wait 100 FindWindowEx PWnd2,0,"Button","保存(&S)" cWnd1=stat :mes "cWnd1 = "+cWnd1 :If cWnd1!0 :break loop wait 100 BringWindowToTop PWnd2 wait 100 SendMessage cWnd1,WM_LBUTTONDOWN,0,0 ; //マウスの左ボタンを押す SendMessage cWnd1,WM_LBUTTONUP,0,0 ; //マウスの左ボタンを離す ;---------------------------- repeat ;***** "名前を付けて保存"ダイアログのハンドル取得 ***** wait 100 BringWindowToTop PWnd2 gsel 0,1 FindWindow 0,"名前を付けて保存" PWnd3=stat :mes "PWnd3 = "+PWnd3 :If PWnd3!0 :break loop repeat ;***** 「ファイル名」を変更するためにエディットのハンドルを取得して、変更 ***** wait 100 FindWindowEx PWnd3, 0, "ComboBoxEx32","" ;ダイアログ-->ComboBoxEx32-->ComboBox-->Editの3段になっている cWnd4=stat :mes "cWnd4 = "+cWnd4 :If cWnd4!0 :break loop wait 100 BringWindowToTop PWnd3 wait 100 BringWindowToTop cWnd4 wait 100 SendMessage cWnd4,WM_SETTEXT,0,Savename repeat ;***** 「保存」ボタンのハンドルを取得して、クリック ***** wait 100 FindWindowEx PWnd3, 0,"Button", "保存(&S)" cWnd3=stat :mes "cWnd3 = "+cWnd3 :If cWnd3!0 :break loop ; ★★★ 下のコメントを外すと、ダウンロードしちゃいます。★★★ ; SendMessage cWnd3,WM_LBUTTONDOWN,0,0 ; //マウスの左ボタンを押す ; SendMessage cWnd3,WM_LBUTTONUP,0,0 ; //マウスの左ボタンを離す mes "-------- END ----------" :stop ;----------------------------

他にも、もっと直した方が良い部分があったら、教えて頂けると幸いです。



この記事に返信する


Cookies

リンク

2012/2/19(Sun) 20:44:13|NO.44975

IEは長らく使ってないからよく覚えてないですけど、
対象をファイルに保存、って、結局HTML(以外でも)を保存するということですよね?
それなら docu ment. links. item ( Item No ) . hr ef をとってきて、
それをダウンロードするんじゃだめでしょうか。
そのほうがIEやOSのバージョンアップも関係なしにできるかな、とか。



Cookies

リンク

2012/2/19(Sun) 20:46:12|NO.44976

↑ですが、documentとhr efとかとぎれてるのは、
なにかNGワードだったらしく、規約違反とか言われたので。
これを見るとhr efっぽい。



まけちゃ

リンク

2012/2/20(Mon) 21:06:36|NO.44998

Cookiesさん、アドバイスをありがとうございます。
ただ、ウェブサイトの中には、親ウィンドウでのクリックでないとリンクが落ちないところがあったりして、そういうとこを全自動で落とせないかなぁ、と。
docu ment.links.item(Item No).hr ef は、落としたいファイルの位置を知る時に0から羅列させて使いました。
"+{f10}a"を使うとできる(?)みたいなのを見つけましたが、素人な私の知識ではHSPへの組み込みはできませんです。
何か良い方法をご存知なら教えて頂けると幸いです。



Cookies

リンク

2012/2/20(Mon) 23:28:38|NO.45010

>"+{f10}a"
それはですね、たぶんJScriptやVBScript等で使われてるキー入力の表記の仕方です。
(J/VBScript以外でも使われてるのかもしれないけど…)
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1117663471
わかりやすく書けば

Shift + F10 してから Aキーを押す
という感じではないでしょうか。
しかしIEでやると「全てを選択」になって、どうすれば保存につながるのか見当がつきませんが…
コピーしてクリップボードを取得しろと?

>親ウィンドウでのクリックでないとリンクが落ちないところがあったりして
それはRefererによる制限ではないでしょうかね。
Refererなら結構簡単に解決(hspinetで)できるんですが、他だったら面倒ですね。
いっそclickしてアクセスしてから、
Ctrl+Sで「名前を付けて保存」のほうが右クリックするより楽じゃないでしょうか。



まけちゃ

リンク

2012/2/21(Tue) 22:27:33|NO.45026

Cookiesさん、解説をありがとうございます。
私が見つけた"+{f10}a"はVBscriptです。sakuraさんの蔵にHSPにVBscriptを組み込む例がありましたが、私の能力では、それとIEオブジェが繋げられない気がしてて、HSPでダイレクトにそれを使う方法があるといいのに、と。(IEでやると「全てを選択」になるなんてなると、私ではもはや…)
hspinetは、私も一応netloadはかなり使ってて、さらにADODBも試してますが、それでも稀に自動では落とせないものがあって、今は、半手動で諦めてますが、
でも、IEはちゃんと落としてるじゃんと思い、何とかIEでの動きを再現したつもりの冒頭のスクリプトまでは作り、うまく落とせるようになったものもあります。
さらに「右クリック⇒対象を…」ができたら、どのサイトのものでも落とせる「究極のダウンローダー」かなと勝手に思ってるだけです。(パスワードや変文字入力が必要なとこはまた別ですが)
とにかく今はもう、HSPで「右クリック⇒対象をファイルに保存」が、(そこそこに短い行数で)できるのかどうかが知りたい思いなのです。
どうなのでしょうか?



まけちゃ

リンク

2012/2/26(Sun) 12:19:23|NO.45064

やっぱり、だめですか。(あるいは、私の目的がバレバレで引かれてしまわれたのか…)
仕方ないので、とりあえず、マウスボタンを本当に右クリックする命令を利用して、下記のように作り変えてみました。
「IEの自動スクロール」と「IEのステータスの取得」のやり方が見つかったので、滅多矢鱈にクリックして正しいコンテキストメニューが開いたかどうかを確認しなくても良く、かろうじて使えるものなのかと思っています。
※なお、下記は、マウスの本当の位置に依存するので、私のパソコンでは流れますが、他のパソコンでは、少なくとも「scrollx0値」とかを適当に変えないといけないと思います。


#include "user32.as" #const WM_LBUTTONDOWN $00000201 ; マウス左ボタンを押し下げ #const WM_LBUTTONUP $00000202 ; マウス左ボタンを離した #const WM_SETTEXT $0000000C #define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}" #define DISPID_STATUSTEXTCHANGE 102 ;---------------------------- screen 0,640,480,0,0,0 ;---------------------------- OyaPage="http://hsp.tv/play/pforum.php?mode=all&num=44655" DLfile="http://tkooler.moe.hm/hsp/img/hsp33_hspinet_binary_v3.zip" Savename="hsp33_hspinet_binary-v3a.zip" scrollx0=1800 :pointx0=600 :pointy0=400 ;---------------------------- newcom ie, "InternetExplorer.Application" ie->"navigate" OyaPage ie("Width") =1050 ie("Height") =900 ie("Left") =150 ie("Top") =10 ie("Visible") =1 repeat :wait 100 :if ie("Busy")!0 :loop doc=ie("Document") repeat :wait 10 :if doc("readyState")!"complete" :loop ;---------- ; ***** スクロールさせながら目的のリンクを探して、見つけたら本当のクリック ***** pDoc = ie("Document") pPW = pDoc("parentWindow") pPW->"scrollBy" 0,scrollx0 comevent ie_event, ie, DIID_DWebBrowserEvents2,*event repeat 30 mouse_event $8000 | $1, 65535/1240*pointx0, 65535/980*pointy0, 0, 0; カーソル移動 wait 200 pPW->"scrollBy" 0,8 if ct=9 :break loop if ct!9 :mes "***** 位置がちゃう! *****" :stop mouse_event $8 | $10, 0, 0, 0, 0; 右ボタンクリック mouse_event $1, 17, 13, 0, 0 wait 50 mouse_event $2 | $4, 0, 0, 0, 0; 左ボタンクリック ;---------------------------- repeat ;***** "名前を付けて保存"ダイアログのハンドル取得 ***** wait 100 BringWindowToTop PWnd2 gsel 0,1 FindWindow 0,"名前を付けて保存" PWnd3=stat :mes "PWnd3 = "+PWnd3 :If PWnd3!0 :break loop ;---------------------------- repeat ;***** 「ファイル名」を変更するためにエディットのハンドルを取得して、変更 ***** wait 100 FindWindowEx PWnd3, 0, "ComboBoxEx32","" cWnd4=stat :mes "cWnd4 = "+cWnd4 :If cWnd4!0 :break loop wait 100 BringWindowToTop PWnd3 wait 100 BringWindowToTop cWnd4 wait 100 SendMessage cWnd4,WM_SETTEXT,0,Savename ;---------------------------- repeat ;***** 「保存」ボタンのハンドルを取得して、クリック ***** wait 100 FindWindowEx PWnd3, 0,"Button", "保存(&S)" cWnd3=stat :mes "cWnd3 = "+cWnd3 :If cWnd3!0 :break loop ; ★★★ 下のコメントを外すと、ダウンロードしちゃいます。★★★ ; SendMessage cWnd3,WM_LBUTTONDOWN,0,0 ; //マウスの左ボタンを押す ; SendMessage cWnd3,WM_LBUTTONUP,0,0 ; //マウスの左ボタンを離す mes "-------- END ----------" :stop ;---------------------------- *event ;***** IEのステータスを取得するサブルーチン ***** dispid = comevdisp(ie_event) if dispid = DISPID_STATUSTEXTCHANGE : gosub *OnStatusExtchange return *OnStatusExtchange comevarg status,ie_event,0 if status=DLfile :delcom ie_event :ct=9 :mes status return ;----------------------------

こんなとこで、私としては、解決、とすることにします。(だめ?)
ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.