草庐IT

c# - 来自 user32.dll 的 FindWindowEx 使用 dllimport 返回零句柄和 127 错误代码

我需要以编程方式处理另一个Windows应用程序,搜索谷歌我找到了一个示例,它使用DLLImport属性处理Windows计算器并将user32.dll函数导入C#中的托管函数。应用程序正在运行,我正在获取主窗口的句柄,即计算器本身,但之后的代码无法正常工作。FindWindowEx方法不返回计算器子项的句柄,例如按钮和文本框。我尝试在DLLImport上使用SetLastError=True并发现我收到错误代码127,即“未找到过程”。这是我从中获得示例应用程序的链接:http://www.codeproject.com/script/Articles/ArticleVersion.

c# - 以字节为单位的枚举大小

下面枚举的字节大小是多少?publicenumMMTPCnxNckRsn{MMTPCnxNckRsnNoAnswer=-2,MMTPCnxNckRsnSendError=-1,MMTPCnxNckRsnOk=0,MMTPCnxNckRsnInvalidMember=1,MMTPCnxNckRsnHubNotReady=2,MMTPCnxNckRsnUnknownMember=3,MMTPCnxNckRsnLastCnxTooRecent=4,MMTPCnxNckRsnInvalidVersion=5,MMTPCnxNckRsnInvalidOptions=6,MMTPCnxNckRsn

c# - 在 C# 中为 Windows Vista/7 显示身份验证对话框

我想从用户那里获取网络登录凭据。我正在使用.NET3.5和C#。到目前为止,我使用的是CredUIPromptForCredentials调用(可以找到关于如何使用它的非常有用的链接here)我的问题是CredUIPromptForCredentialsAPI调用显示旧的windows2000/XP凭据对话框而不是新的Vista/7。我在msdn上读到我应该使用CredUIPromptForWindowsCredentials功能。有人可以发布一个如何在C#中使用它的示例吗?我还需要能够获取输入的凭据。 最佳答案 我设法实现了一个适

c# - 当结构包含 bool 时如何将 GCHandle 分配给结构

我一直在尝试创建一个结构类型的句柄,因为我需要一个指向它的固定指针,但我收到错误“对象包含非原始数据或非blittable数据”我的结构是这样的:[StructLayout(LayoutKind.Sequential)]publicstructMyStruct{[MarshalAs(UnmanagedType.U1)]publicboolTest;}现在,当我打电话时,varmystruct=newMyStruct();varhandle=GCHandle.Alloc(mystruct,GCHandleType.Pinned);我收到错误“对象包含非原始数据或不可blittable数据

c# - PInvoke C# : Function takes pointer to function as argument

我想在我的C#代码中访问这个函数,这可能吗?所以最后C++代码会调用我的函数并应用名为“sFrameofData”的结构。C++代码://Theusersuppliedfunctionwillbecalledwheneveraframeofdataarrives.DLLintCortex_SetDataHandlerFunc(void(*MyFunction)(sFrameOfData*pFrameOfData));这也许行得通吗?C#代码:[DllImport("Cortex_SDK.dll")]publicexternstaticintCortex_SetDataHandlerFu

c# - 如何将非托管应用程序窗口置于最前面,并使其成为(模拟)用户输入的事件窗口

我假设我需要使用pinvoke,但我不确定需要调用哪些函数。场景:遗留应用程序将运行,我将拥有该应用程序的句柄。我需要:将该应用程序置于顶部(在所有其他窗口之前)使其成为事件窗口需要调用哪些Windows函数? 最佳答案 如果您没有窗口句柄,请在之前使用它:[DllImport("user32.dll",SetLastError=true)]staticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);现在假设您有应用程序窗口的句柄:[DllImport("us

c# - P/调用,c# : unsigned char losing a byte

我正在为软件的SDK编写一个dll文件,我正在尝试调用一个函数来获取有关软件主机的信息。函数想要的结构中有两个无符号字符变量(HostMachineAddress,HostProgramVersion),当我尝试从c#调用它时,我似乎“松开了”最后一个字节...如果我更改c#中的SizeConst结构低于5我确实得到了丢失的字节,但是它导致另一个变量丢失数据。有人可以帮我找到解决这个问题的方法吗?还尝试使用类而不是结构导致system.stackoverflow错误C#结构[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)

c# - 调用Windows API时CLR怎么比我快

当我发现(对我来说)令人惊讶的事情时,我测试了生成时间戳的不同方法。使用P/Invoke调用Windows的GetSystemTimeAsFileTime比调用DateTime.UtcNow慢大约3倍,后者在内部使用CLR的包装器来实现相同的GetSystemTimeAsFileTime.这怎么可能?这是DateTime.UtcNow'simplementation:publicstaticDateTimeUtcNow{get{longticks=0;ticks=GetSystemTimeAsFileTime();returnnewDateTime(((UInt64)(ticks+Fi

c# - 结构中 C# 固定 bool 数组的大小和对齐方式是什么?

在做P/Invoke的时候,数据布局的匹配很重要。我们可以通过使用一些属性来控制结构的布局。例如:structMyStruct{publicboolf;}给出大小为4。虽然我们可以告诉编译器将其设为1字节bool以匹配bool的C++类型:structMyStruct{[MarshalAs(UnmanagedType.I1)]publicboolf;}大小为1。这些是有道理的。但是当我测试固定的bool数组时,我感到困惑。unsafestructMyStruct{publicfixedboolfs[1];}给出4个字节的大小。和unsafestructMyStruct{publicfi

c# - 获取事件窗口文本(并向其发送更多文本)

我正在用C#创建一个小实用程序,它会在按下全局热键时向事件文本框添加一些文本,这是一种自动完成功能。我有我的全局热键工作,但现在我不知道如何在事件文本框中获取当前文本(如果事件窗口是一个文本框。)到目前为止我尝试过的是使用一个。GetForegroundWindow,然后使用该句柄调用GetWindowText。这给了我事件窗口的窗口标题,而不是文本框内容。GetActiveWindow并使用该句柄调用GetWindowText。这根本没有给我任何文字。这是我做过的一个例子[DllImport("user32.dll")]privatestaticexternboolUnregiste