首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

跨進程修改 ListView 控件項目文字內容

     編輯:關於VC++

與選取項目類似的跨進程寫入技術

修改他程序 ListView 項目文字,核心差異在於發送 LVM_SETITEMTEXT 訊息,且需向目標進程寫入字串緩衝區。步驟如下:

  1. 取得目標視窗與進程句柄(同前文)。
  2. 在目標進程配置兩塊記憶體:LVITEM 結構與字串緩衝區(pszText 指向此緩衝區)。
  3. 準備本地 LVITEM:設定 iItem、iSubItem、pszText 指向遠端字串緩衝區位址。
  4. 將欲寫入字串(如 "天津 趙春生")寫入遠端字串緩衝區(WriteProcessMemory)。
  5. 寫入 LVITEM 結構至遠端記憶體。
  6. 發送 LVM_SETITEMTEXT 訊息。
  7. 釋放兩塊遠端記憶體。

關鍵程式碼片段

char str_MyItemText[12] = "天津 趙春生"; // 必須以 null 結尾,長度含結尾符
LVITEM lvitem = {0};
lvitem.iSubItem = 0; // 第一欄
lvitem.pszText = p_MyItemText; // 遠端字串緩衝區位址

WriteProcessMemory(hProcess, p_MyItemText, str_MyItemText, 12, NULL);
WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
SendMessage(hwnd, LVM_SETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);

實作細節補充

  • 字串緩衝區大小需足夠容納目標字串及結尾 null,範例配置 12 位元組。
  • LVITEM 的 mask 成員預設為 0,若目標程式檢查 mask 需額外設定 LVIF_TEXT。
  • 同樣適用於樹狀視圖(TVM_SETITEM)等結構化控件。
  • 若目標進程為 64 位元,指標大小不同,需分別編譯 32/64 位元版本或使用 WoW64 相關 API。

此技術結合前文選取功能,可構建完整的跨進程 ListView 資料操作工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved