c#运行程序的焦点窗口
问题描述:
我想从我的c#application.i搜索很多程序,并找到一些例子,但是我错误地使用了visual studio。 ShowWindow(hWnd, SW_HIDE);
线给我一个错误"showwindow(system.IntPtr,int) has some invalid argument"
PLZ这是哪里的代码c#运行程序的焦点窗口
[DllImport("user32.dll")]
internal static extern IntPtr SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private void FocusProcess()
{
int hWnd;
Process[] processRunning = Process.GetProcesses();
foreach (Process pr in processRunning)
{
if (pr.ProcessName == "notepad")
{
hWnd = pr.MainWindowHandle.ToInt32();
ShowWindow(hWnd, 3);//error line
}
}
}
答
你声明的hWnd为INT的问题。但是ShowWindow函数需要一个IntPtr。因为pr.MainWindowHandle是一个IntPtr,所以你只需要用它作为hWnd。 Btw。如果你想把这个窗口作为最顶层,你应该调用SetForegroundWindow。
[DllImport("user32.dll")]
internal static extern IntPtr SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
internal static extern bool ShowWindow(IntPtrhWnd, int nCmdShow); //ShowWindow needs an IntPtr
private static void FocusProcess()
{
IntPtr hWnd; //change this to IntPtr
Process[] processRunning = Process.GetProcesses();
foreach (Process pr in processRunning)
{
if (pr.ProcessName == "notepad")
{
hWnd = pr.MainWindowHandle; //use it as IntPtr not int
ShowWindow(hWnd, 3);
SetForegroundWindow(hWnd); //set to topmost
}
}
}
+0
“记事本”可能需要拼写一个大写字母N?或者更好地使用一些不区分大小写的比较? – RenniePet 2014-08-30 02:58:36
你为什么叫'ToInt32()'? 'MainWindowHandle'已经给你一个正确类型的值。类型转换是您遇到错误的原因:它是不兼容的类型。 – 2014-08-30 03:31:05