我从选择进程中获得一些窗口句柄,并且可以将它们放入列表框中。但由于我对列表框中显示的信息不满意,我决定使用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);
}
}
}
但是始终获得流程似乎并不是很好:)
答案 0 :(得分:0)
是的,您只需要将IntPtr转换为字符串:
subitems:
{
item1: true,
item2: 43,
item3: ['foo', 'bar', 'baz']
}
获取wlv.SubItems.Add(p.MainWindowHandle.ToString());
的IntPtr:
SetWindowPos