我想获取QQ好友和群的列表
从窗口从端口获取都可以 望大家指教(干正事)我现在在一个群聊天窗口挂了一个钩子 能获取一个群成员列表的控件类:syslistview32
获取之后转换listctrl能获取成员人数 但是获取不了其他信息(可能是我对clistctrl了解少吧)算是两个问题吧 希望大家帮忙!~~~
从窗口从端口获取都可以 望大家指教(干正事)我现在在一个群聊天窗口挂了一个钩子 能获取一个群成员列表的控件类:syslistview32
获取之后转换listctrl能获取成员人数 但是获取不了其他信息(可能是我对clistctrl了解少吧)算是两个问题吧 希望大家帮忙!~~~
得.m_hWnd = hwnd
我是这么写的 但是就是弄不出来
大家帮我看看有什么问题 还有其他方法么 // 复制对象
CListView peopleList;
peopleList.m_hWnd = hwndList;
CListCtrl& pListCtrl = peopleList.GetListCtrl();
CListCtrl* showCtrl = (CListCtrl *)GetDlgItem(IDC_LIST_MEMBER); // 复制样式
// showCtrl->ModifyStyle(showCtrl->GetStyle(), 50210441);
// showCtrl->SetExtendedStyle(4); showCtrl->ModifyStyle(showCtrl->GetStyle(), pListCtrl.GetStyle());
showCtrl->SetExtendedStyle(pListCtrl.GetExtendedStyle()); // 获取列
int nColumn = pListCtrl.GetHeaderCtrl()->GetItemCount();
int i = 0; // 获得图像列表
m_imageList = pListCtrl.GetImageList(LVSIL_SMALL);
showCtrl->SetImageList(m_imageList, LVSIL_SMALL); // 设置头
HDITEM item;
for (i=0; i<nColumn; i++)
{
pListCtrl.GetHeaderCtrl()->GetItem(i, &item);
showCtrl->GetHeaderCtrl()->SetItem(i, &item);
} // 复制所有项
int j = 0;
int nRow = pListCtrl.GetItemCount();
LVITEM lvItem;
for (j=0; j<nRow; j++)
{
for (i=0; i<nColumn; i++)
{
lvItem.iItem = j;
lvItem.iSubItem = i;
pListCtrl.GetItem(&lvItem);
showCtrl->SetItem(&lvItem);
}
}
int j = 0;
int nRow = pListCtrl.GetItemCount();
LVITEM lvItem;
for (j=0; j<nRow; j++)
{
for (i=0; i<nColumn; i++)
{
lvItem.iItem = j;
lvItem.iSubItem = i;
pListCtrl.GetItem(&lvItem);
showCtrl->SetItem(&lvItem);
}
}
不对
HDITEM hdi;
enum { sizeOfBuffer = 1024 };
TCHAR lpBuffer[sizeOfBuffer];
bool fFound = false; hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = sizeOfBuffer; int iHeight = 0; for (i=0; (i < nCount); i++)
{
GetItem(i, &hdi);
pDCDst->DrawText(hdi.pszText, -1, &rectCalc, DT_LEFT | DT_CALCRECT | DT_WORDBREAK | DT_NOPREFIX | DT_EDITCONTROL);
}
我先看看你的代码
帮忙看一下: DWORD dwID;
GetWindowThreadProcessId(hwndList, &dwID);
if (dwID == 0)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
return;
}
HANDLE handle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwID);
if (handle == NULL)
{
MessageBox(_T("OpenProcess is error"));
return;
} LVITEM* newLVProcess = (LVITEM*)VirtualAllocEx(handle, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE );
char* newLVChar = (char*)VirtualAllocEx(handle, NULL, 5120*sizeof(char), MEM_COMMIT, PAGE_READWRITE );
if (newLVProcess == NULL || newLVChar == NULL)
{
MessageBox(_T("VirtualAllocEx"));
return;
}
LVITEM item;
item.mask = LVIF_TEXT;
item.pszText = newLVChar;
item.cchTextMax = 512;
item.iSubItem = 1;
WriteProcessMemory(handle, newLVProcess, &item, sizeof(LVITEM), NULL); int nCount = ListView_GetItemCount(hwndList);
char szBuffer[512];
int i = 0;
for (i=0; i<nCount; i++)
{
if (!::SendMessage(hwndList, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)newLVProcess))
(i<3)?MessageBox("SendMessage is False!"):0;
if (!ReadProcessMemory(handle, newLVChar, szBuffer, sizeof(szBuffer), NULL))
(i<3)?MessageBox("ReadProcessMemory is False"):0;
if (i < 3)
{
MessageBox(szBuffer);
if (szBuffer == NULL)
MessageBox("szBuffer is NULL!!~~");
}
}
CloseHandle(handle);
VirtualFreeEx(handle, newLVProcess, 0, MEM_RELEASE);
VirtualFreeEx(handle, newLVChar, 0, MEM_RELEASE);
不对不对
if (WriteProcessMemory(handle, newLVProcess, &item, sizeof(LVITEM), NULL))
MessageBox("WriteProcessMemory is False!");
这里就false了
分享一下代码(没加注释 sorry):
DWORD dwID;
GetWindowThreadProcessId(hwndList, &dwID);
if (dwID == 0)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
return;
}
HANDLE handle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwID);
if (handle == NULL)
{
MessageBox(_T("OpenProcess is error"));
return;
} LVITEM* newLVProcess = (LVITEM*)VirtualAllocEx(handle, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE );
char* newLVChar = (char*)VirtualAllocEx(handle, NULL, 512*sizeof(char), MEM_COMMIT, PAGE_READWRITE );
if (newLVProcess == NULL || newLVChar == NULL)
{
MessageBox(_T("VirtualAllocEx"));
return;
}
LVITEM item;
item.mask = LVIF_TEXT;
item.pszText = newLVChar;
item.cchTextMax = 512;
item.iSubItem = 0; int nCount = ListView_GetItemCount(hwndList);
char szBuffer[512];
int i = 0;
CListCtrl* showCtrl = (CListCtrl *)GetDlgItem(IDC_LIST_MEMBER);
for (i=0; i<nCount; i++)
{
item.iItem = i;
WriteProcessMemory(handle, newLVProcess, &item, sizeof(LVITEM), NULL);
ListView_GetItem(hwndList, newLVProcess);
ReadProcessMemory(handle, newLVChar, szBuffer, 512, NULL);
if (i < 3)
{
MessageBox(szBuffer);
if (szBuffer == NULL)
MessageBox("szBuffer is NULL!!~~");
}
}
CloseHandle(handle);
VirtualFreeEx(handle, newLVProcess, 0, MEM_RELEASE);
VirtualFreeEx(handle, newLVChar, 0, MEM_RELEASE);
里面的列表应该是TREE吧 但是他那导航栏用什么做的呢