从listview

时间:2016-02-10 11:33:18

标签: c# listview

我从选择进程中获得一些窗口句柄,并且可以将它们放入列表框中。但由于我对列表框中显示的信息不满意,我决定使用listview。

private void doWindowListRefresh(object sender, EventArgs e)
{
    windowListView.Items.Clear();

    foreach (Process p in Process.GetProcesses().Where(pp => pp.MainWindowHandle != IntPtr.Zero && pp.ProcessName != "explorer"))
    {
        ListViewItem wlv = new ListViewItem(p.Id.ToString(),1);
        wlv.SubItems.Add(p.ProcessName);
        wlv.SubItems.Add(p.MainWindowTitle);
        /* want to add a handle here. may a hidden column as well */
        windowListView.Items.Add(wlv);
    }
}

我不得不说我不是C#专业人士! :D

所以我的主要问题是......

是否可以在listview中添加窗口句柄?

因为我想用选定的listview信息做一些事情。从listview直接检索windowhandle会更容易。不是从列表视图中自我...

ATM我这样做

private void button1_Click(object sender, EventArgs e)
{
    string processName = windowListView.SelectedItems[0].SubItems[1].Text;
        Process[] pro = Process.GetProcessesByName( processName );

    foreach(Process p in pro)
    {
        if(p.ProcessName == processName)
        {
            //MessageBox.Show(processName);

            SetWindowPos(p.MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
        }
    }
}

但是始终获得流程似乎并不是很好:)

1 个答案:

答案 0 :(得分:0)

是的,您只需要将IntPtr转换为字符串:

subitems: 
  {
    item1: true, 
    item2: 43, 
    item3: ['foo', 'bar', 'baz']
  }

获取wlv.SubItems.Add(p.MainWindowHandle.ToString()); 的IntPtr:

SetWindowPos