VBを使って他の既存のソフトなどへ何らかの命令をかけることは可能でしょうか?
具体的には起動中のほかのアプリケーションへキー操作をさせる…というようなことは可能でしょうか?
たとえば、コマンドを設置しておいて、そのコマンドをクリックすると起動中の別のアプリケーション上でEnterキーを押した状態を引き起こさせるというようなことです。
また、それとは逆に他のアプリケーションを監視して、キーが押されたときに反応させるというようなことは可能でしょうか?
API関数等を使用するのでしたらどういう関数を使用すればよいか教えてください。
よろしくお願いします。
No.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を使うことをお奨めします。
サンプルコードありがとうございます。
今回、特に急いでいるわけでもなく、前々から疑問だったことをこの場で質問してみたのですが、大変参考になるご意見をお二人からいただけて非常に感激しております。
まとまった時間を空けて、ゆっくり試してみたいと思います。
No.4
- 回答日時:
# 反論はOKだと思います。
# 遠慮せずにどうぞ。
一文字(Enterキー)を渡すだけならSendKeysでも問題はないかな..
というのが私の見解です。
さて、BN_CLICKEDをSendMessageする方法はよさそうだが、
昔挫折した憶えが。。。
よろしければ、具体的に教えていただきたい。
No.3
- 回答日時:
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さんの発言は常にチェックして、スキルアップにつながってますので、感謝してます。)
Sendkeysは知ってはいましたが、あまり使ったことがなかったのですが、あまり多発・多用すると環境によっては厳しい場合があるということですね?
こちらも非常に参考になります。
重ねてありがとうございます。
No.2
- 回答日時:
>具体的には起動中のほかのアプリケーションへキー操作をさ
>せる…というようなことは可能でしょうか?
AppActivateとSendKeysで出来ます
参考URL:http://www.microsoft.com/JAPAN/developer/library …
早速のご回答ありがとうございます。
簡単に使うならばAPIを使うまでもないというご意見ですね?
AppActivateとは知りませんでした。
大変参考になります。
No.1
- 回答日時:
FindWindow :目的のアプリケーションを探す
FindWindowEx:目的のアプリケーション内の、目的のコマンドボタンなどのコントロール類を探す
SendMessage ;見つかった目的のコントロールを制御する(送るメッセージ:BN_CLICKED = 0&)
基本はこれらの関数です。
操作はSendMessageで行い、その操作対象のハンドルを得て処理を行うようにしましょう。
すばやい回答ありがとうございます。
まだ試してみてないのですが、FindWindowは使えそうな気がします。
実は、この機能も探し求めていたものかもしれませんので。
早速、調べながら試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- Windows 10 (緊急)windowsのタスクバーやアプリ?が反応しない 3 2023/03/28 05:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- Windows 10 パソコンの起動時、画面が黒いままのトラブルにつきまして。 4 2022/10/02 18:02
- マウス・キーボード キーボードのCaps Lockキーと変換キーの挙動がおかしくなりました。 4 2022/09/04 22:44
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
VB.netでFindWindowExやると・・・9222812402616107008!?
Visual Basic(VBA)
-
親ウインドウにあるOKボタンを押す方法
Visual Basic(VBA)
-
-
4
他アプリの操作(メニューバー)
Visual Basic(VBA)
-
5
VBでアプリケーションを自動操作したい。
Visual Basic(VBA)
-
6
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
7
他アプリケーション’(ウィンドウ)のハンドル取得方法
Visual Basic(VBA)
-
8
WinAPIで電卓をクリック
Visual Basic(VBA)
-
9
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
10
VB.NETで他のEXEを実行させる
Visual Basic(VBA)
-
11
VB.NETのSendMessageを教えてください
Visual Basic(VBA)
-
12
VBで実行中のEXEファイルの情報を取得したい
Visual Basic(VBA)
-
13
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
14
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
15
VBからBATファイルを起動して戻り値の取得方法
Visual Basic(VBA)
-
16
コマンドプロンプト
Visual Basic(VBA)
-
17
Process.Startで起動したアプリを最大化したいです。VB.NET
Visual Basic(VBA)
-
18
exe間での引き値の受け取り方法
Visual Basic(VBA)
-
19
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
20
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
フォームの再読み込み
-
Excel VBA Application.caller...
-
CommandButtonのCaptionを変化...
-
コマンドボタンやイメージにマ...
-
セルをマクロのボタンにしたい。
-
ボタン
-
Access VBA でデータペーストを...
-
VBA でエクセルにパスワードを...
-
[Excel VBA]コマンドボタンの入...
-
C♯初心者で、四則演算の電卓を...
-
VB.net でトグルボタンを実現し...
-
VBAのボタンの位置が変わって困...
-
VBAでオプションボタンによって...
-
ASP.Net ラベルの内容をすぐに...
-
コマンドボタンの文字色
-
フォームから別のフォームを呼...
-
閉じると「+」になり開くと「-...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
Excel VBA Application.caller...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
プロシージャからイベントをコ...
-
他のアプリケーションとの連携
-
閉じると「+」になり開くと「-...
-
C#で動的に作ったtextboxを消す。
-
ボタンをマウスで押し続けたと...
-
VBA でのボタンの移動について
-
ボタン
-
CommandButtonのCaptionを変化...
-
TextBoxでEnterキーを押すと、...
-
VB.net でトグルボタンを実現し...
おすすめ情報