リストビューの文字列取得 Visual Basic 6.0 Visual Basic 2008

他のプロセスが所有するリストビューの項目文字列を
テキストボックスに取得します。

メニュー
ロジック説明
使用するAPI関数
フォーム構成
プログラム
 VB6ソース
 VB2008ソース
関連方式
リンクリスト


動作環境

取得タイミング

リストビュー(ListView) の上にマウスポインタが置かれた時。

ホットキー

ESCにより更新を停止することも可能。
WindowsNT系(32bit)用です。
95/98/Me、および、64bitCPUは本方式では不可

処理概要

無限ループ

リストビューから項目数/列数を取得

列項目はタブで、行項目は改行で区切る。

ESCキーが押されると取得ループ終了。

取得したデータをエクセルに貼り付けると、
タブ区切りなので、
それぞれの項目がセルに分割表示される。

実行イメージ

リストビューからの項目取得処理

リストビューの項目(行)数取得(SendMessage(hWnd,LVM_GETTITEMCOUNT))  − 行数が0の時は何もしない
リストビューヘッダのハンドルを取得( SendMessage(hWnd, LVM_GETHEADER))
リストビューヘッダの項目(列)数を取得(SendMessage(hWndHeader, HDM_GETITEMCOUNT, 0, ByVal 0&)) − 列数が0の時は何もしない

対象のプロセスID取得(GetWindowThreadProcessId)  ・・・ OpenProcessで必要
対象のプロセスが共有メモリへの読み書き(ReadProcessMemory/WriteProcessMemory)出来るようにする (OpenProcess)
共有メモリの確保(メッセージパラメータとデータ読込み用)(VirtualAllocEx

行数分ループ
  列数分ループ
     メッセージパラメータセット(取得情報種別、行インデックス、列インデックス、バッファアドレス、バッファサイ ズ)
     共有メモリにパラメータ書込み(WriteProcessMemory
     リストビューに依頼(SendMessage(hWnd, LVM_GETITEMW ・・・)
     共有メモリに書き込まれたデータを読込む(ReadProcessMemory
     データ整形
  Next 列
Next 行

共有メモリの開放 (VirtualFreeEx
    :プロセス間を跨いだデータの受け渡しには個別のプロセ ス内メモリは使用できない。
      本方法や、ファイルをメモリとして使用するメモリマップドファイルな どを使う必要がある。


使用するAPI関数

OpenProcess

 プロセスへのアクセスに関するオプションを、以下の組み合わせで指定して、プロセスハンドルを取得
PROCESS_VM_OPERATION   取得したハンドルを VirtualProtectEx 関数、及び WriteProcessMemory 関数で使用できるようにする
PROCESS_VM_READ 取得したハンドルを ReadProcessMemory 関数で使用できるようにする
PROCESS_VM_WRITE 取得したハンドルを WriteProcessMemory 関数で使用できるようにする

SendMessage

ウィンドウにメッセージを送信。
この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない。
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
           (ByVal hWnd As Long, _
            ByVal wMsg As Long, _
            ByVal wParam As Long, _
            ByVal lParam As Any) As Long
hWnd:ウィンドウハンドル(リスト ビューコントロールのウィンドウハンドル)
wMsg:メッセージコード
wParm:wParamパラメータ
lParm:lParamパラメータ (アドレス)

項目取得(LVM_GETITEMW)の場合のlParm の構成(wParmは使用しない)
 また、本処理で使用しない項目の記述は省略

Private Type LV_ITEM
    mask As Long        '有効メンバを示すフラグ(LVIF_TEXT=テキスト)
    iItem As Long       'アイテム(行)のインデックス(先頭が0)
    iSubItem As Long    'サブアイテム(列)インデックス(左端が0)
    state As Long       '
    stateMask As Long   '
    lpszText As Long    'アイテムの文字列
    cchTextMax As Long  'lpszTextのサイズ
    iImage As Long      '
    lParam As Long      '
    iIndent As Long     '
End Type

その他の関数

ホットキー関連:省略(「ウィンドウ列挙:getwindow」を参照)
ウィンドウ関連:同上

ォーム構成

 フォーム上に下記に示すコントロールを配置
コントロール配置 実行イメージ

フォームを追加し、下記のコントロールを配置
  コマンドボタン  1個
  ラベル      1個
  テキストボックス 1個 
MultiLine=True
              ScrollBar=3-両方 にしておく



動作確認は、「タスクマネージャ」「OutoLookExpress」「エクスプローラー-詳細」などで行えます。
  (上図右の実行イメージ)

プログラム

VB6ソースサンプルコードのダウンロードVB6.0

フォーム

標準モジュール


VB2008ソースサンプルコードのダウンロードVB2008

フォーム

標準モジュール


関連方式

コンボ/リストボックスの文字列取得 - 項目文字列をテキストボックスに取得
リストビューの文字列取得 - 他プロセスのリストビューの項目文字列を取得

×
PageTop