能力值:
( LV2,RANK:10 )
|
-
-
2 楼
http://msdn.microsoft.com/zh-cn/subscriptions/downloads/cc164095.aspx
这里的文章可能对你有帮助。去看看吧
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我看不懂呢,不过还是要谢谢你。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
首先获取SysListView32的句柄(hHwnd)
可以用FindWindow获取。
我觉得用鼠标钩子很方便,拦截到鼠标左击的时候就可以获得SysListView32了。
获得hHwnd后,使用SendMessage获取选中的文件。
int iItem=::SendMessage(mHwnd, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
//iItem是文件在SysListView32的索引
然后,根据索引获得文件名
ListGetText(mHwnd,iItem,Buf);
ListGetText函数如下:
void ListGetText(HWND hWnd, int iItem,char *pName)
{
const int BUFSIZE = 1024;
char buf[BUFSIZE];
DWORD dwProcess;
HANDLE hProcess;
LVITEM* pItem = (LVITEM*)buf;
::GetWindowThreadProcessId(hWnd, &dwProcess);
// 申请内存
hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, false, dwProcess);
LPLVITEM pTemp = (LPLVITEM)::VirtualAllocEx(hProcess, 0, BUFSIZE, MEM_COMMIT, PAGE_READWRITE);
memset(pItem, 0, sizeof(buf));
pItem->pszText = (char*)((char*)pTemp + sizeof(LVITEM));
pItem->cchTextMax = BUFSIZE - sizeof(LVITEM);
pItem->iSubItem = 0; //列
pItem->mask = LVIF_TEXT;
DWORD dWord = 0;
::WriteProcessMemory(hProcess, pTemp, pItem, sizeof(buf), &dWord);
int nChar = ::SendMessage(hWnd,LVM_GETITEMTEXT,(WPARAM)iItem, (LPARAM)pTemp);
::ReadProcessMemory(hProcess, pTemp, pItem, sizeof(buf), &dWord);
pItem->pszText = (char*)((char*)pItem + sizeof(LVITEM));
// 释放内存
::VirtualFreeEx(hProcess, pTemp, BUFSIZE, MEM_RELEASE);
::CloseHandle(hProcess);
sprintf(pName, "%s", pItem->pszText);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
很有用的。不错啊。
|