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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
共有メモリの使い方について
Visual Basic(VBA)
-
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
-
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
-
4
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
5
SendMessageが失敗するときがある
C言語・C++・C#
-
6
他アプリの操作(メニューバー)
Visual Basic(VBA)
-
7
デスクトップ上のアイコンの位置の取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
count(*)で取得した値をJAVAの...
-
VB.NETで DataRow()を利用して...
-
JavaScriptでWindowsログオンID...
-
VBA:小数点以下の数字を取得で...
-
getParameter と getAttribut...
-
データ数をカウントしたいのですが
-
NTPサーバから時刻を取得する
-
jQueryによるajaxで、CGIからの...
-
利用者側のMACアドレスを取得し...
-
コンボボックス表示文字列を取...
-
like演算子内に変数って使えな...
-
整数の桁数が取得できません
-
PCインストール済みのアプリケ...
-
LAN内接続マシン数及びIP、マシ...
-
URIでのページの移動について
-
ディスプレイの表示可能な解像...
-
VBA リストボックス内の値を複...
-
JavaScriptでリンク先やリモー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
count(*)で取得した値をJAVAの...
-
データ数をカウントしたいのですが
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
Flexgridで選択行の列の値を取...
-
エクセルVBAで複数選択できるよ...
-
JavaScriptでWindowsログオンID...
-
利用者側のMACアドレスを取得し...
-
郵便番号検索APIにてget Elemen...
-
COMポート 名前を取得する方法
-
コンボボックス表示文字列を取...
-
VBA Shapesの座標からセル位置...
-
Spreadの選択行の取得について
-
VBScriptで数値にコンマを付け...
-
C言語におけるコンピュータ名・...
-
Excel VBA でログインしてい...
おすすめ情報