0
我有一個有兩個不同句柄的進程。我想根據他們的處理ID關閉一個或另一個。有沒有辦法在C#中做到這一點。如何關閉C#中的進程句柄
我有一個有兩個不同句柄的進程。我想根據他們的處理ID關閉一個或另一個。有沒有辦法在C#中做到這一點。如何關閉C#中的進程句柄
使用此:
public partial class TestClass {
[DllImport("user32.dll")]
static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam);
public static void TestMethod() {
var targetName="AcroRd32.exe";
var processArray=(
from process in Process.GetProcesses()
let moduleName=(new Func<Process, String>(x => {
try {
return x.MainModule.ModuleName;
}
catch(Win32Exception e) {
return default(String);
}
}))(process)
where null!=moduleName
where 0==String.Compare(targetName, moduleName, true)
select process).ToArray();
EnumWindows(
(hwnd, lParam) => {
foreach(var process in processArray)
if(process.MainWindowHandle==hwnd)
return !process.CloseMainWindow();
return true;
},
IntPtr.Zero
);
}
}
你調用[DuplicateHandle(http://msdn.microsoft.com/library/windows/desktop/ms724251.aspx)創建第二個? – 2013-04-06 02:16:36
我沒有。我正試圖關閉由Adobe打開的句柄。我打開了兩個pdf文件;當我根據我正在積極查看的文件查看Adobe進程時,會顯示句柄和ID。我想根據句柄關閉其中一個窗口。如果這是不可能的,請讓我知道如果有另一種方式。 – lance 2013-04-06 02:21:50
所以你不是想關閉進程的重複句柄,而是通過它的'hWnd'關閉窗口,對吧? – 2013-04-06 02:25:18