[[20210504195614]] 『プラグインが入った別ブックにALTキーなどを送っax(tracky) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『プラグインが入った別ブックにALTキーなどを送って操作したい』(tracky)

プラグインが入った別ブック"Data.xlsx"に、操作用のブックからALTキーなどを送ってプラグインの操作を、バックグランドで行いたいのでSendKeyやkeybd_evenを使わない方法を検討しています。

<問題点>
下記コードで別ブック(Data.xlsx)の操作をトライしているのですが、ALTキー,Fキー いずれも入力できません。
どこを修正すればよいかご教授頂けますでしょうか?
よろしくお願いします。


SubTest()
hApp = FindWindow(vbNullString, "Data.xlsx - Excel")
Res = SetForegroundWindow(hApp) '最前面

Res1 = PostMessage(hApp, WM_SYSKEYDOWN, VK_MENU, 0) 'ALT 反応なし
Res2 = PostMessage(hApp, WM_KEYDOWN, VK_MENU, 0) 'ALT 反応なし
Res3 = PostMessage(hApp, WM_KEYDOWN, VK_F, 0) 'F 反応なし
End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


試してみた、いちおう動いている

'32bit
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'
Private Declare Function SetForegroundWindow Lib "user32" (ByVal ms As Long) As Long
'
Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lparam As Long) As Long
'
Sub test()

Const WM_SYSKEYDOWN = &H104
Const WM_SYSKEYUP = &H105
Const VK_MENU = &H12
Const VK_F = &H46

Dim hApp, Res, Res1, Res2, Res3, Res4

hApp = FindWindow(vbNullString, "データシート.xlsx - Excel")
Debug.Print "hApp>", hApp
Res = SetForegroundWindow(hApp) '最前面
Debug.Print "res>", Res
Res1 = PostMessage(hApp, WM_SYSKEYDOWN, VK_MENU, 0)
Debug.Print "res1>", Res1
Res2 = PostMessage(hApp, WM_SYSKEYDOWN, VK_F, 0)
Debug.Print "res2>", Res2
Res3 = PostMessage(hApp, WM_SYSKEYUP, VK_F, 0)
Debug.Print "res3>", Res3
Res4 = PostMessage(hApp, WM_SYSKEYUP, VK_MENU, 0)
Debug.Print "res4>", Res4

End Sub

(ふむ〜) 2021/05/05(水) 16:41


ふむ〜さん、ご返事ありがとうございます。
ALT+Fキーを押すときはFキーもWM_SYSKEYDOWNを使う必要があったのですね。

もう一例、画面分割をするため
1ALT+Wキー押下
2Sキー押下
を試したのですがSキーを押下できません。3ケ以上のキーを押下するのはどうすればいいのでしょうか?
よろしくお願いします。


Sub test3()
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const WM_SYSKEYDOWN = &H104
Const WM_SYSKEYUP = &H105
Const VK_MENU = &H12
Const VK_W = &H57
Const VK_S = &H53

Dim hApp, Res, Res1, Res2, Res3, Res4, Res5, Res6
hApp = FindWindow(vbNullString, "データシート.xlsx - Excel")
Debug.Print "hApp>", hApp
Res = SetForegroundWindow(hApp) '最前面
Debug.Print "res>", Res

'1 Alt+Wキー押下
Res1 = PostMessage(hApp, WM_SYSKEYDOWN, VK_MENU, 0)
Debug.Print "res1>", Res1
Res2 = PostMessage(hApp, WM_SYSKEYDOWN, VK_W, 0)
Debug.Print "res2>", Res2
Res3 = PostMessage(hApp, WM_SYSKEYUP, VK_W, 0)
Debug.Print "res3>", Res3
Res4 = PostMessage(hApp, WM_SYSKEYUP, VK_MENU, 0)
Debug.Print "res4>", Res4

'2 Sキー押下
Res5 = PostMessage(hApp, WM_KEYDOWN, VK_S, 0)
Debug.Print "res5>", Res5
Res6 = PostMessage(hApp, WM_KEYUP, VK_S, 0)
Debug.Print "res6>", Res6

End Sub
(tracky) 2021/05/05(水) 22:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.