VBを使って他の既存のソフトなどへ何らかの命令をかけることは可能でしょうか?
 
 具体的には起動中のほかのアプリケーションへキー操作をさせる…というようなことは可能でしょうか?

 たとえば、コマンドを設置しておいて、そのコマンドをクリックすると起動中の別のアプリケーション上でEnterキーを押した状態を引き起こさせるというようなことです。
 
 また、それとは逆に他のアプリケーションを監視して、キーが押されたときに反応させるというようなことは可能でしょうか?

 API関数等を使用するのでしたらどういう関数を使用すればよいか教えてください。
 よろしくお願いします。

A 回答 (5件)

># 反論~にどうぞ。


(゜ .゜)ノ カンシャ デス
真意をわかっていただいて、うれしいです。^^


サンプルです。

このサンプルを実行するには二つのプロジェクトが必要となります。

Project1
└Form1
  ├Command1
  └Command2
'Form1の中身
Option Explicit

Private Sub Command1_Click()
  MsgBox 1
End Sub

Private Sub Command2_Click()
  MsgBox 2
End Sub
と記載して、ボタンが押されたらメッセージボックスを表示するようにしておきます。
これをEXEにして起動しておいてください。



Project2
└標準モジュール
'標準モジュールの中身
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_COMMAND = &H111
Private Const BN_CLICKED = &H0&

Sub Main()
  Dim lngWindWnd As Long 'ウィンドウハンドル
  Dim lngBtnWnd1 As Long '最初に見つかったボタン
  Dim lngBtnWnd2 As Long '2番目に見つかったボタン
  
  
  'アプリケーションタイトルより、ウィンドウハンドル得ます
  lngWindWnd = FindWindow(vbNullString, "Form1")
  
  
  '指定のウィンドウハンドル内の、最初に見つかったクラス名[ThunderRT6CommandButton](VB6で作成したコマンドボタン)のハンドルを得ます
  '【注意:2番目の引数が0(Nullポインタ)のとき、最初に見つかったものを返すように指定している】
  lngBtnWnd1 = FindWindowEx(lngWindWnd, 0, "ThunderRT6CommandButton", vbNullString)
  Call SendMessage(lngWindWnd, WM_COMMAND, BN_CLICKED, ByVal lngBtnWnd1)
  
  
  '指定のウィンドウハンドル内の、2番目に見つかったクラス名[ThunderRT6CommandButton](VB6で作成したコマンドボタン)のハンドルを得ます
  '【注意:2番目の引数が0以外(Nullポインタではない)とき、2番目のパラメータ以降に見つかったハンドルを返すように指定している】
  lngBtnWnd2 = FindWindowEx(lngWindWnd, lngBtnWnd1, "ThunderRT6CommandButton", vbNullString)
  Call SendMessage(lngWindWnd, WM_COMMAND, BN_CLICKED, ByVal lngBtnWnd2)
End Sub




といった感じです。
一番最初にサンプルを載せたかったのですが、ちょっと納期前ということで、説明を簡略化してしまいました。


>一文字(Enterキー)を渡すだけならSendKeysでも問題はないかな..
たしかにそうですね。。。
話を戻しますが、#3で書いた電子電○帳と連携したソフトですが、目的のボタンにたどりつくために、[TAB]を数回送った後に[ENTER]を送っていました。最初から目的のボタンにフォーカスがあるのであれば、全然問題ないのですが、、、

なので、処理によってはSendkeysで十分だと思いますが、2回以上のSendkeysが連続するようなのであれば、OSの状況に影響されないAPIを使うことをお奨めします。
    • good
    • 1
この回答へのお礼

 サンプルコードありがとうございます。

 今回、特に急いでいるわけでもなく、前々から疑問だったことをこの場で質問してみたのですが、大変参考になるご意見をお二人からいただけて非常に感激しております。
 まとまった時間を空けて、ゆっくり試してみたいと思います。

お礼日時:2002/01/16 22:00

# 反論はOKだと思います。


# 遠慮せずにどうぞ。

一文字(Enterキー)を渡すだけならSendKeysでも問題はないかな..
というのが私の見解です。

さて、BN_CLICKEDをSendMessageする方法はよさそうだが、
昔挫折した憶えが。。。
よろしければ、具体的に教えていただきたい。
    • good
    • 0

Todo36さんに申し訳ないのですが・・・・(いつもお世話になってます)


SendKeysはお奨めいたしません。。。

URLを見てください。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=110224
#2でのjosyo_mさんの発言

http://oshiete1.goo.ne.jp/kotaeru.php3?q=157242
#2でのσ( ̄ー ̄ ボク の 発言


以前に電子電○帳と連携した、VB製の住所録入力管理ソフトを触れた経験があります。
電話番号を入力後、ボタンをクリック(エンター)するとSendKeysで処理を行って、別ソフトから住所を得るというものでしたが、PCの低スペックと操作する人の慣れから、ソフト側が操作の早さについていけず、予期せぬエラーが連発していました。

ですので・・・・というわけです。


(この発言は、個人を攻撃しているわけではありません。むしろTodo36さんの発言は常にチェックして、スキルアップにつながってますので、感謝してます。)
    • good
    • 1
この回答へのお礼

 Sendkeysは知ってはいましたが、あまり使ったことがなかったのですが、あまり多発・多用すると環境によっては厳しい場合があるということですね?
 こちらも非常に参考になります。
 重ねてありがとうございます。

お礼日時:2002/01/16 21:55

>具体的には起動中のほかのアプリケーションへキー操作をさ


>せる…というようなことは可能でしょうか?

AppActivateとSendKeysで出来ます

参考URL:http://www.microsoft.com/JAPAN/developer/library …
    • good
    • 0
この回答へのお礼

 早速のご回答ありがとうございます。
 簡単に使うならばAPIを使うまでもないというご意見ですね?
 AppActivateとは知りませんでした。
 大変参考になります。

お礼日時:2002/01/16 21:51

FindWindow :目的のアプリケーションを探す


FindWindowEx:目的のアプリケーション内の、目的のコマンドボタンなどのコントロール類を探す
SendMessage ;見つかった目的のコントロールを制御する(送るメッセージ:BN_CLICKED = 0&)

基本はこれらの関数です。

操作はSendMessageで行い、その操作対象のハンドルを得て処理を行うようにしましょう。
    • good
    • 0
この回答へのお礼

 すばやい回答ありがとうございます。
 まだ試してみてないのですが、FindWindowは使えそうな気がします。
 実は、この機能も探し求めていたものかもしれませんので。
 
 早速、調べながら試してみたいと思います。

お礼日時:2002/01/16 21:43

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

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

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

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

Qアプリがダウンロードできない

Androidです。
アプリをダウンロードしようとしても、ダウンロードができません。
他のアプリだとダウンロードできます。

エラーコードは24です。

Aベストアンサー

Androidのバージョンは?
4.0 以上の場合は、ダウンロード マネージャーが無効になっていないか確認。
「設定」「アプリ」「アプリを管理」「すべて」スクロールし「ダウンロード マネージャー」「無効」→「有効にする」(「有効」の場合は「データの消去」・・・注:データが消える)

データが消えるがリセットしてみる。
「Google Playストアのリセット」Playストア起動しホームスクリーンに戻る→「設定」「アプリ」「Google Playストア」キャッシュを消去と強制停止
→「設定」「アプリ」「すべて」「Google サービスフレームワークを表示」データを消去
→GooglePlayストア起動しエラー確認→本体の電源をシャットダウンし再起動

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)

  ...続きを読む

Qiphoneでapp storeアプリがダウンロードできない場合

iphoneでapp storeアプリがダウンロードできない場合
容量を超えていてiphoneでダウンロードできない場合どうやってアプリをダウンロードするのですか?パソコンと同期して、パソコンでダウンロードしたんですが
クリックしても動きません。

Aベストアンサー

こんばんは。

WiFi接続すれば、20MBを超えるアプリもダウンロードできます。

また、PCでの同期の場合は、iTunesでアプリの同期設定が必要になります。

QMultiLine=TrueのTextBoxでEnterキー

Visual Basic 6.0で、TextBoxでEnterが押されたら次のコントロールへ移動させているのですが、
MultiLine=Trueの場合、TextBox内で改行されてから次のコントロールへ移動してしまいます。
TextBox内で改行されたくはないのですが、何か回避方法はありますか?
(10文字分の幅のTextBoxに20文字入力するため、折り返しはされて欲しいのです。)

Aベストアンサー

KeyPressイベント内でKeyAscii=0とすれば入力をキャンセルできますよ。

QVアプリをダウンロードしようとしたら???

アプリ★ゲットというサイトでVアプリをダウンロードしようとしたら、「この機種での動作確認が出来ておりません、ご了承いただいたらダウンロードをクリックしてください」というような表示が出ます。使用機種はV603SH。一度試しにダウンロードしたのですが、問題なく動作しましたが、いつか動作に問題が出たり、ダウンロードしたアプリが動作しなかったりという事が起きるかが気になっています。アプリ★ゲットというサイト自体V603SHに対応してないのでしょうか?

Aベストアンサー

動作確認が出来ていないのは、そのアプリの作者さんが603SHでの動作確認をしていない(出来ない)だけです。問題なく動作しているのであればそのまま使用して構わないのではないでしょうか。

> いつか動作に問題が出たり、ダウンロードしたアプリが動作しなかったりという事が起きるかが気になっています。

問題が生じる可能性がないとは言えませんが、アプリの異常終了程度では携帯電話本体への影響はあまりないと思います。データ消失などを気になさっているのであれば、定期的にSDカードにバックアップを取る事をお勧めします。

> アプリ★ゲットというサイト自体V603SHに対応してないのでしょうか?

アプリ★ゲットには603SHで動作確認されたアプリが多数ありますので対応していないという事はないでしょう。

Qウィンドウにキー送信で ENTER を送りたい

指定されたキャプションのウィンドウに ENTERキーを送りたいのですが、ものによって送れるものと送れないものがあります。

キャプションが"印刷"のものにキー送信をしているのですが、ExelやWordなどのクラス名が取得できる("bosa_sdm_XL9"等)ものだと送信でき、IE、秀丸などのクラス名が取得できないもの("#32770"と表示される)だと送信できません。

お分かりになられる方がおりましたら、ぜひ教えてください。

Aベストアンサー

>指定されたキャプションのウィンドウに ENTERキーを送りたいのですが、
>ものによって送れるものと送れないものがあります。

どうやって送ってるんですか?それを書いていただかないとなにも判断できませんが。

Qスマホのアプリをアンインストール後に再ダウンロード

アプリをいつも通りダウンロードしたのですが、
何度見てもアプリの一覧になかったので
アンインストールして、もう一度ダウンロードしようと試みましたが、
ダウンロードの画面で「ダウンロード」をタッチしても先の画面に進みません。
Playストアのマイアプリの中も探してみましたが、ありませんでした。
どうしたらもう一度アプリをダウンロードできるのでしょうか?
ちなみにauのIS17SHを使用しています。
よろしくお願いします。

Aベストアンサー

具体的なアプリ名をあげられた方が、わかりが良いかも?
アプリの都合か、質問者様の何か操作や設定ミスか、端末のトラブルか、何とも判断すきません。

Q[Enter]エンターキーでカーソル移動する方法

プログラム(VB.NET)初心者です。
どうぞよろしくお願いします。

フォームに複数のテキストボックスを配置しているのですが、
タブで次のテキストにフォーカスが移動するように
[Enter]キー押下時もフォーカスを次のテキストに移動させたいのです。
色々試してみたものの、なかなかうまくいきません(><)
どなたか、わかる方教えていただけたら幸いです。
サンプルソースがあると嬉しいです。
申し訳ありませんが、宜しくお願いします。

Aベストアンサー

''TextBox1, TextBox2 を実際のオブジェクト名に置換して使ってください。

Private Sub TextBox1_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
''TextBox1 内で、Enter が押されたとき、TextBox2 にフォーカスが移動します。

Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

If KeyAscii = System.Windows.Forms.Keys.Return Then
TextBox2.Focus()
''一個一個 ○○.Focus() と指定するしかないのでは?と思います。
End If
End Sub

''TextBox1, TextBox2 を実際のオブジェクト名に置換して使ってください。

Private Sub TextBox1_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
''TextBox1 内で、Enter が押されたとき、TextBox2 にフォーカスが移動します。

Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

If KeyAscii = System.Windows.Forms.Keys.Return Then
TextBox2.Focus()
'...続きを読む

Q中国スマートフォンでのアプリダウンロードについて

中国(大連)在住です。

最近、中国向けスマートフォン(SHARP SH8158U)を購入しました。

さっそく、アプリをダウンロードしようとしましたが、
「ANDROID MARKET」にアクセスできません。 というか、アイコンが見当たりません。
どうしたら、「ANDROID MARKET」のアプリをダウンロードできるでしょうか?
ご存知の方いましたら、是非とも教えて下さい。

現状、他のアプリサイトや、APKファイルのインストール等でアプリを追加していますが、
本当に欲しいアプリは、なかなか少なく、
なんとか、「ANDROID MARKET」のアプリをダウンロードしたいです。

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

以上。

Aベストアンサー

Googleが対応していないとか以前に、中国からの国外サイト接続への検閲に引っかかるので中国では「違法」となる可能性もありますので無理やりマーケットを入れたとしても逮捕されないようにご注意を。

日本とは違いますのでくれぐれも。

中国の端末を日本で使うのであれば無理やりマーケットアプリを入れようが問題ないのでそのような日本での使い方はかまわないとは思いますが、中国はとにかく日本の感覚でITをみてはいけない気がします。

別に中国が嫌いなわけではなく、私は日本人ですが嫁が中国人なのでいろいろと文化の違いを直視していますが、くれぐれもご注意を。
このブログの方が詳しく解説されているので参考にしてみてください。

参考URL:http://chenyu.seesaa.net/article/12582250.html

QDateTimePickerをEnterキーでDropDownさせたい。

早速質問させていただきます。

WindowsアプリでDateTimePickerコントロールを使用しているのですが、マウスクリックではなくて、Enterキーを押したときにドロップダウンさせる事は可能でしょうか?

ご教授のほど、よろしくお願いいたします。

Aベストアンサー

<System.Runtime.InteropServices.DllImport("user32.dll")> _
Public Overloads Shared Function SendMessage _
 (ByVal hWnd As IntPtr, ByVal Msg As Integer, _
 ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function

Const WM_SYSKEYDOWN = &H104
Const VK_DOWN = &H28

Private Sub DateTimePicker1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DateTimePicker1.KeyPress
 If e.KeyChar = Chr(Keys.Enter) Then
  SendMessage(Me.DateTimePicker1.Handle, WM_SYSKEYDOWN, VK_DOWN, 0)
 End If
End Sub

-DateTimePickerで指定のキーでドロップダウン形式の予定表を表示したい-
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-42812.htm

どうやらAPI使用になるみたいです。。。

<System.Runtime.InteropServices.DllImport("user32.dll")> _
Public Overloads Shared Function SendMessage _
 (ByVal hWnd As IntPtr, ByVal Msg As Integer, _
 ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function

Const WM_SYSKEYDOWN = &H104
Const VK_DOWN = &H28

Private Sub DateTimePicker1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DateTimePicker1.KeyPress
 If e.KeyChar = Chr(Keys.Enter) Then
...続きを読む


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

人気Q&Aランキング