[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Excel vbaで最前面に表示されているタスク名称取得』(nabe_y)
Excel vba
ih = FindWindow(vbNullString, "納品書") GetWindowRect ih, R SetWindowPos ih, HWND_TOPMOST, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, 0
以上のコードで、"納品書"画面を最前面に表示しようとすると、
問題なく表示される場合と、表示されない場合が発生してしまいます。
よって、Excelvbaで、最前面に表示されているタスク名称取得したい。
どうぞよろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Windowsって、素早く複数アプリを操作すると、クリックした順番と表示する順番が食い違う場合があるのですよ。 OSの問題であり、アプリでどうこうできるものでは無いです。 なにが最前面なのか、OSは管理していないと思うので(管理していたならば、TOP指定したのに2番手になっているとか、トップに見えるのにキー入力すると2番目のアプリに反映されるとかしないでしょう)、調べようがないと思います。 だから、HWND_TOPで駄目ならHWND_TOPMOSTで、と書いたのですが、試しましたか?
最前面になりっ放しにしたくないならば、最前面にした直後に、最前面解除すれば良いでしょう。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetWindowPos Lib "user32" _ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _ ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _ ByVal wFlags As Long) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Const HWND_TOP = 0 Const HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2
Sub test() Dim ih As Long Dim R As RECT
Shell "notepad.exe", vbNormalFocus ih = FindWindow(vbNullString, "無題 - メモ帳") GetWindowRect ih, R SetWindowPos ih, HWND_TOPMOST, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, 0 DoEvents SetWindowPos ih, HWND_NOTOPMOST, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, 0 End Sub (???) 2019/12/03(火) 13:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.