flashのハンドルを取得してみよう
カテゴリー: ぷろぐらみんぐ/メモ
2011-10-20
flashのハンドルを取得してみよう。
TWebBrowser.HWNDを取得する方法 (メモ: その2)
flashのハンドルを取得してみよう。
【方法1】 : Tag名からリストアップする
【方法2】 : 子Windowから探す
flashオブジェクトが htmlの
最上位に貼り付けられている場合の例です。
※iframeなどに入っている場合は、下位階層まで追いかける必要があります。
※単一のflashが htmlに張り付いている場合。
使用例 : SetFocusする。
GetWindowHandleFromIDispatch関数については、
TWebBrowser.HWNDを取得する方法 (メモ: その1)
に書いてあります。
TWebBrowserで、どうしても入力フォーカスを当てたい際に役に立ちます。
flash以外の他のオブジェクトも同様に応用することができます。
さようなら Delphi
レッツゴー ドットネット
それいけ ドットネット
それいけ C#
執筆:2011.10.19
編集:2011.10.19
編集:2011.10.19
TWebBrowser.HWNDを取得する方法 (メモ: その2)
flashのハンドルを取得してみよう。
【方法1】 : Tag名からリストアップする
var H : THandle; i : Integer; v_Doccument, v_elems , v_attr : Variant; s : string; begin v_Doccument := WebBrowser1.Document; if VarIsClear(v_Doccument) or ('Internet Explorer_Server' <> GetClassNameText(GetWindowHandleFromIDispatch(v_Doccument))) then begin Exit; end; v_elems := v_Doccument.getElementsByTagName('OBJECT'); if Not VarIsClear(v_elems) and (v_elems.length > 0) then begin s := 'count: '+IntToStr(v_elems.length) + sLineBreak; for i := 0 to v_elems.length -1 do begin v_attr := v_elems.Item(i).getAttribute('CLASSID'); if Not VarIsClear(v_attr) and (VarToStr(v_attr) = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000') then begin s := s + v_attr + sLineBreak; H := GetWindowHandleFromIDispatch(v_elems.Item(i)); s := s + ' HWND: ' + IntToStr(H) + sLineBreak + sLineBreak; end; end; ShowMessage(s); end; end; |
【方法2】 : 子Windowから探す
flashオブジェクトが htmlの
最上位に貼り付けられている場合の例です。
※iframeなどに入っている場合は、下位階層まで追いかける必要があります。
※単一のflashが htmlに張り付いている場合。
function SearchFlashHandle(p_hwnd : HWND) : HWND; var c_hwnd : HWND; begin Result := 0; c_hwnd := GetWindow(p_hwnd, GW_CHILD ); while (c_hwnd > 0) do begin // ClassName[MacromediaFlashPlayerActiveX] if (Pos('MacromediaFlashPlayerActiveX', GetClassNameText(c_hwnd)) = 1) then begin Result := c_hwnd; break; end; c_hwnd := GetWindow(c_hwnd, GW_HWNDNEXT ); end; end; |
使用例 : SetFocusする。
h := GetWindowHandleFromIDispatch(WebBrowser1.Document); flash_handle := SearchFlashHandle(h); if (flash_handle > 0) then Windows.SetFocus(flash_handle); |
GetWindowHandleFromIDispatch関数については、
TWebBrowser.HWNDを取得する方法 (メモ: その1)
に書いてあります。
TWebBrowserで、どうしても入力フォーカスを当てたい際に役に立ちます。
flash以外の他のオブジェクトも同様に応用することができます。
さようなら Delphi
レッツゴー ドットネット
それいけ ドットネット
それいけ C#