[[20191203130200]] 『Excel vbaで最前面に表示されているタスク名称取刀x(nabe_y) ページの最後に飛ぶ

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

 

『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 >


前回投稿を明記すると、話が通じやすいです。逆に省略すると、私の書いたコードなのに、貴方が考えたように見えてしまい、不愉快ですよ。[[20191202130953]]

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

大変失礼いたしました。
以後気を付けます。
(nabe_y) 2019/12/03(火) 13:58

コメント返信:

[ 一覧(最新更新順) ]


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