110,545
社区成员
发帖
与我相关
我的任务
分享
BOOL __stdcall SysListView32_SelectIndexItem(HWND hWnd, int iIndex)
{
BOOL bRet = FALSE;
DWORD dwProcessID;
DWORD dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
if (hProcess != NULL)
{
LPVOID lpRemoteBuffer = VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT,PAGE_READWRITE);
if (lpRemoteBuffer != NULL)
{
LVITEM lvItem;
lvItem.mask = LVIF_STATE;
lvItem.state = LVIS_SELECTED | LVIS_FOCUSED;
lvItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
if(WriteProcessMemory(hProcess, lpRemoteBuffer, &lvItem, sizeof(LVITEM), NULL))
{
bRet = SendMessage(hWnd, LVM_SETITEMSTATE, iIndex, (LPARAM)lpRemoteBuffer);
}
VirtualFreeEx(hProcess, lpRemoteBuffer, 0, MEM_RELEASE);
}
CloseHandle(hProcess);
}
return bRet;
}
int __stdcall SysListView32_FindStringIndex(HWND hWnd, char* pszItem)
{
int iRet = -1;
DWORD dwProcessID;
DWORD dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
if (hProcess != NULL)
{
LPVOID lpRemoteBuffer = VirtualAllocEx(hProcess, NULL, sizeof(LVFINDINFO) + 100, MEM_COMMIT,PAGE_READWRITE);
if (lpRemoteBuffer != NULL)
{
LVFINDINFO lvFI;
lvFI.flags = LVFI_PARTIAL;
lvFI.psz = (LPCTSTR)lpRemoteBuffer + sizeof(LVFINDINFO);
if(WriteProcessMemory(hProcess, lpRemoteBuffer, &lvFI, sizeof(LVFINDINFO), NULL))
{
if(WriteProcessMemory(hProcess, (LPTSTR)lpRemoteBuffer + sizeof(LVFINDINFO), pszItem, strlen(pszItem)+1, NULL))
{
iRet = SendMessage(hWnd, LVM_FINDITEM, -1, (LPARAM)lpRemoteBuffer);
}
}
VirtualFreeEx(hProcess, lpRemoteBuffer, 0, MEM_RELEASE);
}
CloseHandle(hProcess);
}
return iRet;
}
delegate void AddMsgDelegate(string msg);
public void DAddMsg(string msg)
{
if (richText_msg.InvokeRequired)
{
Invoke(new AddMsgDelegate(DAddMsg), new object[] { msg });
}
else
{
this.richText_msg.AppendText(msg);
}
}
在线程中调用DAddMsg(“123”)方法即可,记得线程的 IsBackground属性 = true;