あなたの映画力を試せる!POPLETA映画検定(無料) >>

VBScriptでウィンドウの操作をするプログラムを作っています。

JavaScriptでウィンドウサイズを変えているものを強制的にVBScriptでサイズ変更するのはテストサイトでは問題ないのですが・・・

本当に対象としているサイトは社内インヨラサイト内なので見れないのですが・・・

http://www.google.com/notebook/public/0657752327 …

テストサイトではobjWindow.Document.URL = URL2とすればabout:blankがURL2のサイトになるのですが・・・対象サイトのアドレスはどうしても入ってくれません。
URL2をグーグルのアドレスに変えてみればうまくいくのですがその対象サイトだけはどうしてもダメです。

そのサイトに入るにはテストサイト同様にリンクをクリックしてからでないと入れないようになっています。そのハイパーリンクで右クリックの対象ファイルを保存をすると「Internet Explorerでは、○○をダウンロードできません。インターフェイスがサポートされていません。」となるようなサイトです。

どうにかしてオープンする前にウィンドウサイズを指定してしまいたいのですがどうにもこうにもうまくいきません。
例えばなのですが、元サイトをいじることなく一旦JavaScriptなどで指定されているサイズを”一時的”に書き換えて立ち上げるとかは出来ないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

' ウィンドウサイズの指定を具体的にどのように行っているのか記載されていませんが、


' 通常は、IEオブジェクトで指定できます。

'''''
set objWindow=CreateObject("InternetExplorer.Application")

' ↓表示前に窓サイズ指定
objWindow.Top=2
objWindow.Left=2
objWindow.Width=600
objWindow.Height=600

objWindow.Visible=True
objWindow.Navigate("http://www.google.co.jp/")
Do: WScript.Sleep(200): Loop Until (NOT objWindow.busy) AND (objWindow.readyState=4)
msgbox "何かキー押すとサイズを変更します。"

' ↓表示後に窓サイズ指定
objWindow.Top=400
objWindow.Left=400
objWindow.Width=200
objWindow.Height=200

参考URL:http://msdn2.microsoft.com/en-us/library/aa75208 …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBScriptから指定URLを開く方法

 ある特定のWebページをVBScriptから開きたいのですが方法が探せませんでした。VBScriptからWebページを開く方法、もしくはhttp putを行う方法を教えてください。よろしくお願いします。

Aベストアンサー

こんなので、どうでしょうか?

Set objIE = Wscript.CreateObject("InternetExplorer.Application")
objIE.Navigate2 "http://www.goo.ne.jp/"
objIE.Visible = TRUE
Set objIE =Nothing

QVBAで任意のウインドウのサイズを変更する方法

Excel VBAを使ってIEなどのプログラムのクライアント領域の
ウインドウのサイズを指定・変更したいと考えています。

http://www.excel-vba.net/excel-api-020.html

このページのコードを使ってサイズの取得だけはできるようになりました。

次に設定を行いたいのですが

http://home.att.ne.jp/zeta/gen/excel/c04p58.htm

このページにあるように


Dim window1 As Window
Set window1 = Windows("Google - Internet Explorer") 'アプリケーションウィンドウを対象
window1.WindowState = xlNormal '通常表示に設定します。
window1.Width = 800 'ウィンドウ幅を800に設定
window1.Height = 300 'ウィンドウの高さを300に設定



とやってみましたが
インデックスが有効範囲にありません
というエラーが出てしまいます。

どうすれば良いでしょうか?

あと気になっているのですが
幅及び高さの単位はポイントです。(ピクセルでは無いので注意して下さい)。
と書かれてありますが、
ピクセルからポイントへはどのように換算すれば良いのでしょうか?

Excel VBAを使ってIEなどのプログラムのクライアント領域の
ウインドウのサイズを指定・変更したいと考えています。

http://www.excel-vba.net/excel-api-020.html

このページのコードを使ってサイズの取得だけはできるようになりました。

次に設定を行いたいのですが

http://home.att.ne.jp/zeta/gen/excel/c04p58.htm

このページにあるように


Dim window1 As Window
Set window1 = Windows("Google - Internet Explorer") 'アプリケーションウィンドウを対象
...続きを読む

Aベストアンサー

2つ目のリンクの説明はExcel内のウィンドウを扱うものですから、質問の件の参考にはなりません。
1つ目のリンクの例のように、WindowsAPIを呼び出す必要あります。
WindowsAPIはC言語の関数の体裁をしていますので、理解するには若干のC言語の知識が必要です。

ウィンドウのサイズ変更は SetWindowPos 関数でできました。関数の説明はここにあります。
https://msdn.microsoft.com/ja-jp/library/cc411206.aspx

-----------------------------------------------------
Option Explicit

'ウィンドウ位置を維持する
Public Const SWP_NOMOVE = &H2&
'ウィンドウのZオーダーを維持する
Public Const SWP_NOZORDER = &H4&

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long

Private Declare Function SetWindowPos Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal hWndInsetAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal uFlags As Long _
) As Long

'メモ帳のウィンドウサイズを変更するサンプル
Public Sub ChangeRect()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, "無題 - メモ帳")

Call SetWindowPos(hWnd, -1, -1, -1, 400, 300, SWP_NOMOVE Or SWP_NOZORDER)
End Sub

2つ目のリンクの説明はExcel内のウィンドウを扱うものですから、質問の件の参考にはなりません。
1つ目のリンクの例のように、WindowsAPIを呼び出す必要あります。
WindowsAPIはC言語の関数の体裁をしていますので、理解するには若干のC言語の知識が必要です。

ウィンドウのサイズ変更は SetWindowPos 関数でできました。関数の説明はここにあります。
https://msdn.microsoft.com/ja-jp/library/cc411206.aspx

-----------------------------------------------------
Option Explicit

'ウィンドウ位置を維...続きを読む

QIE起動時の画面サイズの指定は可能?

IEを特定のURL(ショートカット)から起動した際に
URLごとに画面サイズを指定したいのですが
ショートカットの引数の指定などで可能でしょうか?

よろしくお願いします。

Aベストアンサー

以下のファイルをディスクトップ上に作成してダブルクリック
してみて下さい

---"goo.js"---
var IE = WScript.CreateObject("InternetExplorer.Application");
IE.Top = 100;
IE.Left= 100;
IE.Width = 680;
IE.Height = 660;
IE.Navigate("http://www.goo.ne.jp");
IE.Visible = true;
----ここまで

参考URL:http://member.nifty.ne.jp/aya/wsh/wsh_frm.htm

QVbscriptで自分自身のウィンドウを最大化するには?

IE5.0以上を使用と仮定。
新しいページを開く時に、そのページを
最大化して表示するにはパラメータを
渡してやればいいだけなので簡単だと思うのですが、

あるページがロードした時に
そのページにVbscriptを書いておくことで
自分自身を最大化することはできますでしょうか?

<body onload="~~~~">のようなイメージです。

Aベストアンサー

リサイズすることで、最大化(画面サイズ)にするスタンダードなやり方
<script language="VBScript">
sub window_onload()
window.resizeTo screen.availWidth, screen.availHeight
end sub
</script>
リサイズじゃなくて、本当に最大化する(ActiveXを使う)やり方
<script language="VBScript">
<!--
sub window_onload()
Dim objWsh
Set objWsh = CreateObject("WScript.Shell")
objWsh.SendKeys("% X") 'ALT+[space] (and) X
end sub
'-->
</script>
どちらも、<body onload="~">の記述は必要ないです。

QVBS/HTA:画面のサイズを取得する方法

VBSをHTAに組み込んで管理アプリを作成しています。

最大化した時に横方向に表示できるデータ個数を画面の大きさで変更したいと思っています(デスクトップorノートブック)
何とか画面のサイズが分かれば、横の長さが固定の1データを何個並べられるか割り出せるのですが・・・

どなたか、端から端までのサイズを取得する方法を教えて頂けないでしょうか。

宜しくお願いします。

Aベストアンサー

HTA の中のVBScriptであれば
screen.width
で画面の横幅がわかります。
画面縦にタスクバーを設置している場合は
screen.availWidth

QVBS(WSH)で開いたIEのウィンドウがアクティブにならない

VBSでタイトルバーのみのIEウィンドウを開き、
SendKeyでtestと入力するスクリプトを作成しています。

ですが、開いたIEのウィンドウがアクティブにならず、
SendKeyがIEに送信されません。

VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが
環境の問題なのか、プログラムの問題なのか判断できません。
どなたかご教授をお願いします。

IEのバージョンは8、OSはWinXPです。

以下、ソースです。

--------------------------------------------------

'タイトルバーのみのIEを起動する
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate("http://www.google.co.jp/")
objIE.MenuBar = False
objIE.StatusBar = False
objIE.ToolBar = False
objIE.AddressBar = False
objIE.Visible = True

'表示待ちループ
Do While objIE.Busy
WScript.Sleep 100
Loop

'[test]で検索
WshShell.SendKeys("test")
WScript.Sleep(100)
WshShell.SendKeys("{TAB}")
WScript.Sleep(100)
WshShell.SendKeys("{ENTER}")

--------------------------------------------------

VBSでタイトルバーのみのIEウィンドウを開き、
SendKeyでtestと入力するスクリプトを作成しています。

ですが、開いたIEのウィンドウがアクティブにならず、
SendKeyがIEに送信されません。

VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが
環境の問題なのか、プログラムの問題なのか判断できません。
どなたかご教授をお願いします。

IEのバージョンは8、OSはWinXPです。

以下、ソースです。

--------------------------------------------------

'タイトルバーの...続きを読む

Aベストアンサー

プログラムでは無く、環境によるものです。

ただ、WSHを使ってアクティブウィンドウにキーを送る仕組みですが、WSHからIEを起動したら確実にアクティブになる補償は無いので、スクリプト内で明示的にアクティブにした方が安全です。

@ITで指定したプロセスIDをアクティブにしてキーを送る記事があったので、参考になると思います。

http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformwsh14_01.html

ただし、
Set objIE = WScript.CreateObject("InternetExplorer.Application")

で起動した場合、objIEだけでプロセスIDが得られないので、別の検討が必要になります。
メニュー等非表示の指定を除けば、iexplorer.exeをExecコマンドで立ち上げることは可能でしょう。

プロセスIDまで取得してきっちり組みたい場合は、WSHにてWMIという仕組みを使えばプロセス情報は得られます。

http://www.upken.jp/kb/wmi_sample.html

検索ワードとしては、「WMI」「VBScript」「プロセス」「取得」あたりでいろいろ出ると思いますよ。

IE起動前にプロセス一覧を記録し、起動後に増えたIEのプロセスをうまく引ければ実現できそうですね。

プログラムでは無く、環境によるものです。

ただ、WSHを使ってアクティブウィンドウにキーを送る仕組みですが、WSHからIEを起動したら確実にアクティブになる補償は無いので、スクリプト内で明示的にアクティブにした方が安全です。

@ITで指定したプロセスIDをアクティブにしてキーを送る記事があったので、参考になると思います。

http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformwsh14_01.html

ただし、
Set objIE = WScript.CreateObject("InternetExplorer.Application")

で起動し...続きを読む

QVBS実行時エラー オブジェクトがありません 回避方法について

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだとは思うのですが、何が原因かがわからなく。。

○エラーメッセージ
エラー:オブジェクトがありません。:'objIE.Document.getElementByName(...)(...)'
コード:800A01A8
ソース:Microsoft VBScript 実行時エラー

○コード
'Option Explicit

Dim tmp 'CSV格納
Dim tmp2 'CSV分割
Dim SiteArray(10) 'ID,PW,URL格納
Dim SiteURL 'URL格納
Dim SiteID 'ID格納
Dim SitePW 'PW格納

Dim i
dim objFSO
dim stmCsvFile

'URL,ID,PWをCSVより読込
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set stmCsvFile = objFSO.OpenTextFile("C:\Users\***\Desktop\login.csv")

Do Until stmCsvFile.AtEndOfLine = True
tmp = stmCsvFile.readline
tmp2 = Split(tmp, ",")
SiteArray(i) = tmp2(1)
i = i + 1
Loop

stmcsvfile.Close


'URL,ID,PWを格納
SiteID = SiteArray(1)
SitePW = SiteArray(2)
SiteURL = SiteArray(0)

'---------- ひらく

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate SiteURL
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'---------- ID/PASSの入力

objIE.Document.getElementsByName("username")(0).Value = SiteID
objIE.Document.getElementsByName("password")(0).Value = SitePW

'---------- SUBMIT

objIE.Document.getElementsByName("login_form")(0).Submit
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'----------

宜しくお願い致します。

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだ...続きを読む

Aベストアンサー

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるかどうかさえ確認できませんよね。
その辺りはどうなんでしょうか?それで、Length プロパティを調べるように書いたわけです。

ふつう、例えば、ここの「教えて!goo」なんかでも、IDとパスワードは、きちんと、[ID(uname, pass)]を持っています。そしてIDには、添字は存在しません。

VBAがあれば、VBEditorのローカルウィンドウで、そのプロパティを確認していただくしかないと思います。もしかしたら、最初からとれていないのかもしれません。

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるか...続きを読む

QエクセルVBAで画面の大きさを取得する方法!

現在、パソコンで2画面表示で仕事をしています。フォームの表示位置を記憶させて前回、表示されていた場所と同じ位置に表示させるようにしています。通常は問題ないのですが、別のパソコンでエクセルのブックを使う場合に画面の枠外にフォームが表示されます。範囲を超える場合に表示位置を修正させたいのですが、画面の大きさを取得する方法が解りません。どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?2画面のプライマリー、セカンダリなどの情報と、左右などの情報も取得できるのでしょうか?(もしかして?APIが関係しますか?)
あわせて、強制的に画面の範囲内で一番近い位置に表示させるような命令があるのでしょうか?
よろしくお願いいたします。

Aベストアンサー

こんにちは。KenKen_SP です。

こういうことですか?

'標準モジュール
Declare Function SystemParametersInfo Lib "user32" _
  Alias "SystemParametersInfoA" ( _
  ByVal uAction As Long, _
  ByVal uParam As Long, _
  ByRef lpvParam As Any, _
  ByVal fuWinIni As Long) As Long

'RECT構造体
Public Type RECT
  Left  As Long
  Top  As Long
  Right As Long
  Bottom As Long
End Type
'モニターの有効なスクリーンサイズを取得
Public Const SPI_GETWORKAREA = 48

Sub Sample()

  Dim typRect As RECT

  Call SystemParametersInfo(SPI_GETWORKAREA, 0, typRect, 0)
  MsgBox "Screen Width :=" & typRect.Right & vbCrLf & _
      "Screen Height:=" & typRect.Bottom

End Sub

こんにちは。KenKen_SP です。

こういうことですか?

'標準モジュール
Declare Function SystemParametersInfo Lib "user32" _
  Alias "SystemParametersInfoA" ( _
  ByVal uAction As Long, _
  ByVal uParam As Long, _
  ByRef lpvParam As Any, _
  ByVal fuWinIni As Long) As Long

'RECT構造体
Public Type RECT
  Left  As Long
  Top  As Long
  Right As Long
  Bottom As Long
End Type
'モニターの有効なスクリーンサイズを取得
Public Const SPI_GETWO...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QアプリケーションをVBS(WSH?)で操作したい

現在は以下のように楽天のマーケットスピードを起動させて
マウスマクロソフトでログインしていますが
WSHが動いている最中に別のアプリケーションが自動起動するようなことがあると
ログインに失敗します。

ですのでマウスマクロソフトを使用するのではなくて
該当アプリケーションのウインドウがアクティブ状態でなくても
コマンドを実行させる方法をおしえていただきたいです。

マーケットスピードだけではなくIEやその他メーラー等も操作したいので
イベント(ログ?コマンド?)を監視するなどして
WSHのコマンドを見つけ出す方法などを教えていただきたいです。

よろしくお願いいたします。


●●●現在のVBSの内容●●●●
'マケスピを立ち上げる。
WSHShell.Run """D:\Program Files\MarketSpeed\MarketSpeed\MarketSpeed.exe"""
WScript.Sleep 5000 '5秒ウェイトを入れ起動を待つ。

'この後マウスマクロソフトの起動
'マウスマクロソフトでログイン動作
●●●●●ここまで●●●●●

現在は以下のように楽天のマーケットスピードを起動させて
マウスマクロソフトでログインしていますが
WSHが動いている最中に別のアプリケーションが自動起動するようなことがあると
ログインに失敗します。

ですのでマウスマクロソフトを使用するのではなくて
該当アプリケーションのウインドウがアクティブ状態でなくても
コマンドを実行させる方法をおしえていただきたいです。

マーケットスピードだけではなくIEやその他メーラー等も操作したいので
イベント(ログ?コマンド?)を監視するなどして...続きを読む

Aベストアンサー

ANo.1の補足へのアドバイスです。

質問後半の意図はわかりました。命令を調べて、それらをWSHで実行してやれば、アプリケーション毎に確実に操作できるとお考えですね? しかしそれはアプリケーションを操作する考え方として正しいですけれども、残念ながらWSHのWshShellの機能ではできません。

ご存知かもしれませんが、アプリケーションが操作されるとWindowsは操作されたアプリケーションに対して「メッセージ」を送ります。アプリケーションはメッセージを受け取って対応する処理を行います。例えばメモ帳でメニューが選択されるとWM_COMMANDというメッセージ(選択されたメニューの情報を含む)がメモ帳プログラムに送られ、メモ帳プログラムは情報を見て処理を行います。

アプリケーションにメッセージが送られる様子はメッセージキャプチャプログラムで観察できます。私が使っているのはBorland Delphiに付いてきたWinSightですが、MSでしたら開発ソフトに付いてくるspyでしょうか(?)。これを解析して同様にメッセージを送ってやればアプリケーションを操作できます。

しかしWshShellにはメッセージを送る手段はなく、たかだかキーストロークを送ることしかできません。更に言えばアプリケーションを指定してキーを送れる訳ではなく、AppActivateを使ったとしても、たまたまそのときアクティブなアプリケーションに送ることしかできません。

メッセージを送るプログラムを自作すれば確実に操作できますが、実用上は「静かな状態」で使うか、あるいはSendKeysの直前にAppActivateを実行するようにすればよいのではないでしょうか。

-----
話は変わり、アプリケーションによってはキーを送るのではなく、WSHのCreateObjectメソッドでオブジェクトを作成して操作できるものがあります。例えばMS OfficeはVBAと同様の操作をWSHから行えます。目的に合えばこちらの方法を使うと確実です。IEも可能でMSDNに下記の資料があります。

InternetExplorer Object
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/objects/internetexplorer.asp

ANo.1の補足へのアドバイスです。

質問後半の意図はわかりました。命令を調べて、それらをWSHで実行してやれば、アプリケーション毎に確実に操作できるとお考えですね? しかしそれはアプリケーションを操作する考え方として正しいですけれども、残念ながらWSHのWshShellの機能ではできません。

ご存知かもしれませんが、アプリケーションが操作されるとWindowsは操作されたアプリケーションに対して「メッセージ」を送ります。アプリケーションはメッセージを受け取って対応する処理を行います。例えばメ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング