【发布时间】:2016-04-28 14:19:26
【问题描述】:
所以我有这段代码可以使用 sendmessage 为另一个应用程序中的列表视图设置所有项目(甚至是一个项目,我声明了项目编号 3 的代码),我已经成功地获得了列表视图的项目窗口句柄和项目计数正确,但是当我使用 setitemstate 时,另一个应用程序给了我错误并关闭(鉴于我有另一个应用程序可以很好地完成这项工作,但我没有它的源代码)
这是我的代码:
if (windowName.Contains("Invite to Room")) {
IntPtr hwndChild0 = FindWindowEx(hWnd, IntPtr.Zero, "SysListView32", "");
int itemCount = SendMessage(hwndChild0, LVM_GETITEMCOUNT, IntPtr.Zero, IntPtr.Zero);
LV_ITEM lvItem = new LV_ITEM();
lvItem.Index = 3;
lvItem.SubIndex = 2;
lvItem.TextLength = 50;
lvItem.Mask = LVIF_STATE;
lvItem.State = LVIS_SELECTED;
lvItem.StateMask = LVIS_SELECTED;
SendMessage(hwndChild0, LVM_SETITEMSTATE, 3, IntPtr.Zero);
}
这是我的 LV_ITEM 结构
public struct LV_ITEM
{
public uint Mask;
public int Index;
public int SubIndex;
public int State;
public IntPtr StateMask;
public string Text;
public int TextLength;
public int ImageIndex;
public IntPtr LParam;
}
这是使用的声明(sendmessage 和 setitemstate)
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
public static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, string lParam);
private const uint LVM_FIRST = 0x1000;
private const uint LVM_SETITEMSTATE = (LVM_FIRST + 43);
有什么帮助吗?
编辑:
应用程序错误有一个日志文件,其中包含以下消息: "线程试图读取或写入它没有适当访问权限的虚拟地址"
【问题讨论】:
-
很好地说明它给出错误并关闭没有任何好处..实际错误是什么..?
-
没有错误,只是没有按照预期的那样做正确的行为
-
它是否给出错误?如果它给出一个错误,哪个?如果不是,什么是“不做正确的行为”?请说得更具体些。
-
@Gusman 好的,至于调试完全没有例外,对于其他应用程序,它给了我错误“致命异常”“Paltalk 遇到错误并即将关闭”
-
@Gusman 编辑了它标题:“致命异常”内容:“Paltalk 遇到错误并即将关闭”
标签: c# listview winapi sendmessage