C# Winform项目中,MainWindowHandle获取不到窗口句柄,返回值为零。请问如何解决。

sxl_88 2015-03-23 12:33:03
在C# Winform项目中,通过Process打开了计算器(代码如下)。
Process pro = null;
pro = new Process();
pro.StartInfo.FileName = @"Calc.exe";
pro.Start();
IntPtr hwndCalc = pro.MainWindowHandle; //取不到计算器的窗口句柄,返回值为零。

pro.MainWindowHandle获取不到计算器的窗口句柄,返回值为零。
需要增加一个2秒的延时(代码如下)。
Process pro = null;
pro = new Process();
pro.StartInfo.FileName = @"Calc.exe";
pro.Start();

System.Threading.Thread.Sleep(2000); //新增了延时2秒

IntPtr hwndCalc = pro.MainWindowHandle; //增加了延时2秒,这样就可以获取计算器的窗口句柄


请问为什么一定要增加延时2秒后,才能获取到计算器的窗口句柄。如果不加延时2秒,可以有其它方法获取到计算器的窗口句柄?
...全文
1150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
litsingwu 2016-12-27
  • 打赏
  • 举报
回复
因为你获取MainWindowHandle的时候窗口还没显示出来,用另外的线程去解决。 private void TeachForm_Shown(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(o => { var processes = Process.GetProcessesByName("xxxx").ToList(); if (processes.Count < 1) return; var process = processes[0]; IntPtr windowHandle; do { windowHandle = process.MainWindowHandle; if (windowHandle == IntPtr.Zero) continue; xxx.ShowWindow(windowHandle, xxx.SwMinimize); } while (windowHandle == IntPtr.Zero); }, null); }
WM_JAWIN 2015-03-23
  • 打赏
  • 举报
回复
有个Refresh方法,刷新一下。如果还是不行。那就只能用win32 API,自己查找了
Return0623360 2015-03-23
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
只是告诉系统去Start一个进程,但是不一定已经准备好了各种信息,所以你不一定能访问到
对,未必访问到了。。。
Forty2 2015-03-23
  • 打赏
  • 举报
回复
pro.Start(); pro.WaitForInputIdle(); IntPtr hwndCalc = pro.MainWindowHandle;
alex_suen 2015-03-23
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
只是告诉系统去Start一个进程,但是不一定已经准备好了各种信息,所以你不一定能访问到
+1
sxl_88 2015-03-23
  • 打赏
  • 举报
回复
那是不是只能用延时2秒后再取窗口句柄了呢?还是有其它的解决办法? System.Threading.Thread.Sleep(2000); //新增了延时2秒
rayyu1989 2015-03-23
  • 打赏
  • 举报
回复
计算器未必已经创建完毕
bdmh 2015-03-23
  • 打赏
  • 举报
回复
只是告诉系统去Start一个进程,但是不一定已经准备好了各种信息,所以你不一定能访问到
内容概要:本文围绕“非线性流量的数据驱动Koopman模型预测控制研究”展开,提出一种基于数据驱动的Koopman算子理论方法,用于构建非线性系统的线性化状态空间模型,并结合模型预测控制(MPC)实现对复杂非线性系统的高效控制。研究通过引入扩展动态模态分解(EDMD)等观测函数,将非线性动力学映射至高维特征空间,在该空间实现近似线性化表征,进而融合线性MPC框架进行优化求解。全文系统阐述了Koopman算子的数学基础、隐式线性化机制及在非线性流量控制的建模流程,并通过Matlab代码完成了算法实现与仿真实验,验证了该方法在处理无精确物理模型、强非线性、时变动态系统的有效性与鲁棒性,尤其适用于工业流程控制、能源系统调度等实际工程场景。; 适合人群:具备自动控制理论、非线性系统分析基础,熟悉Matlab编程,从事控制工程、系统辨识、智能优化、能源系统建模等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于难以建立精确数学模型的复杂非线性系统(如流体动力系统、电力电子系统、机器人动力学等)的建模与实时控制;②实现数据驱动下的模型预测控制,提升系统响应速度与控制精度;③为先进控制策略(如MPC)提供一种可行的线性化建模范式,推动现代控制理论与数据科学、机器学习的深度融合。; 阅读建议:建议读者结合提供的Matlab代码深入理解Koopman方法的具体实现过程,重点关注观测函数构造、核函数选择、矩阵逼近、降维处理及MPC控制器设计等关键技术环节,并尝试将其迁移至其他非线性系统进行复现实验与性能对比,以全面掌握其适用范围与局限性。
内容概要:本文详细介绍了一种基于Simulink的光伏储能单相逆变器并网仿真模型,系统涵盖了光伏阵列、储能单元、DC-AC单相逆变器及并网接口的完整结构,重点实现了储能环节的能量管理与逆变器并网控制策略的建模仿真。通过Simulink平台构建系统模型,验证了逆变器输出电能质量、并网稳定性以及控制系统的动态响应性能,采用SPWM调制、PI闭环控制等关键技术,确保并网电流与电网电压同频同相,满足并网电能质量要求。该模型不仅可用于分布式能源系统的仿真研究,还可作为新能源并网技术的教学与工程实践工具。; 适合人群:电气工程、自动化、新能源科学与工程等相关专业的高校本科生、研究生、科研人员,以及从事光伏发电系统设计、储能控制与并网技术研发的工程技术人员。; 使用场景及目标:①深入理解光伏储能系统能量转换、存储与并网控制的整体工作原理;②支持课程设计、毕业设计或科研项目对单相逆变器控制策略(如SPWM、PI调节、锁相技术等)的仿真验证与参数优化;③为后续研究更复杂的控制算法(如MPPT、低电压穿越、谐波抑制等)提供可扩展的仿真基础平台。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建与调试模型,逐步理解各模块(如光伏建模、储能充放电控制、逆变器驱动、锁相环、PI调节器等)的功能与交互关系,重点关注控制系统的设计逻辑与参数整定过程,并可通过修改负载条件或电网参数测试系统鲁棒性,为进一步拓展至三相系统或多机并网场景奠定基础。

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧