以下のコードをExcel2013で実行するとメモ帳でスペースキーが無限に押されます。
そしてフリーズするのですが、WM_CHARって押しっぱなしなんですか?
解除するにはどうしたろいいのでしょう?いや、どこで調べたら答えが見つかりますか?
Option Explicit
'クラス名、キャプションから子ウィンドウのハンドルを取得
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
' ウィンドウにメッセージを送る関数の宣言
Private Declare Function SendMessage Lib "user32.dll" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
' ウィンドウにメッセージを送る関数の宣言
Private Declare Function SendMessageAny Lib "user32.dll" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
Public Const WM_IME_CHAR = &H286
Public Const WM_SETTEXT = &HC
Public Const WM_CHAR = &H102
Private Const WM_COPY = &H301
Private Const WM_CUT = &H300
Private Const WM_PASTE = &H302
Private Const WM_UNDO = &H304
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const VK_RETURN = &HD
Private Const VK_MENU = &H12
Private Const VK_SPACE = &H20
Sub TEST()
Dim lnghWnd As Long 'トップレベル(親)のウィンドウハンドル
Dim lnghWndTarget As Long 'ターゲット(子)のウィンドウハンドル
Dim lngRc As Long 'APIの返却値
' メモ帳を起動
lngRc = Shell(Environ("WINDIR") & "\NOTEPAD.EXE", vbNormalFocus) '起動
Sleep 100 '0.1秒待つ(起動完了)
' ターゲットウィンドウのハンドルを取得
lnghWnd = FindWindowEx(0, 0, "Notepad", "無題 - メモ帳") '「メモ帳」のウィンドウハンドル
lnghWndTarget = FindWindowEx(lnghWnd, 0, "Edit", "") '子ウィンドウのEdit
' 送信
Dim strDtSrc As String
Dim strDt As String
Dim lngDt As Long
Dim i As Long
Cells(1, 1) = 1
Cells(1, 1).Copy
lngRc = SendMessage(lnghWndTarget, WM_PASTE, 0, 0)
lngRc = SendMessage(lnghWndTarget, WM_CHAR, VK_SPACE , 0)
Sleep 100
DoEvents
End Sub
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは。
SendMessage で何をされようとしているか分かりませんが、解除と言われても、
>lngRc = SendMessage(lnghWndTarget, WM_CHAR, VK_SPACE , 0)
WM_CHARで、VK_SPACE のキーコードを送るよりも、
lngRc = SendMessage(lnghWndTarget, WM_KEYDOWN, VK_SPACE, 0)
lngRc = SendMessage(lnghWndTarget, WM_KEYUP, VK_SPACE, 0)
とするか、
実際に、
PostMessage lnghWndTarget, WM_CHAR, Asc(" "), 0&
のどちらかのほうがよいのでは?
おっしゃる通りです。しかし、どのキーでも無限ループするんです。
情報を探しているとみなさん普通に
SendMessage(hWnd, WM_CHAR, ????? , 0)
出来ているみたいなので、なぜなのか疑問なのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
WinAPIで電卓をクリック
Visual Basic(VBA)
-
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
-
4
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
5
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
6
C言語でwin32apiを使ってnotepadにpostmessageでcontro
C言語・C++・C#
-
7
ウインドウハンドルのつかみ方について質問です。
Visual Basic(VBA)
-
8
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
9
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
10
親ウインドウにあるOKボタンを押す方法
Visual Basic(VBA)
-
11
VBA(excel)でグラフのデータ範囲の取得
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ゲームでは結局どっちが良いの?
-
VBA .Value=.Value ?
-
UWSCで特定のChromeのタブをア...
-
GLUTでのウィンドウの左上のア...
-
Console.WriteLine で表示されない
-
「&HFFFF」「&H1A」とは?
-
CTなどでいう,ウィンドウレベ...
-
ラジオボタンの初期指定
-
エクセルで1行目から3行目が消...
-
Excelの上下を固定したい
-
Vba LongPtrについて教えてくだ...
-
検索の画面がでなくなってしま...
-
CreateWindow で作ったウィンド...
-
最大化と最小化ボタン
-
名前を付けて保存のウィンドウ...
-
MDIでのダイアログ生成
-
コンソールアプリケーションで...
-
作成したウインドウのサイズを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
Alt+P,Alt+NをPostmessageで送...
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報