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

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

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

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


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

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

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

A 回答 (2件)

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?ur …
    • good
    • 0
この回答へのお礼

WSHでは無理なのですね。
そしてVBでは可能なのですね。
更にメッセージキャプチャに関する情報もありがとうございます。
道のりは険しそうですがなんとか作ってみようと思います。

ありがとうございましたm(__)m

お礼日時:2007/01/08 14:48

楽天のマーケットスピード及びマウスマクロソフトについてはわからないのですが質問前半にお答えします。



WSHでアプリケーションのウインドウをアクティブにするためにはWshShellオブジェクトのAppActivateメソッドを使います。しかしその時点でアクティブ化に成功したとしても別のアプリケーションがアクティブになる可能性はあり、続く操作が必ず目的のアプリケーションに対して行われるかは保証されません。

私はAppActivateに続けてSendKeysメソッドでネットワークのログイン操作などを行っています。「静かな状態」で起動しており、だいたいうまくいっています。

SendKeysの直前に常にAppActivateを実行するような関数を自作して使えば、誤操作の可能性は減るかもしれません。

質問後半の「WSHのコマンドを見つけ出す方法など」についてはhiro245さんの意図が読み取れませんのでよろしければ補足をお願いします。なお、IEやその他メーラー等の操作のことでしたら、AppActivateとSendKeysの機能の範囲(キー操作の範囲)内で同様に可能です。

この回答への補足

ご回答ありがとうございます。

現在もAppActivateメソッドを利用しております。
全てのコードを書くと逆にわかりにくいかと考え、省略してしまいました。
説明不足で申し訳ございません。
なので失敗は稀なのです。ですが今はその「稀」を修正したいと考えております。

「WSHのコマンドを見つけ出す方法」についてですが、
例えばシステムがアプリケーションに命令を出すとき
システム側からアプリケーションに対して何らかのVBSのようなコマンドみたいなものを実行しているのだと考えているんです。
そこで、それをDOSプロンプトか何かで確認しながら
マウスでログインボタン等を押したりすると
DOSプロンプトに命令コマンドみたいなものがズラズラっと
吐き出されるのではないかと勝手に想像しています。
(イメージとしてはパケットキャプチャみたいな感じです。)
記憶が曖昧ですが以前そのようなことをどこかのHPで読んだ気がします。

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

補足日時:2007/01/07 22:37
    • good
    • 0

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

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

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

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

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

Qvbsでからプログラムを、オプションを指定して起動したい。

vbsから、プログラムを実行する歳に、オプションを指定する方法を教えてください。

Firefoxを起動する際に以下のオプションをつけて実行したいのですが
上手くいきません。
(1)-new-tabオプション
(2)URL

===================================

Option Explicit
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run """c:\Program Files\Mozilla Firefox\firefox.exe"""
Set objWshShell = Nothing


Firefoxを起動するだけであれば上の記述でいけますが
(1)と(2)は
objWshShell.Run """c:\Program Files\Mozilla Firefox\firefox.exe"""
の後ろにどのように記述すればいいのでしょうか。

vbsから、プログラムを実行する歳に、オプションを指定する方法を教えてください。

Firefoxを起動する際に以下のオプションをつけて実行したいのですが
上手くいきません。
(1)-new-tabオプション
(2)URL

===================================

Option Explicit
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run """c:\Program Files\Mozilla Firefox\firefox.exe"""
Set objWshShell = Nothing


Firefoxを起動...続きを読む

Aベストアンサー

オプションやURLをすべてRunの第1引数で指定します。

objWshShell.Run """c:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab http://www.google.co.jp"

QVBSのSendKeysでクリックができない

音声認識アプリケーションからvbsを実行できるのですが、ここで一度だけマウスクリックしたい状況が出てきて困っています。

Dim WSHShell As Object
Set WSHShell = CreateObject("Wscript.Shell")
WSHShell.AppActivate "操作したいアプリケーション名"
WSHShell.SendKeys "{TAB}" 'OK
WSHShell.SendKeys "{ENTER}" 'OK
WSHShell.SendKeys "{CLICK LEFT, 10, 10}" 'NG

TABキーやENTERキーは動作するのですが、3番目のマウスクリックがExceptionといわれエラーになってしまいます。Sendkeysでマウスクリックを送信するにはどうしたらよいのでしょうか?ネットで調べたリファレンスだと上記のような書き方で良さそうなのですが・・・

音声認識アプリケーションはドラゴンスピーチ11Jで、OSはWin 7 ProとWin 8、どちらも64ビットです。

Aベストアンサー

Sendkeysはキーボードのキーを送出するものであり、CLICKは行えません。

QVBSでuser32.dll(Win32API)を使用する方法を教えてください。

はじめてネットで質問します。失礼があったらすみません。

VBSでマウスカーソルの座標を設定する方法を教えてください。
このサイトやあちこち検索してみましたが、VBでのやり方は見つかったのですがVBSでのやり方が見つからなくて心が折れてしまいました。

自分で調べた結果、user32.dll(Win32API )のSetCursorPos を使用する必要があるところまではなんとなく理解しましたがどうやってuser32.dllを使用できように宣言するのかが解りません。

宣言さえできれば

SetCursolPos 0,0

で画面左上にマウスカーソルが移動すると思っています。

この問題で会社と家で3日ほどはまってます。
ご回答よろしくお願い致します。

Aベストアンサー

こんにちは。

VBS から API を直接呼び出すことはできません。

  MSDN: [VBA の機能で VBScript に含まれていない機能]
  http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

上記参考 URL は VBA に関するドキュメントですが、中段にある宣言の
項目にありますとおり、Declare ステートメントがサポートされていない
ためです。

  [SFC mini]
  http://kandk.cafe.coocan.jp/sfcmini/catid-19.html

または、

  [Dynacall] DynWrap.DLL ダウンロードページ(En)
  http://freenet-homepage.de/gborn/WSHBazaar/WSHDynaCall.htm
  [Dynacall] サンプル
  http://www.geocities.jp/seiotaq/DynaHP/index.html#three2

などの Dll をインストールして、そこを経由することになります。

私見ですが、新たなインストールを避けたい場合や面倒に感じるので
あれば Excel VBA を使った方が良いと思います。

こんにちは。

VBS から API を直接呼び出すことはできません。

  MSDN: [VBA の機能で VBScript に含まれていない機能]
  http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

上記参考 URL は VBA に関するドキュメントですが、中段にある宣言の
項目にありますとおり、Declare ステートメントがサポートされていない
ためです。

  [SFC mini]
  http://kandk.cafe.coocan.jp/sfcmini/catid-19.html

または、

  [Dynacall] DynWrap.DLL ダウンロードページ(En)
  http:/...続きを読む

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")

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

QvbscriptでIE自動入力(途中で出てくるポップアップをクリックしたい)

IEで自動化入力をvbscriptで作っております。
次々に問題というか知識の無さでつまづいています。お知恵を貸してください。

IE自動入力をしていくと、途中のクリックで次画面に
進むところでポップアップが浮き上がりスクリプトが止まってしまいます。

ポップアップの内容は、
タイトルが「セキュリティの警告」
内容が「このサイトと取り交わす情報は、ほかの人から読み取られたり変更されることは
ありません。しかし、このサイトのセキュリティ証明書には問題があります。、、、」
と出まして、
「はい(Y)」「いいえ(N)」「証明書の表示(V)」と選択肢があります。
手動で「はい」をクリックするか、Yキーを押すとまたスクリプトが進み始めます。

これを自動でクリックするためにはどうしたらいいんでしょうか。
いろいろ調べてこうして見ました。

Set wshshell=wscirpt.createobject("wscript.shell")
wshshell.AppActivate("セキュリティの警告")
wshshell.sendkeys "y"

これでは、全く動きません。おそらくこのウィンドウにコントロールが行ってないと思います。
他の手立てを教えてください。よろしくお願いします。

IEで自動化入力をvbscriptで作っております。
次々に問題というか知識の無さでつまづいています。お知恵を貸してください。

IE自動入力をしていくと、途中のクリックで次画面に
進むところでポップアップが浮き上がりスクリプトが止まってしまいます。

ポップアップの内容は、
タイトルが「セキュリティの警告」
内容が「このサイトと取り交わす情報は、ほかの人から読み取られたり変更されることは
ありません。しかし、このサイトのセキュリティ証明書には問題があります。、、、」
と出まして、
...続きを読む

Aベストアンサー

ポップアップが表示されるより早く、yが送られてしまってるんでしょう。
ポップアップが表示されるのを待たないとね。

Set wshshell=wscirpt.createobject("wscript.shell")

'セキュリティの警告が表示されるまで待つ
Do Until wshshell.AppActivate("セキュリティの警告")
WScript.Sleep 100
Loop

'セキュリティの警告が消えるまでyを送る
Do While wshshell.AppActivate("セキュリティの警告")
wshshell.sendkeys "y"
WScript.Sleep 100
Loop

永久ループに陥らないように、適度にループ抜けを入れておけばいいでしょう。

QVBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法

VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。
現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。

Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = CreateObject("WScript.Shell")

IE.Visible = True
IE.Navigate("https://サイトのURL")

Do Until IE.Busy = False
WScript.Sleep 1000
WshShell.SendKeys "y"
Loop
'(セキュリティの警告が出るため)
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys "loginid"
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys "password"
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"

操作したいページのソースの一部を抜粋すると下記のようになっています。

テキストボックス
<INPUT type="text" name="loginId" class="Necessary" size="20" maxlength="5" value="" tabindex="20">

ボタン
<INPUT class="button10" type="button" name="sentaku" value="認証" onClick="javascript:execute・・・・略

うまく操作できる方法を教えてください。
よろしくお願いします。

VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。
現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。

Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = CreateObject("WScript.Shell")

IE.Visible = True
IE.Navigate("https://サイトのURL")

Do Until IE.Busy = False
WScript.Sleep 1000
WshShell.SendKeys "y"
Loop
'(セキュリティの警告が出るため)
WScript.Sleep 100
WshShell.Send...続きを読む

Aベストアンサー

set f=oIE.document.forms(0)
f.loginId.value="loginid"
f.password.value="password"
WshShell.SendKeys "{ENTER}"

テキスト領域でエンターするとsubmitになるので
エンターをsendkeysするのはありだとおもいますよ

QVBScriptでMsgBoxのYesNoボックスを自動的にクリックしたい

VBScriptであるボタンをクリックして表示された、MsgBoxの表示されたYes Noボックスを自動的にクリックしたいと考えています。

下記のように、VBScriptでボタンやコンボボックスを選んだりクリックした後にMsgBoxで”はい”、”いいえ”が表示されて、その表示されたMsgBoxで”はい”をクリックしたいのですが、コマンドが分からず困っています。
IEオブジェクト.Document.フォーム名.コンボボックス名.selectedIndex = 0からの番号

Aベストアンサー

MsgBoxの場所が分かっているなら、そのステートメントを削除して、
Yesが返されたようにすれば良いのでは?
Res = MsgBox("~", vbYesNo) → Res = vbYes

どうしてもキー入力にしたい場合はWSHのSendKeyメソッドを使います。
http://msdn.microsoft.com/ja-jp/library/cc364423.aspx

でも、あまり勧められない方法です。キーはその時、フォーカスを
持っているウィンドウに送られますので、確実性に疑問が残ります。

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

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

Aベストアンサー

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

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

QVBSでのSendKeysでの画面の最小化

VBSで起動したアプリケーションの画面の最小化の方法を探しております。ご存知の方がおられましたらよろしくお願いいたします

SendKeysにて、
SendKeys "%{" "}" 'ALT+SPACE

SendKeys "{DOWN 4}" 'DOWN×4

SendKeys "{ENTER}" 'ENTER
でいけるとおもったのですが、ALT+SPACEの記述がだめみたいでして。。

他に方法がある場合も教えていただけると助かります
よろしくお願いいたします

Aベストアンサー

ALT+SPACEなら
> SendKeys "% "
です。{" "}という特殊キーはありません。
あと、最小化はnで選択出来るので、
> SendKeys "% "
> SendKeys "n"
で最小化出来るはずです。

QEXCEL VBAから他アプリケーションを操作することは可能ですか?

こんばんは。

VBAの本を購入し勉強していますが、VBAと他アプリケーションとの連携について記載が少なく(txtやcsvファイル操作)、どこまで出来るんだろうという不安があり質問しました。

(1)EXCEL VBAから他アプリケーションを起動し、設定操作、命令を送り操作することは可能でしょうか?
イメージとしては他アプリに一方的に命令を送り操作できれば良しです。(アプリ側からのリターン要求はしません。)

(2)第2の質問です。
VBAで他アプリを起動した状態で人が操作している感覚でマウスを操作できますか?(利用方法:他アプリの●ボタンを押したい!!)
目の前にソフトがあるのに触る操作は出来ないものでしょうか?
いろいろ調べて見ましたが、この様な事例はありません。
駄目元ですが、こんな操作を知っていましたら教えてください。
こんな操作ができればいいな~

Aベストアンサー

#2,4 です。

> EXCEL2000内の特定のセルに規定値外のデータが入力された場合に
> UWSCを起動して...

UWSC のスクリプトが完成しているとすれば、起動オプション付きで
バッチ処理すれば良いでしょう。実行タイミングは、シートまたは
ThisWorkbook の Change イベントが使えます。

例)シートモジュール

Private Const EXE_PATHNAME As String = "C:\Program Files\uwsc\uwsc.exe"
Private Const DQ      As String = """"

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim rChange   As Range
  Dim sCommand  As String
  Dim sScriptFile As String

  ' // 実行する UWSC スクリプト
  sScriptFile = "C:\sample.uws"
  ' // UWSC の起動オプションは UWSC のヘルプを参照
  sCommand = DQ & EXE_PATHNAME & DQ & " " & _
        DQ & sScriptFile & DQ
  
  ' // 変更されたのが単一セルかつ A 列でなければ終了
  If Target.Cells.Count > 1 Then Exit Sub
  Set rChange = Intersect(Target, Columns("A"))
  If rChange Is Nothing Then
    Exit Sub
  End If
  
  ' // さらに値が TEST だった場合のみ実行
  If rChange.Value = "TEST" Then
    Shell sCommand, vbNormalFocus
  End If

End Sub

#2,4 です。

> EXCEL2000内の特定のセルに規定値外のデータが入力された場合に
> UWSCを起動して...

UWSC のスクリプトが完成しているとすれば、起動オプション付きで
バッチ処理すれば良いでしょう。実行タイミングは、シートまたは
ThisWorkbook の Change イベントが使えます。

例)シートモジュール

Private Const EXE_PATHNAME As String = "C:\Program Files\uwsc\uwsc.exe"
Private Const DQ      As String = """"

Private Sub Worksheet_Change(ByVal Target As Range)

  ...続きを読む


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

人気Q&Aランキング

おすすめ情報