
No.3ベストアンサー
- 回答日時:
こんにちは。
> キー操作を送りたいのは、ある大手メーカー製のERPシステムです
そうですか....SendKeys は、
1. ウインドウがアクティブでないとダメ
PC によって処理速度が異なります。例えば、ウインドウが開い
てアクティブになるまでの速さ。開発時のPC は 1 秒待ってから
SendKeys ..で良かったはずなのに、別 PC では 5 秒待たなけれ
ばならなかった...ということですね。SendKeys でキー送信して
もウインドウが開いてないんです。一例です。
つまり、開発時の PC と同様の動作は別 PC で保証されません。
2. 2000系OS で Numlock が解除される(今はどうなんだろ?)
などの問題があって、限られた用途「自分しか使わない」のであれば良い
のですが、基本的にオススメできません。SendKeys は最後の手段として
位置づけるのが良いと私は思います。
# 困ったときの SendKeys でもあるんですけどね(´(・)`)
Excel VBA を使う理由が特になければ、Wendy02 さんオススメの UWSC が
私も良いと思います。
どうしても VBA で...というのであれば、PostMessage などの API を
使うことを考えてみて下さい。この場合、ウインドウがアクティブなのか
どうかは関係なく他アプリケーションを操作可能です。
以下はメモ帳(WinXP付属)を VBA で操作するテストコードです。要は、
ハンドルさえ拾えれば大抵のことは SendKeys でなくとも可能です。
ご参考までに...
Option Explicit
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Private Const WM_CHAR As Long = &H102
Private Const WM_COMMAND As Long = &H111
Private Const WM_CLOSE As Long = &H10
Private Const BM_CLICK As Long = &HF5&
Private Const BM_SETCHECK = &HF1
Private Const BST_CHECKED As Long = &H1
Private Const BST_UNCHECKED As Long = &H0
Public Sub Sample()
Dim hWnd As Long
Dim hWnd_C As Long
Dim hWnd2 As Long
Dim hWnd2_C As Long
Dim strtSend As String
Dim i As Long
' クラス名とウインドウ構成は VB 付属の Spy++ で調べました。
' VECTOR などにも似た様なフリーツールは在ります
' メモ帳起動
MsgBox "他アプリケーション制御のサンプルです。メモ帳を起動します"
Application.Visible = False
Shell "Notepad.exe", vbNormalNoFocus
' メモ帳のウインドウハンドルを取得
hWnd = FindWindow("Notepad", "無題 - メモ帳")
' メモ帳の文字入力部のコントロールハンドルを取得
hWnd_C = FindWindowEx(hWnd, 0&, "Edit", vbNullString)
' 文字列送信テスト
strtSend = "教えて!Goo."
MsgBox "メモ帳に文字列「" & strtSend & "」を送信します"
For i = 1 To Len(strtSend)
Call PostMessage(hWnd_C, WM_CHAR, Asc(Mid$(strtSend, i, 1)), 0&)
Next i
' メモ帳のメニューをクリックし「検索」ダイアログを表示
' 「検索」のコマンドID 21 はリソースハッカーを使って調べました
MsgBox "続いて検索ダイアログを表示します", vbInformation
Call PostMessage(hWnd, WM_COMMAND, 21&, 0&)
' ダイアログが開くのを待つ(適当 500ミリ秒)
Sleep 500&
' 検索ダイアログウインドウハンドル
hWnd2 = FindWindow("#32770", "検索")
' チェックボックスのハンドル取得
hWnd2_C = FindWindowEx(hWnd2, 0&, "Button", "大文字と小文字を区別する(&C)")
MsgBox "チェックボックスを ON にします"
Call PostMessage(hWnd2_C, BM_SETCHECK, BST_CHECKED, 0&)
MsgBox "チェックボックスを OFF にします"
Call PostMessage(hWnd2_C, BM_SETCHECK, BST_UNCHECKED, 0&)
MsgBox "検索文字を送信してみます"
hWnd2_C = FindWindowEx(hWnd2, 0&, "Edit", vbNullString)
For i = 1 To Len(strtSend)
Call PostMessage(hWnd2_C, WM_CHAR, Asc(Mid$(strtSend, i, 1)), 0&)
Next i
MsgBox "[キャンセル]ボタンをクリックします"
hWnd2_C = FindWindowEx(hWnd2, 0&, "Button", "キャンセル")
Call PostMessage(hWnd2_C, BM_CLICK, 0&, 0&)
MsgBox " メモ帳を閉じます.[保存しますか?]ダイアログは手動で閉じて下さい."
Call PostMessage(hWnd, WM_CLOSE, 0&, 0&)
Application.Visible = True
End Sub
No.2
- 回答日時:
こんにちは。
Excel VBAは、ほとんどExcel内でしか使えません。
簡単な方法では、こんな風にすれば、動くかとは思います。
Application.Wait Now + TimeValue("00:00:02")
'待ち時間を置くのは、手動で、Activeアプリケーションを返るためです。
'Activeアプリケーションを換えるには、Win32 APIや、WMIを使用します。
CreateObject("Wscript.Shell").SendKeys " "
'IMEのON/Offの状態に影響を受けます。
ただ、もしも、システムパッケージの前に、Excelを初動させ、プロセスを残したまま稼動させるのは、やめたほうがよいですね。何が起こるか安心できません。Excelは、一定のメモリを占有し、また、自動保存などもあります(切ればよいのですが)。
簡易自動システムをお考えになるなら、今は有名になった、「UWSC」って本まで出ているスクリプト言語があります。画面からコマンドを与えるようなつくりになっていますね。使い方は簡単で、記録マクロも出来ますし、コーディングも出来ます。(最初知った時、作者は日本人ではないと思いました。)
このツールの記録マクロでの問題点は、画面のそれぞれのコントロールの位置が重要になるので、画面が動くと、コントロールのクリック等が外れてしまいます。それを避けるには、やはりコーディングによる方法が必要です。これで、1昼夜で、同じ作業を繰り返すことも可能です。
うみうみ屋さん
http://www.h7.dion.ne.jp/~umiumi/
No.1
- 回答日時:
こんにちは。
KenKen_SP です。> sendkeys "{SPACE}",true
Sendkeys " ",True とか(空白スペースをそのまま送信です)
> 他のアプリケーションにキー操作を送りたい...
Sendkeys ですか...ちなみにどのアプリケーションなのでしょうか?
この回答への補足
KenKen_SPさん、ありがとうございます。
キー操作を送りたいのは、ある大手メーカー製のERPシステムです。
今回、システムを起動し、メニュー画面からCtrl+Fでセッション検索をさせたいと思っているのですが、検索ダイアログボックスの表示まではいけるのに、条件設定のチェックボックスへのOn/Off切り替えがうまくできなくて困っています。基本的にWindows/Unix環境では他のアプリと同じキー操作が使えるようなのですが(実際通常操作だとスペースキーでのOn/Off切り替えも可能)、VBAでは限界ということでしょうか・・・?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) vba sendKeysを送る相手のソフトを前面に開くには 1 2023/07/20 16:42
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- マウス・キーボード パソコンのファンクションキー(F12)をきかなくできないでしょうか? 3 2022/05/25 18:01
- その他(パソコン・スマホ・電化製品) レジ操作について 2 2022/11/06 19:41
- マウス・キーボード パソコンのspaceキーの下にあるマウスコントロールできるキーが昔から動かないので、ブルートゥースの 5 2022/07/18 02:08
- Windows 10 Windows10でボリュームのアップダウンを簡単にできる方法ないですか? 1 2023/06/20 13:06
- Google Maps Blue stacks 5 のキーマッピング方法。 1 2022/09/09 21:33
- Visual Basic(VBA) VBAでシートの保護をかける際に「書式設定の変更」を有効にする 1 2023/04/17 18:18
- マウス・キーボード real vnc viewer で遠隔先で操作が出来ない。 2 2023/07/24 15:00
- オンラインゲーム 初めてのPCゲームにおけるおすすめ。 この度ゲーミングPCを初めて自作しました。 ただ今までCS機で 2 2022/08/09 04:08
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
【お題】 『寿司』がテーマの本のタイトルを考えてください
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
vbaから他のアプリを終了
Visual Basic(VBA)
-
-
4
VBSでのSendKeysでの画面の最小化
その他(プログラミング・Web制作)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
7
sendkeysにてALT+CTRL+INSERTを同時に行いたい
Visual Basic(VBA)
-
8
全角/半角キーをSendkeys関数で使用できますか?
Visual Basic(VBA)
-
9
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
10
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
13
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
14
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
15
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
16
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
17
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
18
VBスクリプト---アプリの終了について
その他(プログラミング・Web制作)
-
19
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
20
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教科書などに初めから書いてあ...
-
消しゴムがくっついて、跡が取...
-
CDやDVDに書くマジックペン
-
Windows10で、拡張子が.pyのフ...
-
ノートPC重さ2kgって許せますか?
-
書いたり消したりできるラミネ...
-
VBAでメモ帳にコピペをしたいの...
-
ペンだこのようなものが親指の...
-
メモ帳でタブ幅の設定はできる...
-
Wordで 文字の一部にモザイクを...
-
ヨドバシドットコムも置き配し...
-
CD盤の表面
-
LibreOffice Writer で線の太さ...
-
両面印刷するとき裏表とも罫線...
-
「覚書」、「メモ」、「備忘録...
-
チクられる? 自分が悪いけど…
-
英語の授業で大事なものを英語...
-
veikk ペンタブレットの不具合...
-
Samsungの、SペンはiPadでは使...
-
字が下手すぎて祝儀袋を持って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教科書などに初めから書いてあ...
-
日頃、感じる不便なものってあ...
-
Excel:任意の列だけCSV形式で...
-
消しゴムがくっついて、跡が取...
-
CDやDVDに書くマジックペン
-
Windows10で、拡張子が.pyのフ...
-
書いたり消したりできるラミネ...
-
「覚書」、「メモ」、「備忘録...
-
CD盤の表面
-
両面印刷するとき裏表とも罫線...
-
プロジェクタだと動画が映らない
-
字が下手すぎて祝儀袋を持って...
-
Wordで 文字の一部にモザイクを...
-
小6でこの絵上手いですか? ア...
-
VBAでメモ帳にコピペをしたいの...
-
メモ帳でタブ幅の設定はできる...
-
メモ帳のテキストがいつのまに...
-
LibreOffice Writer で線の太さ...
-
iPhoneのメモ帳を使ってますが...
-
ペンだこのようなものが親指の...
おすすめ情報