1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| //LVITEM local
LVITEM LvItem = {0};
LvItem.cchTextMax=256;
LvItem.mask=LVIF_TEXT|LVIF_IMAGE;
LvItem.iItem=0; // choose item
LvItem.iSubItem=0; // Put in first coluom
LvItem.pszText=NULL;
LvItem.iImage=NULL;
LPTSTR sczText = TEXT("Item 1"); // Text to display
g_hinstt = GetModuleHandle(NULL);
if(!g_hinstt)
MessageBox(NULL,TEXT("g_hinstt failed"),TEXT(""),MB_OK);
HIMAGELIST hImageListSmall = ImageList_Create(16,16,ILC_COLORDDB|ILC_MASK,14,1);
HBITMAP hBitmapS = LoadBitmap(g_hinstt,MAKEINTRESOURCE(IDR_LGICONS));
if(!hBitmapS)
MessageBox(NULL,TEXT("LoadBitmap failed"),TEXT(""),MB_OK);
// Add images to image list
ImageList_AddMasked(hImageListSmall,hBitmapS,RGB(0,255,255));
DeleteObject(hBitmapS);
int nimage=1;
//Pointeurs distants
LPVOID pFarLvItem = NULL;
LPVOID pFarText = NULL;
LPVOID pFarImage = NULL;
LONG LRet=0;
LPVOID lpData, lplvItem;
//Ouverture processus
HANDLE hProcess = NULL;
DWORD dwProcessId = 0;
DWORD dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
//Debug
{
DWORD dwThisProcessId = GetCurrentProcessId();
DWORD dwThisThreadId = GetCurrentThreadId();
//_tprintf(TEXT("MMC process: %lu - This process: %lu\n"), dwProcessId, dwThisProcessId);
//_tprintf(TEXT("MMC UI thread: %lu - This thread: %lu\n"), dwThreadId, dwThisThreadId);
}
hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
if(hProcess==NULL)
MessageBox(NULL,TEXT("Process not open"),TEXT(""),MB_OK);
//Allocation de LvItem
pFarLvItem = VirtualAllocEx(hProcess, 0, sizeof(LVITEM)+256, MEM_COMMIT, PAGE_READWRITE);
if(pFarLvItem == NULL)
_tprintf(_T("Erreur VirtualAllocEx\n"));
pFarText = ((LPLVITEM)pFarLvItem) + 1;
pFarImage=((LPLVITEM)pFarLvItem) + 2;
//Initialisation des pointeurs
LvItem.pszText = (LPTSTR)pFarText;
LvItem.iImage = (int)pFarImage;
//Ecriture
WriteProcessMemory(hProcess, pFarLvItem, &LvItem, sizeof(LVITEM), &dwret);
WriteProcessMemory(hProcess, pFarText, sczText, _tcslen(sczText)*sizeof(TCHAR), &dwret);
WriteProcessMemory(hProcess, pFarImage,(LPVOID) nimage, sizeof(int), &dwret);
SendMessage(hwnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_SMALL, (LPARAM)hImageListSmall);
LRet=GetLastError();
_tprintf(_T("LRet=%d\n"),LRet);
_tprintf(_T("pFarImage=%d , nimage=%d"),pFarText,nimage);
//Update item on listview
SendMessage(hwnd,LVM_SETITEM,0,(LPARAM)pFarLvItem); |
Partager