Editに入力した文字列を既定のブラウザのアドレス部に入力し
移動させる方法が知りたいのですがなかなかわかりません
例:
Editに javascript:function~~ と入力し
ButtonをクリックするとIEのアドレス部にEditに入力した文字が入り
javascriptが実行される
このようなものを作りたいのですが
分る方ご教授ください
簡単にいうと
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', PChar('http://www.yahoo.co.jp/'), '',
PChar(ExtractFilePath(Application.ExeName)),
SW_SHOW);
end;
>PChar('http://www.yahoo.co.jp/')
これを
PChar('abcdefg')
という感じでhttp://がついてなくてもブラウザで開くようにしたいのですが
どうすれば出来るのでしょうか?
http:// が付いていなくても wwww.yahoo.co.jp でブラウザは開く事はできますが?
>ButtonをクリックするとIEのアドレス部にEditに入力した文字が入り
>javascriptが実行される
セキュリティ上、「javascript:……」というURLを許すのは危険だ、
ということで、現在のブラウザでは実行出来ないjavascriptがあるよ。
もうすこし簡単な質問に直しますと
IEの開いてるページでjavascriptを実行させるにはどうすればいいんでしょうか?
大雑把な質問で良くわかりませんが...
JavaScriptを実行するのであれば
<body onLoad="〜〜〜">
のような、何かイベントが必要じゃない?
的を絞らないと誰もわからない・・・
質問内容があいまいですいません
実際に行いたい例を言うと
http://miwa.offside.ne.jp/topics/javascript/youtube_bookmarklet.html
このサイトにあるYOUTUBEの動画をDLするjavascriptを
Delphiでボタンをクリックすると実行してダウンロードできるような
プログラムを作りたいと思っています
(なぜか今このスクリプト使えない?
>(なぜか今このスクリプト使えない?
そうだね。既にそのスクリプトが参照しているURLは無効。
別の方法を探るべき。
youtubeDL以外にもこういうjavascriptをボタンで実行できるようにしたいのですが
その方法わかる方いないでしょうか?
FindWindowでIEのハンドル取得
FindWindowExでアドレス入力Editのハンドル取得
SendMessageでWM_SETTEXTを送る
SendMessageでWM_KEYDOWNを送る
でどうですか?
これでOK
procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
begin
h := FindWindow(PChar('IEFrame'), nil);
h := FindWindowEx(h, 0, PChar('WorkerW'), nil);
h := FindWindowEx(h, 0, PChar('ReBarWindow32'), nil);
h := FindWindowEx(h, 0, PChar('ComboBoxEx32'), nil);
SendMessage(h, WM_SETTEXT, 0, lParam(PChar(Edit1.Text)));
h := FindWindowEx(h, 0, PChar('ComboBox'), nil);
h := FindWindowEx(h, 0, PChar('Edit'), nil);
SendMessage(h, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(h, WM_KEYUP, VK_RETURN, 0);
end;
真琴:「カイトさん、JavaScriptでダウンロードって難しいの?」
海都:「ン〜ん… ブラウザは IE限定になっちゃうンだけどネ、こんな感じ」
procedure TForm1.Button1Click(Sender: TObject);
var
ShellWindow: IShellWindows;
IE: IWebbrowser2;
spDisp: IDispatch;
k, iPos: Integer;
scrpt, sVID: string;
begin
ShellWindow := CoShellWindows.Create;
for k:=0 to ShellWindow.Count do begin
spDisp := ShellWindow.Item(k);
if spDisp = nil then Continue;
spDisp.QueryInterface(IWebBrowser2, IE);
if IE <> nil then begin
// 事前に起動しておいたIE上に 目的のYouTube動画サイトを表示
// IE.Navigate('http://www.youtube.com/watch?v=hYHtcJxPOWE', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
// IE.Navigate('http://www.youtube.com/watch?v=ki8wxIHGFlM', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
IE.Navigate('http://www.youtube.com/watch?v=3dkxTbJd63I', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
while IE.ReadyState < READYSTATE_INTERACTIVE do begin
Sleep(10);
Application.ProcessMessages;
end;
// 動画ダウンロード
iPos := Pos('http://www.youtube.com/w', IE.LocationURL);
if iPos > 0 then begin
sVID := Copy(IE.LocationURL, Pos('?v=', IE.LocationURL)+3, 11);
// scrpt := 'javascript:window.open(%22http://ash-v98.ash.youtube.com/get_video?video_id='+ sVID +'%22);';
// scrpt := 'javascript:window.open(%22http://ash-v167.ash.youtube.com/get_video?video_id='+ sVID +'%22);';
scrpt := 'javascript:window.open(%22http://chi-v167.chi.youtube.com/get_video?video_id='+ sVID +'%22);';
IE.Navigate(scrpt, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
break;
end;
end;
end;
end;
真琴:「ふ〜ん、これでアタシたちの動画がダウンロード出来ちゃうのね」
広海:「開いてるIEが一つじゃなかったら、どうすんのかなぁ?」
海都:「あぁ、もしそういう場合なら、LocationURLで指定出来るから」
春子:「ねぇ、カイトさん、これって、別に JavaScript使わなくてもいいんじゃない?」
海都:「うん、そうなんだけどね、JavaScript使いたいという質問だから、あえて…」
真琴:「いま使ってるの IE6だけど、IE7でも大丈夫なの? Vistaでは?」
海都:「ここのパソコン古くてそれは試せないけど、IE7ではJavaScriptのURLはダメかもしれない」
**:「イヤァ、ジツはオレもな、そうじゃないかと思ったんだけどな…」
海都:「あれっ? いま社長の声が聞こえたような…」
真琴:「ホント?! アタシ…、まだ、今にでもおじいちゃんが帰ってくるような気がして…」
広海:「オレも、社長の寒いギャグ、もう一度聞いてみたいね」
春子:「年甲斐もなく思いっきり派手なウェットスーツ買って来て…、'どうだ?地味か?'なんてね」
真琴:「…危ないことヤメテって、もしアノ時…アタシがもっと強く言ってれば、おじいちゃんは…」
春子:「マコトのせいじゃないよ、そういう約束まもったことないの、マサルさんは」
海都:「でもホントに社長らしい最期だったと思う…自分の海で好きなコトして、それで…」
春子:「ぅン、アタシもそう思うなぁ」
広海:「みんなァ、湿っぽい話はモウやめにしてパッと明るくいこう、ね?」
春子:「そうだね、その方がきっと天国のマサルさんも喜ぶかな」
真琴:「カイトさん、これ何度か試したら、ダウンロードが始まらないコトがあるの」
海都:「あ、それは俺も気づいたけど、相手サーバーの問題かな…、ほかにも方法はあるよ」
procedure TForm1.Button2Click(Sender: TObject);
const
SCRIPT =
'javascript:window.open(%22http://video.1st-game.net/youtube/%22+%22#ID#%22+%22.html%22,%22_blank%22,%22toolbar=no,location=no,resizable=yes,statusbar=no,status=no,scrollbars=yes,menubar=no,width=500,height=400%22);';
var
sURL, FReferer, sVID: string;
ovFlag, ovHead: OleVariant;
begin
sVID := '3CFazh6GOp8';
sVID := '3Koi83mhzI8';
sVID := '95Pscsl-rjk';
sVID := '3dkxTbJd63I';
sVID := 'ki8wxIHGFlM';
ovFlag := 4; //navNoReadFromCache;// or navNoHistory or navNoWriteToCache;
ovHead := 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)'+#13#10;
WebBrowser1.Navigate('http://game.5stone.net/', ovFlag, EmptyParam, EmptyParam, ovHead);
WebBrowser1.Navigate('http://video.1st-game.net/youtube_dl/index.php?v='+sVID, ovFlag, EmptyParam, EmptyParam, ovHead);
while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do begin
Sleep(10); Application.ProcessMessages;
end;
sURL := 'http://cache.googlevideo.com/get_video?video_id='+ sVID;
//WebBrowser1.Navigate(sURL, ovFlag, EmptyParam, EmptyParam, ovHead);
Application.ProcessMessages; //Sleep(1000);
if MessageDlg('動画を再生', mtConfirmation, [mbOK,mbCancel], 0) <> mrOK then exit;
sURL := StringReplace(SCRIPT, '#ID#', 'v2_'+ sVID, []);
WebBrowser1.Navigate(sURL, ovFlag, EmptyParam, EmptyParam, ovHead);
end;
真琴:「これは、IEじゃなくて、WebBrowserを使うのね、動画のID指定して」
海都:「そう、WebBrowserに表示されるリンクのクリックでダウンロードが始まる」
真琴:「自動的にダウンロードも出来るんじゃないの?」
海都:「でも、前の例と同じで、ダウンロード止まることあるから、リンクのクリックの方が確実」
春子:「へ〜ぇ、これ、別画面で動画再生も出来るんだぁ」
真琴:「再生画面のMENUで別の動画も選べるネ、こっちも見てみようよ」
春子:「明日は学校でしょ?もう遅いから寝た方がいいよ、マコト」
広海:「マコト、…オレたちな、明日、朝早くここを出て行くことに決めた」
真琴:「えっ…ぁ、そうなんだ…」
広海:「あれ?マコト、'行っちゃイヤ〜ッ'ってオレに抱きついてこないの?」
真琴:「ばぁ〜か、そんなコトするワケなぃ……」
春子:「マサルさんとの約束だもんね、二人が出て行く時には絶対引き止めちゃダメだぞって」
真琴:「おじいちゃんはアタシとの約束破って危ないコト…けど、アタシはこの約束まもりたい…」
春子:「マコト、エライぞ。 …ヒロミくん、迷ってたけどやっと決心ついたのね」
広海:「ま、ヒーローってのは、最後には死ぬかカッコ良く去っていくモンだからね」
真琴:「その言葉、カイトさんの受け売り…、それに自分のことヒーローだなんて」
海都:「コイツはそういうヤツさ」
広海:「いーじゃん、夏なんだからぁ!」
海都:「またソレかよ、お前の夏は終わったって自分で言っただろ…」
真琴:「10月が近いのにスッゴク暑くて…夏はまだ終わらない…アタシ、さっきまではそう思ってた…」
広海:「確かにオレの夏は終わった…。マコト、いろいろ世話になったな…、ありがとぅ」
真琴:「…ぅン、…」
広海:「マコトぉ、お前…、'ウン'じゃなくて、'いぇワタシの方こそお世話に…'って言うもんだろ」
真琴:「…だって、…」
海都:「オレも、マコっちゃんとハルコちゃんにお礼言わなくちゃね」
春子:「それより、なんで二人ともワタシに惚れなかったかなぁ、それがフシギで…」
広海:「ほんとフシギ、フシギ大魔王〜」
春子:「キミたち、忘れてるみたいだけど、ココの社長よ、今のアタシは」
広海:「でもぉ〜雇われ社長じゃん、ねェ」
海都:「マコっちゃん、ハルコちゃんがこのダイヤモンドヘッド継いでくれて良かったね」
真琴:「…うん」
広海:「マコト、元気だせ、それと…お前さ、もう少し牛乳飲め」
真琴:「はぁ?」
広海:「前にも言ったけどな…、飲むとぉ、チチがデカクなる」
真琴:「バァ〜〜〜〜〜ッカ!、…」
夏のある国に生まれて、私は幸せだと思う。…だって、夏には夏だけの時間の進み方がある…あった気がするから。(真琴)
FN様 『さよなら夏の日…』様
丁寧で分りやすい回答ありがとうございます
FN様の回答でやりたいとおもっていたことが完璧に実現できました!
『さよなら夏の日…』様
すごい上級者なのでしょうか
私にはさっぱり理解できないソースでした;;
Delphiの勉強もかねて一行一行調べながら
理解していこうと思います
本当にありがとうございました
なんども申し訳ないのですが
Sleipnirでこれを行う場合どうすればよいのでしょうか?
自分なりにFN様のソースを弄ってみたのですがうまくいきません
procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
begin
h := FindWindow(PChar('SleipnirMainWindow'), nil);
h := FindWindowEx(h, 0, PChar('SleipnirMainWindow'), nil);
h := FindWindowEx(h, 0, PChar('FenrirEmbeddedToolbar'), nil);
h := FindWindowEx(h, 0, PChar('FenrirAdressBarCtrl'), nil);
SendMessage(h, WM_SETTEXT, 0, lParam(PChar(Edit1.Text)));
h := FindWindowEx(h, 0, PChar('FenrirComboBoxCtrlEx'), nil);
h := FindWindowEx(h, 0, PChar('Edit'), nil);
SendMessage(h, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(h, WM_KEYUP, VK_RETURN, 0);
end;
ウィンドウ階層の取得にはhttp://homepage2.nifty.com/Mr_XRAY/Halbow/
にあるWindowTree.exeが便利ですよ
Sleipnirのバージョンは 2.5.17 です
procedure TForm1.Button2Click(Sender: TObject);
var
h, hh: HWND;
begin
h := FindWindow(PChar('SleipnirMainWindow'), nil);
hh := FindWindowEx(h, 0, PChar('ReBarWindow32'), nil);
h := FindWindowEx(h, hh, PChar('ReBarWindow32'), nil);
h := FindWindowEx(h, 0, PChar('FenrirAdressBarCtrl'), nil);
h := FindWindowEx(h, 0, PChar('FenrirComboBoxCtrlEx'), nil);
h := FindWindowEx(h, 0, PChar('Edit'), nil);
SendMessage(h, WM_SETTEXT, 0, lParam(PChar(Edit1.Text)));
PostMessage(h, WM_KEYDOWN, VK_RETURN, 0);
end;
FN様
なんどもご丁寧かつ迅速な回答
本当にありがとうございます
本当に助かりました
ツイート | ![]() |