在列表视图中保存 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);
}
}
}
但是一直获得流程似乎不是很好:)
是的,你只需要将 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);