Windows API(以前称为Win32 API)是可用于Microsoft Windows操作系统的核心应用程序编程接口集。此标记用于使用Windows API开发本机Windows应用程序的问题。
我的问题是当我想创建一个子窗口时,我从 GetLastError() 得到错误代码 1406: ERROR_TLW_WITH_WSCHILD 1406 (0x57E) 无法创建顶级子窗口。 有人能告诉我为什么...
使用 PostMessage 在失焦的应用程序窗口中模拟/合成简单的按键操作
尝试编写一个简单的演示程序,其中控制台的键盘输入被转换为属于其他应用程序进程的目标窗口上的按键。所以如果我输入字符...
在 Delphi 11 中使用 CreatePolygonRgn
我想使用 Canvas 上的区域来检测鼠标在它们上方移动,但我无法让 CreatePolygonRgn() 正常工作。 这是一个示例代码: 变量 regs : HRGN 数组; 程序 ...
如何在 C 中的 Windows 中获取准确的操作系统名称 [重复]
我尝试了很多方法来实现这一目标,使用已记录的 API 和未记录的 API,但我没有得到任何可靠的结果。显示为输出的版本是旧版本,或者 API...
我在 Visual Studio 中有 C++ 代码,它从 Windows API 调用一些函数。此代码是共享的,我不想对其进行太多更改,但我想在某些 Windows 函数返回时提供错误日志记录...
我正在构建自定义凭证提供程序 (ICredentialProvider) 以允许基于硬件的 Windows 登录。 我想知道是否有一种方法可以传递额外的数据(例如 t 的序列号...
Windows 终端在使用 SW_HIDE 时最小化而不是隐藏
我正在 GoLang 中创建一个程序,它有一个可选的控制台窗口。在正常操作期间,窗口将完全隐藏(包括任务栏),用户将与之交互...
任何人都可以帮助我解决 Windows 桌面的这种奇怪行为吗?
所以,当我发现桌面时,我正在探索 user32 函数。我写了一个关于它们的小程序: #包括 内部主要() { HDESK newdesk = CreateDesktopA("新桌面&
在 Win32 中写入和读取 FILE_FLAG_DELETE_ON_CLOSE 文件
我正在尝试使用 Win32 API 写入和读取临时文件。 #包括 #包括 #包括 #包括 #包括 我正在尝试使用 Win32 API 写入和读取临时文件。 #include <Windows.h> #include <filesystem> #include <fstream> #include <iostream> #include <sstream> void ThrowLastFSError(std::string name, std::filesystem::path path) { throw std::filesystem::filesystem_error{ name, path, std::error_code{(int)::GetLastError(), std::system_category()}}; } int main() { HANDLE hfile = NULL; try { // Create a temporary file CREATEFILE2_EXTENDED_PARAMETERS params{}; params.dwSize = sizeof(params); params.dwFileAttributes = FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_HIDDEN; params.dwFileFlags = FILE_FLAG_DELETE_ON_CLOSE; params.lpSecurityAttributes = nullptr; params.hTemplateFile = NULL; auto path = L"test.txt"; hfile = ::CreateFile2( path, GENERIC_READ | GENERIC_WRITE, // Open for reading and writing FILE_SHARE_READ | FILE_SHARE_WRITE, // Share both of those modes CREATE_NEW, ¶ms); if (!hfile || hfile == INVALID_HANDLE_VALUE) { ThrowLastFSError("CreateFile2", path); } // Write something to it char data[] = "hello world\n"; DWORD bytes_written; bool ok = ::WriteFile(hfile, data, sizeof(data) - 1, &bytes_written, nullptr); if (!ok) ThrowLastFSError("WriteFile", path); // Read something from it char inbuf[100]; DWORD bytes_read = 0; ::SetFilePointer(hfile, 0, nullptr, FILE_BEGIN); ok = ::ReadFile(hfile, inbuf, sizeof(inbuf), &bytes_read, nullptr); if (!ok) ThrowLastFSError("ReadFile", path); std::cout << "contains: " << std::string_view(inbuf, bytes_read) << std::endl; // contains: hello world ////////////////////////////// // PROBLEM: ifstream can't open the file ////////////////////////////// ::SetFilePointer(hfile, 0, nullptr, FILE_BEGIN); std::ifstream ifs(path); if (!ifs.is_open()) ThrowLastFSError("ifstream()", path); // ifstream(): The process cannot access the file because it is being used // by another process. : "test.txt" std::stringstream ss; ss << ifs.rdbuf(); ::CloseHandle(hfile); return 0; } catch (std::exception& e) { std::cerr << e.what() << std::endl; ::CloseHandle(hfile); return 1; } } 注意我创建的文件是: FILE_FLAG_DELETE_ON_CLOSE,所以我无法关闭手柄并重新打开它 GENERIC_READ | GENERIC_WRITE,所以我可以读写手柄 FILE_SHARE_READ | FILE_SHARE_WRITE,所以我可以(理论上)打开它的其他句柄 WriteFile 和 ReadFile 似乎工作正常。 但是,尝试打开同一路径下文件的另一个句柄,例如ifstream 导致访问冲突。 如何打开一个文件句柄,我有一个当前打开的句柄,用ifstream? 问题是您正在使用FILE_FLAG_DELETE_ON_CLOSE创建文件。 您不能为该文件创建第二个句柄,除非您指定FILE_SHARE_DELETE. 这在 CREATEFILE2_EXTENDED_PARAMETERS 文档(dwFileFlags 部分) 国旗 意义 FILE_FLAG_DELETE_ON_CLOSE 文件将在其所有句柄关闭后立即删除,包括指定的句柄和任何其他打开或重复的句柄。如果存在文件的打开句柄,调用将失败,除非它们都是使用 FILE_SHARE_DELETE 共享模式打开的。对该文件的后续打开请求失败,除非指定了 FILE_SHARE_DELETE 共享模式。 所以你需要用FILE_SHARE_DELETE打开两个手柄: // ... hfile = ::CreateFile2( path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, CREATE_NEW, ¶ms); // .... // open a second handle // MUST specify FILE_SHARE_DELETE anotherFile = ::CreateFile2( path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, OPEN_EXISTING, nullptr); // ... 不幸的是,这对于 C++ iostreams 是不可能的(您只能共享读/写访问权限(使用_SH_DENYNO),但不能删除访问权限) 您可以通过自己创建句柄然后跳过几个环将句柄放入 ifstream 来解决此限制:godbolt #include <windows.h> #include <fcntl.h> #include <io.h> #include <stdio.h> #include <fstream> // create handle with appropriate sharing flags HANDLE hFile = CreateFile2( L"somefile.txt", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, OPEN_EXISTING, nullptr ); // convert the handle into a c runtime file descriptor int cHandle = _open_osfhandle( reinterpret_cast<intptr_t>(hFile), _O_TEXT | _O_RDONLY ); // create a file stream from the file descriptor FILE* file = _fdopen( cHandle, "r" ); // create a filebuf from the filestream std::basic_filebuf<char, std::char_traits<char>> fileBuf(file); // create an ifstream and swap in our filebuf std::ifstream stream; stream.rdbuf()->swap(fileBuf); // use stream to read from the file, e.g.: std::string str; stream >> str; 请记住,如果您在文件仍有句柄的情况下删除文件,ifstream 很可能不会很高兴(这很可能是您需要经历所有这些步骤才能获得句柄的原因用FILE_SHARE_DELETE变成ifstream)。 所以为了安全起见,我建议确保文件在ifstream破坏之前不会被删除。
Importing C header files question about what is included
我对头文件有点困惑。 我对 C 中的头文件的理解,例如#include ,是根据我们的功能只包含必要的部分...
在使用 Borland VCL、Windows Forms 和 WPF 多年后,我回到了尝试制作一个小而简单的 Win32 API 应用程序的基础。 我在...的背景中有一个位图图像
这是我的 midi sysex 发送/接收函数的代码: void Send_Sysex_Message (int selected_midi_out_device, int selected_midi_in_device, HWND dialog_handle, std::string input_text, bool
我们有一个 UWP(Microsoft Store 分布式)应用程序,我们的客户希望通过他的软件进行控制。主要目标是客户可以控制应用程序(就好像用户会进行交互
没有使用 EnumPrinter 和 WNetOpenEnum 因为它需要 SMB-1 协议。 所以有一种方法可以在不使用 C++ 中的 SMB-1 协议的情况下列出所有网络打印机和网络共享。 有没有办法,指导我...
没有使用 EnumPrinter 和 WNetOpenEnum 因为它需要 SMB-1 协议。 所以有一种方法可以在不使用 C++ 中的 SMB-1 协议的情况下列出所有网络打印机和网络共享。 有没有办法,指导我...
Windows 和 Dini Argeo 称重指示器之间的串行通信问题
我的 C++ 程序和指标之间存在通信问题: 我使用 Windows API 使用 CreateFileA 连接到它,我也尝试过 Boost.asio 但它给了我与此相同的结果......
BCryptDecrypt 因 STATUS_INVALID_PARAMETER 失败
我正在尝试使用 Windows api cng 的 Bcrypt 库对缓冲区进行 RSA 加密。但是我第一次调用 BCryptDecrypt 失败并显示 STATUS_INVALID_PARAMETER ... 状态 = BCryptDecrypt( h键, ...
我正在使用 python 和 c++ 的组合来创建屏幕区域的快照,并将该屏幕截图用作视频源的一部分(标签 PyQt5 中的像素图),并将屏幕截图保存为 .bmp..
将全屏窗口从主显示器移动到辅助显示器会导致主显示器上的视觉伪影
我正在尝试将全屏窗口从主显示器移动到辅助显示器。然而,虽然窗口在辅助显示器上显示正常,但它仍然出现在主显示器上......
嗨,我正在用 C++ 创建一个用于游戏分析的小程序(这是一种爱好,我不知道我在做什么,所以请不要对我抱太大期望),它可以做三件事。 识别并计算一个 pr...