winapi 相关问题

Windows API(以前称为Win32 API)是可用于Microsoft Windows操作系统的核心应用程序编程接口集。此标记用于使用Windows API开发本机Windows应用程序的问题。

如何正确解析窗口样式值到宏文本?

我编写了一段代码来将窗口样式值解析为文本宏,但输出与样式值有很大不同;为什么以及如何解决它? 输出: WS_CHILD | WS_CHILD WS_VISIBLE | WS_VISIBLE | BS_GROUPBOX |

回答 1 投票 0

如何防止 WM_KEYDOWN 处理的按键出现 WM_CHAR?

我编写了一个自定义 Windows 控件,用于处理文本输入的 WM_CHAR 消息和用于“导航”按键(如箭头、Delete、Home 等键)的 WM_KEYDOWN 消息。 我...

回答 1 投票 0

获取组合框的文本 Win32 API C++(无 MFC)

我正在尝试设置一个组合框,以便用户可以从下拉菜单中选择一个选项,然后使用 Win32 API C++ 编程而不是 MFC 检索用户选择的内容。我在这里读了约翰的帖子,我

回答 3 投票 0

与 Rust 中 Inno 设置的 TNewCheckBoxList 进行通信

我正在尝试自动安装 Inno Setup,我已经能够与 Button 和 Checkbox 进行通信,但我一直无法与 TNewCheckListBox 进行通信。如果我

回答 1 投票 0

切换到.NET Core时MapViewOfFile指针抛出OverflowException异常

我正在尝试运行这个项目 DbMon.NET - .NET Core (.NET 5.0) 中的一个简单的 .NET OutputDebugString 捕获器。 它在 .NET 4.7.2 中运行良好,但是当我切换到 .NET 5 时,我不断收到异常 西...

回答 1 投票 0

右 Alt 键也会触发左 Control 键的 Windows 消息

在 win32 消息处理程序中,我希望能够处理左、右 Alt 和 Control 键。左和右是通过 lParam 的第 24 位来区分的,但是当我按下 Right Alt 时,我也会得到一个

回答 3 投票 0

为什么要翻译消息

我正在尝试理解“消息循环”。 它看起来是这样的: 味精味精={}; while (GetMessage(&msg, NULL, 0, 0)) { 翻译消息(&msg); 调度消息(&msg); } S...

回答 2 投票 0

如何在winapi标准对话框中处理键盘事件?

我不经常使用winapi,我几乎正在编写.NET代码。但此时我必须使用winapi来制作一个简单的对话框。我想在那里处理一些关键事件。因此我观看了

回答 4 投票 0

使用 WinApi 访问 C 结构中的第一个字段后出现问题

最近我正在学习C语言的Win32 API,我正在遵循微软网站上的标准教程(这个)。 在尝试实施教程所教的内容时,我一直

回答 1 投票 0

如何通过套接字使用重叠 I/O?

我想在我的服务器中使用重叠I/O,但我找不到很多关于该主题的教程(大多数教程都是关于带有完成端口的重叠I/O,我想使用回调

回答 2 投票 0

NtAllocatevirtualMemory 结果为 0xc0000005

通过 VirtualAlloc Win32 API 进行内存分配工作顺利,但是,尝试按如下方式进行直接系统调用会导致 0xc0000005 错误 (STATUS_ACCESS_VIOLATION)。 代码如

回答 1 投票 0

微软声称 wchar_t 可以容纳任何 Unicode 字符 - 这是真的吗?

这个网站上有很多关于 Unicode 和 wchar_t 的问题。我想我已经掌握了这个概念,但后来发现了一些东西,证明如果它是真的,大多数(如果不是全部)答案都是错误的。关于这个...

回答 2 投票 0

根据语言更改标志的Python脚本

问题描述: 我正在开发一个程序,该程序可以跟踪用户的语言,并根据检测到的语言在光标附近显示相应的标志。该标志只能在以下情况下显示...

回答 1 投票 0

GetLastError() 是否有粘性?

GetLastError() 是否具有粘性,即在错误实际发生之前不会修改错误代码?或者 Win32 函数是否将最后一个错误代码设置为 ERROR_SUCCESS (0) 以表示任何成功的操作?

回答 1 投票 0

如何在 C++ 中读取快捷方式文件的目标及其所有参数

我尝试实现此 Stack Overflow 答案中的解决方案。但是,我遇到一个问题,它仅解析可执行文件(exe)的路径,而不包含任何参数...

回答 1 投票 0

在 Windows 11 上通过 Win32 API 或注册表将任务栏背景颜色更改为透明

我有一个问题,如何通过Win32 API或注册表将任务栏的背景更改为完全透明,以便开始按钮、固定图标、托盘等不会受到透明度更改的影响? 我...

回答 1 投票 0

如何将焦点移动到下一个展开的窗口?

我正在创建一个脚本,当按下组合键时,它将最小化当前活动窗口并移至下一个窗口。然后,当按下组合键时,展开最后最小化的

回答 1 投票 0

BSTR SysAllocString() 和 BSTR() 之间的区别?

我正在编写一个程序,该程序从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下: #定义_WIN32_DCOM #包括 我正在编写一个程序,它从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下: #define _WIN32_DCOM #include <comdef.h> #include <WbemIdl.h> #include <stdio.h> #pragma comment(lib, "wbemuuid.lib") int wmain(int argc, wchar_t* argv[]) { // <SNIP> /* Build dynamic string containing the hostname of the target and namespace. Example: \\DSKT-390047\ROOT\CIMV2 */ wchar_t cimv2[256] = { 0 }; swprintf_s(cimv2, 256, L"\\\\%ls\\ROOT\\CIMV2", argv[1]); IWbemServices* pSvc = NULL; hr = pLoc->ConnectServer(BSTR(cimv2), BSTR(argv[2]), BSTR(argv[3]), NULL, 0, NULL, NULL, &pSvc); if (FAILED(hr)) { pLoc->Release(); CoUninitialize(); return 1; } // <SNIP> } ConnectServer()方法需要8个参数,其中5个是BSTR类型。 Microsoft 详细说明,要创建 BSTR 类型,我必须这样做: BSTR MyBstr = SysAllocString(L"foo"); 但是,我看到一些开发人员也使用BSTR(variable),其中变量的类型为wchar_t*,所以我想知道两者之间有什么区别?我找不到关于后者的太多信息。 我现在这样做可以吗?或者我应该先分配 BSTR 类型,使用它们,然后释放它们? 我认为我现在所做的方式避免了必须释放这些分配的对象的事实,但有些事情是不对的。 (BSTR) wchar_t* 类型的强制转换是一个严重的编程错误,虽然它可以编译并且可以工作,但当需要 BSTR 的函数尝试对其进行操作时,将会导致失败,因为 BSTR 类型的大小在指针之前携带,因此可能包含空字符。阅读更多这里。 它以这种方式创建是为了与需要 wchar_t* 的地方兼容 wchar_t*,即您可以将 BSTR 传递给需要 wchar_t* 的函数。但反之则不然。BSTR 也是以 null 结尾的,这意味着如果 BSTR 不包含空字符,则 wchar_t* 的转换可以在 wcslen 等函数中工作。这可能会有效地防止程序员发现他们的错误。 例如,尝试在 wchar_t* 上使用 SysStringLen。 正确的做法是使用_bstr_t来换行。 _bstr_t f(L"Hello"); // pass f to a function that expects a BSTR. 在大多数情况下,BSTR确实带有以空结尾的字符串,如果您在 BSTR 和 wchar_t* 之间进行转换而不使用自动化 API,则不会出现任何问题。但是,这些字符串类型经常参与编组,这意味着这些字符串背后有一个关于内存分配器的协议,然后整个字符串更像是使用给定分配器分配的内存块,通常被解释为字符串。 当您使用 SysString* API 时,COM 子系统可以使用相同的 API 来正确识别内存块的大小并准确地编组您的调用,将字符串参数与其他地方完全相同(并且这个“其他地方”可以不同)线程、进程甚至远程系统)。如果将 wchar_t* 转换为 BSTR,并且不使用适用于 BSTR 类型的 API,则参数传递的准确性将会丢失。然而,如果不涉及编组,那么通常没有区别。总而言之,您应该使用 BSTR 相关的 API 和分配来保持安全,而不是猜测在这种情况下是否确实需要这样做。为此,您还有好帮手,例如bstr_t和wil::unique_bstr等。

回答 2 投票 0

如何在 Win32 应用程序中禁用 Windows 系统范围的三/四指触摸手势?

我在一家开发应用程序的公司工作,该应用程序可用于同时使用多个触摸输入进行绘图。问题是,当你用三四个手指向上或向下滑动时......

回答 1 投票 0

BSTR 差异

我正在编写一个程序,该程序从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下。 #定义_WIN32_DCOM #包括 我正在编写一个程序,它从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下。 #define _WIN32_DCOM #include <comdef.h> #include <WbemIdl.h> #include <stdio.h> #pragma comment(lib, "wbemuuid.lib") int wmain(int argc, wchar_t* argv[]) { // <SNIP> /* Build dynamic string containing the hostname of the target and namespace. Example: \\DSKT-390047\ROOT\CIMV2 */ wchar_t cimv2[256] = { 0 }; swprintf_s(cimv2, 256, L"\\\\%ls\\ROOT\\CIMV2", argv[1]); IWbemServices* pSvc = NULL; hr = pLoc->ConnectServer(BSTR(cimv2), BSTR(argv[2]), BSTR(argv[3]), NULL, 0, NULL, NULL, &pSvc); if (FAILED(hr)) { pLoc->Release(); CoUninitialize(); return 1; } // <SNIP> } ConnectServer需要8个参数,其中5个是BSTR类型。微软详细说明,要创建 BSTR 类型,我必须像下面这样 BSTR MyBstr = SysAllocString(L"foo"); 这样做,但是,我看到一些开发人员在变量类型为 BSTR(variable) 的情况下也使用 wchar_t,所以我在想有什么区别两者之间,因为我找不到关于后者的太多信息。 我现在这样做可以吗?或者我应该先分配 BSTR 类型,使用它们,然后释放它们?我认为我现在所做的方式避免了必须释放这些分配的对象的事实,但有些事情是不对的。 谢谢。 wchar_t* 类型的(BSTR)强制转换是一个严重错误,当它编译和工作时,当需要 BSTR 的函数尝试对其进行操作时,将导致失败。 正确的做法是使用_bstr_t来换行。 _bstr_t f(L"Hello"); // pass f to a function that expects a BSTR.

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.