C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: タスクバーの情報を取得したい


(過去ログ 57 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■32597 / inTopicNo.1)  タスクバーの情報を取得したい
  
□投稿者/ tanaka (1回)-(2009/02/10(Tue) 15:21:20)

分類:[ASP.NET (VB)] 

こんにちは。
WindowsXP+VB.NET2005でWindowsアプリケーションを作成しています。

マウスポインタ下のタスクバーのボタンの情報を取得し、
そのボタンのアプリケーションのハンドルが取得できないかと試していたのですが、
まず、タスクバーに表示されているボタンを取得しようと、WindowFromPointで
試したのですが、WindowFromPointでは、タスクバー全体のハンドルは取得できるのですが、
個々のボタン(?)の情報を取得するに至りませんでした。

タスクバーのボタンの情報を取得するにはどうすればよいのでしょうか。
また、その情報より、対象のアプリケーションを判断することは可能でしょうか

よろしくお願い致します。
引用返信 編集キー/
■32598 / inTopicNo.2)  Re[1]: タスクバーの情報を取得したい
□投稿者/ aetos (98回)-(2009/02/10(Tue) 15:32:07)
aetos さんの Web サイト
No32597 (tanaka さん) に返信
> タスクバーのボタンの情報を取得するにはどうすればよいのでしょうか。
> また、その情報より、対象のアプリケーションを判断することは可能でしょうか

どっちもたぶん無理。

今この返信を書いている環境(WinXP Pro SP3 非VisualStyle)では、タスクバーボタン部はツールバーになっています。
各タスクバーボタンが個別のウィンドウハンドルを持ってはいません。
ツールバーと決め打ちしていいのなら、ツールバーのボタン情報を取得するメッセージを投げてやればいいのですが、実際のコントロールが何かは、OS によってコロコロ変わります。
OS ごとにボタン情報を取得する方法が異なってしまい、いい方法とは言えません。

後者は、その情報を取得するための API がありませんし、Windows XP 以降、複数のタスクバーボタンがグループ化されたりしますから、より困難です。
引用返信 編集キー/
■32601 / inTopicNo.3)  Re[1]: タスクバーの情報を取得したい
□投稿者/ 魔界の仮面弁士 (993回)-(2009/02/10(Tue) 16:51:42)
No32597 (tanaka さん) に返信
> WindowsXP+VB.NET2005でWindowsアプリケーションを作成しています。

では何故、
> 分類:[ASP.NET (VB)]
になっているのでしょう? (^^;

> タスクバーのボタンの情報を取得するにはどうすればよいのでしょうか。
ボタン名だけで良ければ:

Public Class Form1
 Private Structure PointAPI
  Public X As Integer
  Public Y As Integer
  Shared Widening Operator CType(ByVal p As Point) As PointAPI
   Dim r As PointAPI
   r.X = p.X
   r.Y = p.Y
   Return r
  End Operator
 End Structure

 Private Declare Unicode Function AccessibleObjectFromPoint Lib "Oleacc" _
  (ByVal xy As PointAPI, _
   ByRef ppAcc As Accessibility.IAccessible, _
   ByRef pvarChild As Object) As Integer

 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
  Dim acc As Object = Nothing
  Dim child As Object = Nothing

  AccessibleObjectFromPoint(Cursor.Position, acc, child)
  Dim a As Accessibility.IAccessible = TryCast(acc, Accessibility.IAccessible)
  If a IsNot Nothing Then
   Label1.Text = a.accName(child)
   System.Runtime.InteropServices.Marshal.ReleaseComObject(a)
  Else
   Label1.Text = ""
  End If
 End Sub
End Class
引用返信 編集キー/
■32613 / inTopicNo.4)  Re[2]: タスクバーの情報を取得したい
□投稿者/ 渋木宏明(ひどり) (1076回)-(2009/02/10(Tue) 18:52:01)
渋木宏明(ひどり) さんの Web サイト
> ボタン名だけで良ければ:

Windows 7 では…
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -