返回窗口句柄的名称/标题
我无法解决这个问题。 我收到一个错误:
The name 'hWnd' does not exist in the current context
这听起来很容易,可能是……对于提出如此明显的问题感到抱歉。
这是我的代码:
public static IntPtr WinGetHandle(string wName) { foreach (Process pList in Process.GetProcesses()) { if (pList.MainWindowTitle.Contains(wName)) { IntPtr hWnd = pList.MainWindowHandle; } } return hWnd; }
我尝试了许多不同的方式,每个都失败了。 提前致谢。
不要忘记你是在声明你在循环内部 – 这意味着它只在循环中可见。 如果窗口标题不存在会发生什么? 如果你想用a做它你应该在你的循环之外声明它,在循环中设置它然后返回它…
IntPtr hWnd = IntPtr.Zero; foreach (Process pList in Process.GetProcesses()) { if (pList.MainWindowTitle.Contains(wName)) { hWnd = pList.MainWindowHandle; } } return hWnd; //Should contain the handle but may be zero if the title doesn't match
因为你在if块中声明了hWnd
,所以它不在它之外的return语句中。 有关说明,请参见http://www.blackwasp.co.uk/CSharpVariableScopes.aspx 。
您提供的代码可以通过移动hWnd变量的声明来修复:
public static IntPtr WinGetHandle(string wName) { IntPtr hwnd = IntPtr.Zero; foreach (Process pList in Process.GetProcesses()) { if (pList.MainWindowTitle.Contains(wName)) { hWnd = pList.MainWindowHandle; } } return hWnd; }
hWnd
在foreach
循环中声明。 它的上下文是在foeach
循环中 。 要获得它的值,请在foreach
循环之外声明它。
像这样使用它,
public static IntPtr WinGetHandle(string wName){ IntPtr hWnd = NULL; foreach (Process pList in Process.GetProcesses()) if (pList.MainWindowTitle.Contains(wName)) hWnd = pList.MainWindowHandle; return hWnd; }
比较晚几年,但正如其他人提到的那样, hWnd
的范围仅在foreach
循环中。
然而值得注意的是,假设您对该function没有任何其他function,那么其他人提供的答案有两个问题:
- 变量
hWnd
实际上是不必要的,因为它只用于一件事(作为return
的变量) -
foreach
循环效率很低,因为即使找到匹配项,您仍然会继续搜索其余的进程。 实际上,它会返回它找到匹配的最后一个进程。
假设您不想匹配最后一个进程(第2点),那么这是一个更干净,更有效的function:
public static IntPtr WinGetHandle(string wName) { foreach (Process pList in Process.GetProcesses()) if (pList.MainWindowTitle.Contains(wName)) return pList.MainWindowHandle; return IntPtr.Zero; }
- 清理字符串? 有没有更好的方法呢?
- 使用哪个音频库?
- 使用图API API在Azure Active Directory中创建应用程序失败
- 访问dll方法
- 批量插入节点和关系neo4jclient
- 无法加载文件或程序集’Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed’或其中一个依赖项
- 寻找可以在WinForms应用程序中播放AVI文件的组件(.NET或COM / ActiveX)
- 禁用DataGridView系统ContextMenu
- 如何在母版页中创建创建变量/属性,让子页面访问它们?