![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.1ベストアンサー
- 回答日時:
>SendMessageを使用するのだと思いますが
SendMessageを利用するのであれば、共有メモリを利用します。
最初に
http://oshiete1.goo.ne.jp/kotaeru.php3?q=817941
の#2の参考URLを見てから#2の回答を見てください。
CをVB化しています。
(実を言うと、これ私が別のメーリングリストで公開したのに非常に似ているのですが^^;)
あとはLVM_GETITEMを確保した共有メモリ部に、書き込む処理を行っていきます。
共有メモリを利用するには、OS別の方法を考慮しなければならないのです。
SendMessage以外の別方法が手元にあるので、それを張ってきますね^^
デスクトップもsyslistview32でできてますので、それを捕らえる方法です。
要参照設定
oleacc.dll
(NT4ならばService Pack 6a)
(Win98ならば `ユーザ補助`をインストール)
んでもってサンプル
Option Explicit
Private Type UUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Const CHILDID_SELF = 0&
Private Const OBJID_CLIENT = &HFFFFFFFC
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal hWnd As Long, _
ByVal dwObjectID As Long, _
ByRef riid As UUID, _
ByRef ppvObject As Any) As Long
Private IID_IAccessible As UUID
Private Enum NVADIRConstants
NAVDIR_MIN
NAVDIR_UP
NAVDIR_DOWN
NAVDIR_LEFT
NAVDIR_RIGHT
NAVDIR_NEXT
NAVDIR_PREVIOUS
NAVDIR_FIRSTCHILD
NAVDIR_LASTCHILD
NAVDIR_MAX
End Enum
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Main()
Dim lngWnd As Long
Dim colWk As Collection
Dim i As Integer
Call UUID_Init
lngWnd = GetSysLVHwnd
If Not GetListViewItems(lngWnd, colWk) Then
MsgBox "失敗"
End If
For i = 1 To colWk.Count
Debug.Print colWk(i)
Next i
End Sub
Private Sub UUID_Init()
With IID_IAccessible
.Data1 = &H618736E0
.Data2 = &H3C3D
.Data3 = &H11CF
.Data4(0) = &H81
.Data4(1) = &HC
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H38
.Data4(6) = &H9B
.Data4(7) = &H71
End With
End Sub
Private Function GetSysLVHwnd() As Long
Dim h As Long
h = FindWindow("Progman", vbNullString)
h = FindWindowEx(h, 0, "SHELLDLL_defVIEW", vbNullString)
GetSysLVHwnd = FindWindowEx(h, 0, "SysListView32", vbNullString)
End Function
Private Function GetListViewItems(ByVal inWnd As Long, Optional otCol As Collection) As Boolean
Dim objAcc As IAccessible
Dim varChild As Variant
Set otCol = Nothing
Call AccessibleObjectFromWindow(inWnd, OBJID_CLIENT, IID_IAccessible, objAcc)
If objAcc Is Nothing Then
Exit Function
End If
Set otCol = New Collection
varChild = objAcc.accNavigate(NAVDIR_FIRSTCHILD, CHILDID_SELF)
Do Until IsEmpty(varChild)
otCol.Add objAcc.accName(varChild)
varChild = objAcc.accNavigate(NAVDIR_NEXT, varChild)
Loop
Set objAcc = Nothing
GetListViewItems = True
End Function
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=817941
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
共有メモリの使い方について
Visual Basic(VBA)
-
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
-
4
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
-
5
VBで他アプリの「syslistview32」のテキストを取得したい
Visual Basic(VBA)
-
6
リストビューのハンドルについて
C言語・C++・C#
-
7
デスクトップ上のアイコンの位置の取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
VBScriptで数値にコンマを付け...
-
コンボボックス表示文字列を取...
-
データ数をカウントしたいのですが
-
「Excel VBA」 Webクエリ マク...
-
VBA:小数点以下の数字を取得で...
-
count(*)で取得した値をJAVAの...
-
Active directoryの全グループ取得
-
LAN内接続マシン数及びIP、マシ...
-
Yahoo! JAPANのID取得について
-
JavaScriptにおいてコンピュー...
-
ListView 項目の選択/選択解除...
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
アクセスしてきたコンピュータ...
-
ExcelでNTPサーバーから時刻を...
-
like演算子内に変数って使えな...
-
getParameter と getAttribut...
-
eclipse java クライアントの...
-
vbaで、オートシェイプ文字幅と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
データ数をカウントしたいのですが
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
Flexgridで選択行の列の値を取...
-
ListViewで複数選択された項目...
-
like演算子内に変数って使えな...
-
getParameter と getAttribut...
-
JSP+Servletでのページングの常識
-
JavaScriptでWindowsログオンID...
-
利用者側のMACアドレスを取得し...
-
Spreadの選択行の取得について
-
Excel VBA でログインしてい...
-
コンボボックス表示文字列を取...
-
C言語におけるコンピュータ名・...
-
「Excel VBA」 Webクエリ マク...
-
エクセルVBAで複数選択できるよ...
-
VBScriptで数値にコンマを付け...
おすすめ情報