Winapi 使用Windows用户界面API是否存在不同版本Windows之间不兼容的风险?

Winapi 使用Windows用户界面API是否存在不同版本Windows之间不兼容的风险?,winapi,ui-automation,Winapi,Ui Automation,我正在开发一个C#Excel VSTO加载项,它利用user32.dll对Excel用户界面执行一些黑魔法。我对使用Win32不是很有经验,我想知道: 我是否需要担心该应用程序是否可以在XP及以后的所有Windows版本上运行?或者,假设我的Win32调用在所有这些版本中都能始终如一地工作是合理的吗 编辑:以下是我正在使用的通话: [DllImport("user32.dll", CharSet = CharSet.Auto)] static public extern IntPtr FindW

我正在开发一个C#Excel VSTO加载项,它利用user32.dll对Excel用户界面执行一些黑魔法。我对使用Win32不是很有经验,我想知道:

我是否需要担心该应用程序是否可以在XP及以后的所有Windows版本上运行?或者,假设我的Win32调用在所有这些版本中都能始终如一地工作是合理的吗

编辑:以下是我正在使用的通话:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static public extern IntPtr FindWindowEx(IntPtr hWnd, IntPtr hChild, string strClassName, string strName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static public extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static public extern bool IsWindowEnabled(IntPtr hWnd);

好的,你正在使用的电话不会像那样消失,它们会留在这里。但是,尤其是
FindWindowEx
具有非常特定的功能,因此您很可能试图在Excel GUI中找到一个子窗口,其名称和/或窗口类可以随时更改(包括通过小更新),由Microsoft自行决定


因此,为了回答您的问题:不必担心您正在使用的API函数,但您必须进行防御性编码,以确保您的代码在Excel版本上不会出现不符合预期的行为(关于特定子窗口的存在)。

以前人们可以假设这一点,是的。但多亏了SxS(并排),同一个库的多个版本(例如公共控件)有可能在一个系统上使用。然而,在同一过程中使用这些库的多个版本是非常困难的。不过,肮脏的黑客也有可能做到这一点。如果不知道所涉及的调用,这个问题是不可能回答的。微软还在应用程序兼容性和不破坏版本之间的API CAL方面投入了大量精力。+1。使用任何未记录的方法来做某事很可能在任何时候都会失败。您应该调查Excel API中的官方、文档化方法,以满足您的需求。不幸的是,我已经确认VSTO API没有提供我所需的功能。这是我最后的办法。既然我已经确信Win32 API是可靠/兼容的,那么我可以专注于处理FindWindowEx没有找到预期结果的场景。