修改他程序 ListView 項目文字,核心差異在於發送 LVM_SETITEMTEXT 訊息,且需向目標進程寫入字串緩衝區。步驟如下:
LVITEM 結構與字串緩衝區(pszText 指向此緩衝區)。LVITEM:設定 iItem、iSubItem、pszText 指向遠端字串緩衝區位址。"天津 趙春生")寫入遠端字串緩衝區(WriteProcessMemory)。LVITEM 結構至遠端記憶體。LVM_SETITEMTEXT 訊息。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);
LVITEM 的 mask 成員預設為 0,若目標程式檢查 mask 需額外設定 LVIF_TEXT。TVM_SETITEM)等結構化控件。此技術結合前文選取功能,可構建完整的跨進程 ListView 資料操作工具。