現在は以下のように楽天のマーケットスピードを起動させて
マウスマクロソフトでログインしていますが
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と関連する良く見られている質問

Qゲームアプリについて みなさんのおすすめのゲームアプリって何がありますか??教えてください!

ゲームアプリについて

みなさんのおすすめのゲームアプリって何がありますか??教えてください!

Aベストアンサー

magic piano
グミドロップ
1010
がおすすめです。
基本無課金でも十分楽しめます。

Qマクロの実行時エラー'1004'が解消できません

ushiushiです。

Excel2000でマクロを組んでいます。
ピポットテーブルで、合計欄を展開して、csvファイルを作成しようとしていますが、
展開するときに「実行時エラー'1004'」が出てどうしよう使用もありません。

デバックで、見てその続きを処理させるとその後は何事もなく動きます。

どこが悪いのか見当が付きませんので、すみませんが、お教え下さい。
よろしくお願い致します。

---- macro -----
Range("表の左隅").Activate 'ピポットテーブルの左上にセルを移動
ActiveSheet.PivotTables("ピボットテーブル3").RefreshTable   'ピポットテーブル更新
'最終地点に移動
Selection.End(xlDown).Select '表の最下段に移動
Selection.End(xlToRight).Select '表の右端へ移動。ここで合計欄にセルが移動する
'データを展開
If Selection.Column < 255 Then  '更新時、データが無い場合セルが255列にいるかどうか確認
Selection.ShowDetail = True  '表を展開。ここでエラーが発生する
Else
GoTo owari           '表が無い場合は次の処理へ移動
End If
---- EOF ----
---- Error messages ----
実行時エラー'1004'
RangeクラスのShowDetailプロパティを設定できません。
---- EOF ----

ushiushiです。

Excel2000でマクロを組んでいます。
ピポットテーブルで、合計欄を展開して、csvファイルを作成しようとしていますが、
展開するときに「実行時エラー'1004'」が出てどうしよう使用もありません。

デバックで、見てその続きを処理させるとその後は何事もなく動きます。

どこが悪いのか見当が付きませんので、すみませんが、お教え下さい。
よろしくお願い致します。

---- macro -----
Range("表の左隅").Activate 'ピポットテーブルの左上にセルを移動
ActiveSheet.PivotTables...続きを読む

Aベストアンサー

>Selection.End(xlDown).Select    '表の最下段に移動
>Selection.End(xlToRight).Select   '表の右端へ移動。ここで合計欄にセルが移動する
これでは不安定なので

With ActiveSheet.PivotTables("ピボットテーブル3")
  .RefreshTable
  With .DataBodyRange
    With .Item(.Count)
      If Not IsEmpty(.Value) Then
        .ShowDetail = True
      End If
    End With
  End With
End With

..などのように範囲を指定したほうが良いです。
DataBodyRange や TableRange1 、 TableRange2 などの各プロパティについて調べてみてください。

Qおすすめのスマホ(Android)のアプリを教えてください。出来ればゲーム以外でお願いします。

おすすめのスマホ(Android)のアプリを教えてください。出来ればゲーム以外でお願いします。

Aベストアンサー

今どのくらいの通信量なのか表示するアプリ
騒音計
音の周波数表示(スペアナ)
ファイルのモード学習chmod
Super User(これはインストールすると全てのファイルを操作できるようになるが間違って操作するとスマホが動かなくなる恐れがある。また保障されなくなる恐ろしいソフト)
Super パイ
電話自動録音
Unix and Linux
Linux Command
BASIC
メトロノーム

Qwshで他の複数のwshを一度に起動したい

WSHから他のWSH(例えばtest1.vbs、test2.vbs、test3.vbs)を順に起動していく処理だと、下記(プログラム1)の通りで上手く行くのですが、一度に並行してキックさせたい場合は、どのようにしたら良いでしょうか?

----------プログラム1(start)---------------
Const ForReading = 1
Dim FileShell
Set FileShell = WScript.CreateObject("Scripting.FileSystemObject")

Function ReadFile(ByVal FileName)
ReadFile = FileShell.OpenTextFile(FileName, ForReading, False).ReadAll()
End Function


Execute ReadFile("test1.vbs")
Execute ReadFile("test2.vbs")
Execute ReadFile("test3.vbs")
----------プログラム1(end)---------------

WSHから他のWSH(例えばtest1.vbs、test2.vbs、test3.vbs)を順に起動していく処理だと、下記(プログラム1)の通りで上手く行くのですが、一度に並行してキックさせたい場合は、どのようにしたら良いでしょうか?

----------プログラム1(start)---------------
Const ForReading = 1
Dim FileShell
Set FileShell = WScript.CreateObject("Scripting.FileSystemObject")

Function ReadFile(ByVal FileName)
ReadFile = FileShell.OpenTextFile(FileName, ForReading, False).ReadAll()
End Function...続きを読む

Aベストアンサー

スクリプトファイルを読み込むのではなく、
VBSファイルを個別にシェル実行すればいいのでは?
WshShell.Run("wscript.exe ????.vbs")
というかんじで。

Qおすすめの暇潰しアプリ教えてください。あんまりゲームはしないのですが、初心者でもやりやすいのがあれば

おすすめの暇潰しアプリ教えてください。あんまりゲームはしないのですが、初心者でもやりやすいのがあれば知りたいです!

Aベストアンサー

FUNKEYLAND作の脱出ゲームアプリは、脱出ゲームアプリが初めての人でも楽しめる分かりやすさとかわいい色づかい。
代表作はアリスハウス、アリスハウス2。不思議の国のアリスの世界観を表現するのに成功している。
ほかに、ケーキカフェ、ガールズルーム、Fruit Kitchens,Candy Roomsといった、もっと易しいのもある。
パズルの謎解きのヒントは、部屋のどこかに隠れているから、色、大きさ、並んでいる順番なんかをよく観察しよう。部屋の中のものをタップする位置を変えると正面以外の側から覗けてヒントが見つかったり、適用するアイテムを選び直すことでヒントがわかったりアイテムをゲットできることもある。

Q[WSH|JS|VB] telnetコマンドの標準出力を受け取りたい

こんにちは。

Windows Scripting Host(WSH)でtelnetコマンドのオートパイロット(自動操縦)をしたいと思っています。
そこで、ログインプロンプトなどを待つ際、waitで時間で待つのではなく、「login:」という文字を待ってログインするようにしたいのですが、できるでしょうか?教えてください。

WSHをご存知ない場合は、VBの範囲でお答えいただければと思います。適用できる可能性がありますので。
なお、言語は、JScript,VBScriptどちらでも構いません。

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

Aベストアンサー

telnet コマンドは、実装が二つありますよね。95 にあった、Window アプリケーションのと
NT のコマンドプロンプトで動くやつ。

Window アプリケーションだと、キーを送り込むのは簡単だが、表示を取るのは、まず、不可能ですよね。

コンソールアプリケーションであれば、どうやってコンソールバッファのハンドルを取得するか
が、難しそう。

rsh もどきが作りたいのであれば、socket を扱うプログラムを作る方が、何百倍も簡単です。

# この回答が、期待に添わないであろう、という意味で自信無しにしておきます

Q20代女性がやって面白いおすすめのゲームアプリとかありますか?(*´ω`*)

20代女性がやって面白いおすすめのゲームアプリとかありますか?(*´ω`*)

Aベストアンサー

白猫プロジェクトは楽しいです

QExcelのマクロをWSHから実行させると「型が一致しません」のエラーがでます。

WSHからExcel2000のマクロを実行させています。このマクロはセルの計算式の結果(セル(1,2))をif関数で比較するコードが入っています。
If Cells(1, 2).Value = "8月" Then
hensu = 1
End If
これをWSHから実行させると「型が一致しません」とエラーが出ます。
Debug.Print TypeName(Cells(1,2).Value)で型を表示させてみるとマクロを直接実行させたときはStringですが、WSHから実行させるとErrorとなっています。
なぜWSHから実行すると型がErrorとなるのかということと、解決策を教えていただければ幸いです。

ちなみにWSHでマクロを実行させている部分は以下のとおりです。
Set objExcelApp = CreateObject("Excel.Application")
Set objWbk = objExcelApp.Workbooks.Open("ExcelBook.xls",True)
objExcelApp.Run("ExcelBook.xls!macro1")

WSHからExcel2000のマクロを実行させています。このマクロはセルの計算式の結果(セル(1,2))をif関数で比較するコードが入っています。
If Cells(1, 2).Value = "8月" Then
hensu = 1
End If
これをWSHから実行させると「型が一致しません」とエラーが出ます。
Debug.Print TypeName(Cells(1,2).Value)で型を表示させてみるとマクロを直接実行させたときはStringですが、WSHから実行させるとErrorとなっています。
なぜWSHから実行すると型がErrorとなるのかということと、解決策を教えていただけれ...続きを読む

Aベストアンサー

ANo1です。

> TisWookBook.WorkSheets(1).CellsではVBAマクロ内で「424:オブジェクトが必要です」

すいません。「TisWookBook」は「ThisWorkBook」の書き間違いです。

> Appkucation.Cellsでは変化ありませんでした
うーん。でしたら、

Debug.Print TypeName(Application)
Debug.Print TypeName(Application.Cells)

とすると、どうなります?

#ちなみにExcel2000でも試してみましたが・・・エラー発生しませんでした・・・

Q仲間と協力してできるアプリゲーム(チャット付き)で、おすすめはありますか? 現在高2の16歳女子です

仲間と協力してできるアプリゲーム(チャット付き)で、おすすめはありますか?
現在高2の16歳女子です(˙˘˙*)

Aベストアンサー

白猫プロジェクトとか、どうでしょう?

Q'2465'指定した式で参照している'直線Aii'フィールドが見つかり

'2465'指定した式で参照している'直線Aii'フィールドが見つかりません。

入力されたテキストDELTUKIをiiにセットして直線Aii~Ciiに反映させたいです。
DELTUKIには0~12までのどれかがセットされて、00の場合には未可視、それ以外は
該当月の直線Aii~Ciiを可視化させたいです。
ですが、上記エラーが発生します。
どなたかご指南頂きたくよろしくお願い致します。
※.メイン画面の画像添付参照願います。
※.vba vb6 winXP
SetLowerLine:
With objrep
!直線103.Visible = True
!直線104.Visible = True
!直線105.Visible = True
!直線106.Visible = True
!直線107.Visible = True
End With
'Reports(stdocname)!直線103.Visible = True
'Reports(stdocname)!直線104.Visible = True
'Reports(stdocname)!直線105.Visible = True
'Reports(stdocname)!直線106.Visible = True
'Reports(stdocname)!直線107.Visible = True

Format ("00")
ii = Forms!メイン画面![テキストDELTUKI]
If ii = "00" Then
Else
objrep.Controls("直線A" & "ii").Visible = True
objrep.Controls("直線B" & "ii").Visible = True
objrep.Controls("直線C" & "ii").Visible = True
End If

'2465'指定した式で参照している'直線Aii'フィールドが見つかりません。

入力されたテキストDELTUKIをiiにセットして直線Aii~Ciiに反映させたいです。
DELTUKIには0~12までのどれかがセットされて、00の場合には未可視、それ以外は
該当月の直線Aii~Ciiを可視化させたいです。
ですが、上記エラーが発生します。
どなたかご指南頂きたくよろしくお願い致します。
※.メイン画面の画像添付参照願います。
※.vba vb6 winXP
SetLowerLine:
With objrep
!直線103.Visible = True
!直線104....続きを読む

Aベストアンサー

すみません、先日のこちらのご質問での回答者です:
http://oshiete1.goo.ne.jp/qa5770608.html

前回の回答2への補足の件のうち、「(2)」と「(3)」については
結局私では対処法の見当をつけかねたままなのですが(汗)、
本件についてだけはどうにかなりそうなので、回答をつけさせて
戴きます。

・・・というか、前回「"」を外すことを指摘した際に気づいて
いればよかったのですが、これも見落としていました(汗)
以下の部分を、下記のように修正してください。

【現在】
Format ("00")
ii = Forms!メイン画面![テキストDELTUKI]

If ii = "00" Then
Else
  objrep.Controls("直線A" & "ii").Visible = True
  objrep.Controls("直線B" & "ii").Visible = True
  objrep.Controls("直線C" & "ii").Visible = True
End If

【修正】
'変数「ii」に対して、Format関数で桁表示を指定
ii = Format(Forms!メイン画面![テキストDELTUKI], "00")

If ii = "00" Then
Else
  '「ii」を変数として使用するため、「"」は外します
  objrep.Controls("直線A" & ii).Visible = True
  objrep.Controls("直線B" & ii).Visible = True
  objrep.Controls("直線C" & ii).Visible = True
End If


・・・以上です。

これで、「テキストDELTUKI」に1桁の数字(「1」や「2」など)を
指定した場合も、「直線A01」や「直線A02」に処理が行われる
ようになると思います。

すみません、先日のこちらのご質問での回答者です:
http://oshiete1.goo.ne.jp/qa5770608.html

前回の回答2への補足の件のうち、「(2)」と「(3)」については
結局私では対処法の見当をつけかねたままなのですが(汗)、
本件についてだけはどうにかなりそうなので、回答をつけさせて
戴きます。

・・・というか、前回「"」を外すことを指摘した際に気づいて
いればよかったのですが、これも見落としていました(汗)
以下の部分を、下記のように修正してください。

【現在】
Format ("00")
ii = For...続きを読む


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

人気Q&Aランキング

おすすめ情報