【发布时间】:2011-03-09 06:02:17
【问题描述】:
我需要以编程方式处理另一个 Windows 应用程序,搜索 google 我发现了一个使用 DLLImport 属性处理 Windows 计算器的示例,并将 user32.dll 函数导入到 C# 中的托管函数中。
应用程序正在运行,我正在获取主窗口的句柄,即计算器本身,但之后的代码无法正常工作。 FindWindowEx 方法不返回 Calculator 子项的句柄,如按钮和文本框。
我尝试在 DLLImport 上使用 SetLastError=True,发现我收到错误代码 127,即“找不到程序”。
这是我获得示例应用程序的链接:
http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=14519&av=34503
如果有人知道如何解决,请帮忙。
更新:DLLImport 是:
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
不起作用的代码是:
hwnd=FindWindow(null,"Calculator"); // This is working, I am getting handle of Calculator
// The following is not working, I am getting hwndChild=0 and err = 127
hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero,"Button","1");
Int32 err = Marshal.GetLastWin32Error();
【问题讨论】:
-
您运行的是什么版本的 Windows?
-
如果您在使用 P/Invoke 时遇到问题,请使用
DllImport属性发布您的声明。如果您对某些代码有问题,请发布不起作用的代码。 -
@CodyGray 我正在使用 Windows 7 Professional。
-
@Gabe 我已经更新了我的问题并包含了不起作用的代码。
标签: c# winapi pinvoke dllimport findwindow