環境:Windows xp
   WSH 5.6 or VB6

アプリケーションが立ち上がっている状態でWSH or VBを使用して、
その起動されているアプリケーションのオブジェクト
(項目の名前やオブジェクトの種類:テキストBOX、コンボBOX等など)
の情報(プロパティ)を取得する方法を教えて下さい。

A 回答 (1件)

FindWindowでアプリのウインドウハンドルを取得して、


EnumChildWindowsでコントロールのハンドルを列挙します。
後は、SendMessageでプロパティを取得できます。

参考URL:http://www.vbvbvb.com/jp/gtips/
    • good
    • 0

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

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

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は操作されたアプリケーションに対して「メッセージ」を送ります。アプリケーションはメッセージを受け取って対応する処理を行います。例えばメ...続きを読む

QVB2008 オブジェクトプロパティの保存方法

VBの超初心者です。

早速質問ですが
フォーム上に複数のチェックボックスやテキストがあり、そのプロパティ(checkedやtext)を保存し、
またその保存したファイルをフォーム上で開けることができるようにしたいのですが、
何をどうしたらいいのかわかりません。

方法としては↓に書かれているような方法であっているのでしょうか?
http://dobon.net/vb/dotnet/file/xmlserializer.html

↑に書かれているMainClass.Main()を動かせば"C:\test\sample.xml"ができるのか?
と、やってみたのですがDim serializer・・・のところでエラー
”System.InvalidOperationException はハンドルされませんでした。”
となってしまいます。

そもそもの方法があっているのかどうかもわからず困惑中です。

どなたか、わかる方がいれば、参考ページでも結構ですので教えてください。
宜しく御願いします。

Aベストアンサー

WinFormsを仮定して……。

アプリケーションのアーキテクチャによって,回答が異なります。
a.) ModelがちゃんとFormから分離しているのであれば,Modelを保存/復元すればよい。
b.) Modelが存在せず,Formの情報を保存したいだけであれば,ApplicationSettingsのPropertyBindingを使うのが簡単。


本来であれば,Formが扱う「データ」はそれらがクラスとして分離しているのが望ましいです。
# 例えば,WinFormsではなくWPFやWinRTにUIプラットフォームを変更しても,Modelはほぼ無変更で利用可能になる
その場合,Model自身が保存可能な作りにする必要がありますが(Serializable+BinaryFormatterでもDataContractSerializerでもXmlSerializerでもよいですが),その責務はFormではなくModelになります。

ただ,WinFormsでの開発においてModelをちゃんと分離していないことも多く,その場合は後者が簡単な方法になります。
コントロールのプロパティからデータ - (ApplicationSettings)を開き,(PropertyBinding)のボタンを押すと,プロパティの一覧が出てきます。
まずは,「新規」を選択し,保存する名前を指定します。
あとは,勝手にアプリケーションフレームワークが処理してくれます。

VBのアプリケーションフレームワークを利用していない場合は,
FormClosedイベントあたりに,
My.Settings.Save()
の一行を追加する必要がありますが,同じように使えます。

WinFormsを仮定して……。

アプリケーションのアーキテクチャによって,回答が異なります。
a.) ModelがちゃんとFormから分離しているのであれば,Modelを保存/復元すればよい。
b.) Modelが存在せず,Formの情報を保存したいだけであれば,ApplicationSettingsのPropertyBindingを使うのが簡単。


本来であれば,Formが扱う「データ」はそれらがクラスとして分離しているのが望ましいです。
# 例えば,WinFormsではなくWPFやWinRTにUIプラットフォームを変更しても,Modelはほぼ無変更で利用可能になる
その場合...続きを読む

QVB6.0 コンボBOXからのリスト表示について

たとえば画面からの伝票入力処理などで...

「商品コード」の入力域を、コンボBOXにして、直接手入力でも、リストからの
マウスクリック選択でも入力できるようにするとします。

この様な場合リストには、通常は「商品マスタ」の「商品コード」を、リスト表示
しますね。

実は今回、このリストにコードだけでなく横に並べて「商品名」も表示したいの
です。もちろん「商品マスタ」に「商品名」を持っているものとします。

但し、もともとのコンボBOXの幅はコード文字数分のみとし、「商品名」分の
長さは、取っていないものとします。

以上、Accessでは標準機能で当たり前のように簡単にできる事ですが、
VB6.0ではどうなのでしょうか?

出来るのであれば、教えて下さい。

Aベストアンサー

Accessと同等の処理をしたいのであれば、
コンポーネントの中に「Microsoft Forms 2.0 ComboBox」と
いうのがあるので、それを標準コンボボックスのかわりに使えば
どうでしょうか?
確かアクセスのコンボボックスが使えるようになったような?

QコンボBOXとテキストBOXの連携の仕方

コンボBOXとテキストBOXの連携の仕方を教えてください。
データテーブルに
ID 色
1 赤
2 白
3 黄
4 青
というデータがあります。
メインフォームのID用コンボBOXにデータテーブルのIDリストを表示して選択できるように設定しました。
IDコンボBOXの横に、色用テキストBOXを作って、コンボに「1」と入れたらテキストBOXに「赤」と自動的に表示させたいのですがどのようにすればよいか教えてください。

Aベストアンサー

VB2005 Express Editionを前提とします。
該当するテーブルはhoge.mdbというAccessのデータベースとします
Windowsアプリケーションを新規作成し、
Form1に対し、Combobox1とTextBox1を貼り付けます。

さらにDataSource1を貼り付けます。
DataSource1コントロールのDataSourceプロパティをクリックし、小さなボタンを押します。
[プロジェクト データソースの追加]をクリック
[データベース]をクリック
[新しい接続]をクリック
[データソース]をSQL Server用からAccess用に変更
[データベース ファイル名]で[参照]からhoge.mdbを指定します

REM ↓コレがいいのかはよくわからん
[データベースにログオン]にユーザー名とパスワードを入力して[パスワードを保存]しておきます

接続の確認を行い、成功したら[OK]→[次へ]
[選択された接続は~]とか言われるので内容を読んだ上で[はい(Y)]→[次へ]
[データセット内に指定するデータベース オブジェクト(W)]で、使うテーブルを指定します。→[完了]

コンボボックスに小さな三角形があり、クリックすると
[Combobox タスク]が現れる。

[データソース]で使用するテーブルを指定します


REM 以下二行よく解ってない
[メンバの表示]と[値の表示]で[ID]を指定します
[選択された値]をなしのままにしておきます

REM TagとTextの違いを理解してません。ごめんなさい
TextBox1のプロパティで(DataBinding)の(詳細)、あるいはTagとTextで使用するテーブルの[色]を指定しておきます

実行します。これでとりあえず連動はしているはずです

VB2005 Express Editionを前提とします。
該当するテーブルはhoge.mdbというAccessのデータベースとします
Windowsアプリケーションを新規作成し、
Form1に対し、Combobox1とTextBox1を貼り付けます。

さらにDataSource1を貼り付けます。
DataSource1コントロールのDataSourceプロパティをクリックし、小さなボタンを押します。
[プロジェクト データソースの追加]をクリック
[データベース]をクリック
[新しい接続]をクリック
[データソース]をSQL Server用からAccess用に変更
[データベース ファイ...続きを読む

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html


このカテゴリの人気Q&Aランキング

おすすめ情報