« ガス抜き | トップページ | 寒すぎて »

2021年12月 4日 (土)

Alt+Tabをした時に表示されるウインドウの順番

最近は、朝の寒さで目が覚める。(苦笑)

いい天気だ。

 

少し前に、Alt+Tabをした時に、自分の作ったプログラムを反応させるやり方について書いた。

どれだけ需要があるのかわからないけれど、それに関連することを書いてみよう。

Alt+Tabをした時に表示されるウインドウの順番、これ、Z Orderで取得出来るとのこと。

この時のZ Orderというのは、Windows OSが管理している、ウインドウ(プログラム)の重なりの順番のこと。

最近見ていたもの(扱ったもの)は、Z Orderの番号が小さい、つまり、重なりで言えば、上の方にある。

これ、プログラムでどうやって取るのかな?と思って検索してみるとあった。

c# - Retrieve order of open windows as ordered in the Alt-Tab list? - Stack Overflow

この関数を使えば、ものすごく簡単にZ Orderの値を取得することが出来る。

上記は、C#の例なので、VB.NETで書いておこう。

<DllImport("user32.dll", SetLastError:=True)>
Private Shared Function GetWindow(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As IntPtr
End Function

Public Shared Function GetZOrder(ByVal p As Process) As Integer
Dim hWnd As IntPtr = p.MainWindowHandle
Dim z = 0
Dim h = hWnd

While h <> IntPtr.Zero
    z += 1
    h = GetWindow(h, 3)
End While

Return z
End Function

「GetZOrder」関数に、プロセスを渡してあげると、そのプロセスが何番目に出現するかを見て、それをZ Orderの値として戻している。

呼び出し元は、

For Each p As Process In Process.GetProcesses
Try
If p.MainWindowTitle = Nothing Then
Else
    Dim zorder = GetZOrder(p)
    '以下、必要な処理
End If

Catch ex As Exception
End Try
Next

こんな感じ。適当に書いているけれど。

アドミン権限のないユーザで実行すると、システムプロセスを取得しようとしてエラーになるので、Try Catchを入れておくと無難。

上記は、ウインドウにタイトルのあるものだけを取得している。

あとは、自分の思うように処理すればいい。

これで、自分の作ったプログラムでも、Alt+Tabと同じような順番に表示(処理)させることが出来るようになった。

|

« ガス抜き | トップページ | 寒すぎて »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« ガス抜き | トップページ | 寒すぎて »