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)
-
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
-
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
-
4
VBで他アプリの「syslistview32」のテキストを取得したい
Visual Basic(VBA)
-
5
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
6
SendMessageが失敗するときがある
C言語・C++・C#
-
7
リストビューのハンドルについて
C言語・C++・C#
-
8
デスクトップ上のアイコンの位置の取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データ数をカウントしたいのですが
-
VB.NETで DataRow()を利用して...
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
count(*)で取得した値をJAVAの...
-
ListViewで複数選択された項目...
-
JFreeChartの折れ線グラフの太...
-
JavaScriptでWindowsログオンID...
-
VBScriptで数値にコンマを付け...
-
Struts2 <s:select>タグの値取...
-
getParameter と getAttribut...
-
vbaで、オートシェイプ文字幅と...
-
EXCELのリストボックスを選択し...
-
ActiveWorkbook.Path取得できない
-
ExcelでNTPサーバーから時刻を...
-
VBA Shapesの座標からセル位置...
-
IFRAME内のURLを取得したです。
-
エクセルVBAで複数選択できるよ...
-
like演算子内に変数って使えな...
-
VBでFTPサーバ側のファイルの更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
データ数をカウントしたいのですが
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
Flexgridで選択行の列の値を取...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
JavaScriptでWindowsログオンID...
-
時間を分に変換するプログラム
-
エクセルVBAで複数選択できるよ...
-
Spreadの選択行の取得について
-
JavaScriptにおいてコンピュー...
-
コンボボックス表示文字列を取...
-
VBA リストボックス内の値を複...
-
利用者側のMACアドレスを取得し...
-
「Excel VBA」 Webクエリ マク...
-
Yahoo! JAPANのID取得について
おすすめ情報