FindWindow获得不到自己想要窗体的句柄?

hei_an 2008-06-26 10:39:15
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern IntPtr SetActiveWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
////////////////////////////////////////////////////////////////////////////
IntPtr intptr = FindWindow(null, "QQ自由幻想(2.06测试版");

SetActiveWindow(intptr);

ShowWindow(intptr, SW_SHOWNOACTIVATE);
if (intptr == IntPtr.Zero)
{
tmrHM.Enabled = false;
tmrJN1.Enabled = false;
tmrJN3.Enabled = false;
tmrJN4.Enabled = false;
tmrJN5.Enabled = false;
tmrJN2.Enabled = false;

MessageBox.Show("当前窗口找不到自由幻想", "XX练级器");
return;
}
else
{
tmrHM.Enabled = false;
tmrJN1.Enabled = false;
tmrJN3.Enabled = false;
tmrJN4.Enabled = false;
tmrJN5.Enabled = false;
tmrJN2.Enabled = false;


}
将窗口标题改成像记事本这类窗口,运行没问题,这个窗口是一个游戏窗口,打开时当然有更新,登录之类,最后弹出来游戏窗口!用Sky++,能看到句柄 窗口标题,用FindWindow,返回值null!谢谢!
...全文
1313 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlovew 2008-06-27
  • 打赏
  • 举报
回复
跟着学习。
s208ping 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 BIGBIRDINWOODS 的回复:]
学习一下了,,,,
[/Quote]
noky 2008-06-27
  • 打赏
  • 举报
回复

"The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.

To search child windows, beginning with a specified child window, use the FindWindowEx function."
1.以上是MSDN中的解释。这个函数只能查找顶层窗体,不能查找子窗体。
2.检查一下你的窗体标题,看看你要查找的和原本的窗体标题是否相同。
3.检查一下窗体所在进程是否在运行!

BIGBIRDINWOODS 2008-06-27
  • 打赏
  • 举报
回复
学习一下了,,,,
skinfeature 2008-06-27
  • 打赏
  • 举报
回复
FindWindow这个函数不会查找子窗口的,确认下你要找的窗口是顶层窗口。如果你要找的是子窗口,用FindWindowEx。
家鸣 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hei_an 的回复:]
这个游戏,启动后先是调用一个LIVEUPDATE.EXE更新程序然后回到登录窗口,用了CE工具都找不到这个窗体,报窗体已关闭?进程也是不允许访问,何解呢?
[/Quote]
可能这个本身有防外挂功能,只能多试下其它的方法。 再用EnumWindows试试

public delegate bool EnumWindowsProcCallBack(int hwnd, int lParam);

[DllImport("user32.dll")]
private static extern int GetWindowText(int hWnd, StringBuilder title, int size);
[DllImport("user32.dll")]
private static extern bool IsWindowVisible(int hWnd);
[DllImport("user32.dll")]
public static extern int EnumWindows(EnumWindowsProcCallBack proc, int lParam);
[DllImport("user32.dll")]
public static extern int GetWindowThreadProcessId (int hwnd, ref int lpdwProcessId);
public void test()
{
EnumWindowsProcCallBack EnumWindowsProc = new EnumWindowsProcCallBack(myEnumWindowsProc);
EnumWindows(EnumWindowsProc, 0);
}
//call back function
public static bool myEnumWindowsProc(int hwnd, int lParam)
{ //下面这些可能有用的信息
int processId;
bool isVisible = IsWindowVisible(hWnd);
GetWindowThreadProcessId(hwnd, ref processId);//取进程ID
StringBuilder title = new StringBuilder(255);
GetWindowText(hWnd, title, 255);
//return false;//stop EnumWindows
return true;
}
贫僧又回来了 2008-06-27
  • 打赏
  • 举报
回复
参考下这帖子,不知道有用吗
http://topic.csdn.net/u/20080627/13/b3fe3241-264a-4be6-ba1e-b1ae96e7a587.html
hei_an 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dk385 的回复:]
如:

C# code
Process[] processList = Process.GetProcessesByName("EXCEL");
IntPtr MainWindowIntPtr = processList[0].MainWindowHandle;
[/Quote]

这个游戏,启动后先是调用一个LIVEUPDATE.EXE更新程序然后回到登录窗口,用了CE工具都找不到这个窗体,报窗体已关闭?进程也是不允许访问,何解呢?
家鸣 2008-06-26
  • 打赏
  • 举报
回复
如:

Process[] processList = Process.GetProcessesByName("EXCEL");
IntPtr MainWindowIntPtr = processList[0].MainWindowHandle;
家鸣 2008-06-26
  • 打赏
  • 举报
回复
如果还是不行的话,那么换一种思路,可以根据进程的名字取得进程主窗口。具体参考Process类.
hei_an 2008-06-26
  • 打赏
  • 举报
回复
是顶层窗口,Spy++上看到的..还有其它方法吗?
家鸣 2008-06-26
  • 打赏
  • 举报
回复
FindWindow这个函数不会查找子窗口的,确认下你要找的窗口是顶层窗口。如果你要找的是子窗口,用FindWindowEx。

[DllImport("user32.dll",EntryPoint="FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
hei_an 2008-06-26
  • 打赏
  • 举报
回复
补充一下,任务管理器里也看不到这个窗口???
内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,深入阐述了该方法的数学原理及其在参数辨识中的收敛性与稳定性优势。通过构建最小化误差的目标函数,并结合数值积分技术,采用迭代方式逐步逼近系统的真实参数值,有效解决了非线性动态系统中因缺乏解析解而难以进行精确建模的问题。文中提供了完整的Matlab代码实现,涵盖模型定义、迭代求解、参数更新与结果可视化等关键环节,增强了方法的可操作性与工程实用性。研究通过典型非线性系统案例验证了算法的有效性,展示了其在科学计算与工程建模中的良好适应性与推广潜力。; 适合人群:具备常微分方程理论、数值分析基础及Matlab编程能力,从事系统建模、参数辨识、动力学仿真等相关方向的研究生、科研人员和工程技术开发者。; 使用场景及目标:①解决实际工程中非线性微分方程模型的未知参数估计问题;②深入理解Picard迭代法在科学计算中的实现机制与数值特性;③为学术论文复现、科研项目开发或课程设计提供可运行、易调试的技术方案与代码参考。; 阅读建议:建议读者结合文中的数学推导与Matlab代码逐行分析,重点关注迭代流程、目标函数构造与数值积分的耦合实现,通过修改模型结构或噪声条件进行扩展实验,以深化对算法鲁棒性与适用边界的理解。配套资源可通过指定公众号和网盘链接获取,推荐同步学习以加速科研进程。
内容概要:本文详细介绍了一种基于多尺度集成极限学习机(Extreme Learning Machine, ELM)的回归方法,并提供了完整的Matlab代码实现。该方法通过构建多尺度特征表示与集成学习机制,有效提升了ELM在处理非线性、高维复杂数据时的预测精度与模型鲁棒性,特别适用于时间序列回归任务。文档不仅阐述了算法的核心原理与技术流程,还系统展示了其在风电功率预测等工程场景中的应用潜力。同时,文中附带了丰富的科研仿真案例集合,涵盖智能优化算法、深度学习、信号处理、电力系统调度等多个前沿方向,体现了多学科交叉融合的技术优势与实践价值。; 适合人群:具备一定Matlab编程能力,从事科学研究或工程应用的研究生、科研人员及工程技术开发者,尤其适合专注于机器学习、智能算法优化、新能源预测与电力系统建模等相关领域的专业人员。; 使用场景及目标:①用于风电、光伏、负荷等时间序列数据的高精度回归预测任务;②为科研工作者提供可复现的多尺度集成ELM模型代码框架,支持快速算法验证与二次开发;③满足实际工程项目中对高效建模、实时预测与智能决策的技术需求。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解多尺度特征构造与集成策略的设计思想,同时可参考文档中其他相关算法案例进行横向比较与综合应用,以提升整体科研创新能力。

111,129

社区成员

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

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

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