在列表视图中保存 p.MainWindowHandle 中的窗口句柄

本文关键字:MainWindowHandle 窗口句柄 保存 列表 视图 | 更新日期: 2023-09-27 18:34:10

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

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中添加窗口句柄?

因为我想对选定的列表视图信息做一些事情。直接从列表视图中检索窗口句柄会更容易。不是从列表查看它自己...

自动取款机 我正在这样做

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);
        }
    }
}

但是一直获得流程似乎不是很好:)

在列表视图中保存 p.MainWindowHandle 中的窗口句柄

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

wlv.SubItems.Add(p.MainWindowHandle.ToString());

要取回SetWindowPos的 IntPtr:

 IntPtr hwnd = new IntPtr(Convert.ToInt32(windowListView.SelectedItems[0].SubItems[3].Text));
 SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
相关文章:
  • 没有找到相关文章