Windows API(以前称为Win32 API)是可用于Microsoft Windows操作系统的核心应用程序编程接口集。此标记用于使用Windows API开发本机Windows应用程序的问题。
在 Windows 上以字节数组形式获取屏幕截图,错误的 bmp 标头数据
我正在尝试使用c++和windows api获取屏幕截图数据,以表示位图图像的数据字节数组,然后将其保存到磁盘。我的代码是基于这个问题 保存的图像无法...
我没有使用对话框,我使用的是我自己的自定义类,我已经注册了它,然后使用 CreateWindow 调用来创建它,我在注册时将背景颜色预设为红色: WNDCLAS...
我从另一篇文章中得到了这个代码,它应该可以非常快地截取屏幕截图。我现在正在试验,我注意到每次运行代码时它都会给我相同的屏幕截图。 导入
隐式编译器创建的默认构造函数是否可以有多个 null 主体?
根据IBM网站的说法,答案是:不会。 我有这个项目有点难倒我: 这是一个名为 StackWalkerToConsole 的类的实例,没有定义默认构造...
NtAllocateVirtualMemory 终止并出现错误 0xC0000005
当尝试通过 NtAllocateVirtualMemory 分配内存时(它通过 VirtualAlloc 工作,但我想知道它如何通过 NTAPI 工作),我不明白原因是什么,我给了 PAGE_EXECUT...
DirectX 11 - 使用 CD3D11_VIEWPORT 数组绘制多个视口 RSSetViewports
我已经设置了顶点着色器和像素着色器。 然后我创建了一个向量来表示我的视口(本例中总共 4 个): std::vector view_ports; 我已经填充了 vec...
我为例如 Japanese.rc 和 English.rc 创建了不同的 .rc 文件。我想根据用户而不是根据区域设置系统语言加载各自的字符串。 我尝试了以下
我可以配置 clang-tidy 来接受除 NULL 之外的某些死存储值吗?
例如,以下函数使用 Windows API 将文件加载到内存中,并使用在其他地方定义为 POLYNOMIAL 的多项式计算其 CRC32 校验和: #包括 例如,以下函数使用 Windows API 将文件加载到内存中,并使用在其他地方定义为 POLYNOMIAL 的多项式计算其 CRC32 校验和: #include <Windows.h> UINT32 WINAPI GetFileCRC32(WCHAR *wszFileName, LPDWORD lpdwError) { HANDLE hHeap = GetProcessHeap(); HANDLE hFile = INVALID_HANDLE_VALUE; LARGE_INTEGER liSize; DWORD dwError, dwRead; SIZE_T cbAlloc, i, i2; BYTE *bBuffer = NULL; UINT32 uCRC = 0xFFFFFFFFU; hFile = CreateFileW(wszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { dwError = GetLastError(); goto cleanup; } GetFileSizeEx(hFile, &liSize); do { cbAlloc = min(liSize.QuadPart, ALLOC_MAX); bBuffer = (BYTE *) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cbAlloc); if (NULL == bBuffer) { dwError = ERROR_OUTOFMEMORY; goto cleanup; } if (!ReadFile(hFile, bBuffer, cbAlloc, &dwRead, NULL)) { dwError = GetLastError(); goto cleanup; } for(i = 0; i < cbAlloc; i++) { uCRC ^= bBuffer[i]; for (i2 = 0; i2 < 8; i2++) { uCRC = (uCRC >> 1) ^ ((uCRC & 1) ? POLYNOMIAL : 0); } } HeapFree(hHeap, 0, bBuffer); bBuffer = NULL; liSize.QuadPart -= cbAlloc; } while(liSize.QuadPart); dwError = ERROR_SUCCESS; cleanup: if (hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; } if (bBuffer != NULL) { HeapFree(hHeap, 0, bBuffer); bBuffer = NULL; } *lpdwError = dwError; return uCRC; } 默认情况下,Clang-Tidy 不会将 bBuffer = NULL 行检测为死存储,我认为是因为它认识到将指针设置为 NULL 的做法是一种防御性编程做法,以防止双重释放错误。不过,我还在关闭后将 hFile 的值设置回 INVALID_HANDLE_VALUE,作为同一模式的一部分。 但是,clang-tidy 确实抱怨函数末尾的 INVALID_HANDLE_VALUE 分配(这是强制转换为 -1 的数值 HANDLE)作为“死存储”。 如何配置 clang-tidy 分析以接受 NULL 以外的值作为免于死存储分析的值? 不,无法配置 clang-tidy deadcode.DeadStores 检查器忽略 nullptr 以外的值分配。 忽略 nullptr 赋值的代码位于 DeadStoresChecker.cpp:340: if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(B->getLHS())) if (VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) { // Special case: check for assigning null to a pointer. // This is a common form of defensive programming. const Expr *RHS = LookThroughTransitiveAssignmentsAndCommaOperators(B->getRHS()); QualType T = VD->getType(); if (T.isVolatileQualified()) return; if (T->isPointerType() || T->isObjCObjectPointerType()) { ===> if (RHS->isNullPointerConstant(Ctx, Expr::NPC_ValueDependentIsNull)) return; } // Special case: self-assignments. These are often used to shut up // "unused variable" compiler warnings. if (const DeclRefExpr *RhsDR = dyn_cast<DeclRefExpr>(RHS)) if (VD == dyn_cast<VarDecl>(RhsDR->getDecl())) return; // Otherwise, issue a warning. DeadStoreKind dsk = Parents.isConsumedExpr(B) ? Enclosing : (isIncrement(VD,B) ? DeadIncrement : Standard); CheckVarDecl(VD, DR, B->getRHS(), dsk, Live); } 指定线路呼叫 Expr::isNullPointerConstant 检查 nullptr,但这里没有任何灵活性允许 其他值。 在引用片段的末尾有一个对 CheckVarDecl 的调用, 它根据变量的类型进行更多的过滤 (例如,忽略引用)在发布报告之前。它 接受 RHS 表达式,但仅使用它来获取源位置 范围;没有根据分配的值进行过滤。 我看到的唯一半可行的解决方法是将作业包装在 调用恒等宏 (#define ID(x) x),因为检查器拒绝 报告宏扩展内的代码。
我不知道如何解释我的意思。 我创建了一个程序 (A),它在超时后显示一个 MessageBox。 如果我的程序(A)被激活,它只会显示我想要的消息框。但当我
这个可滚动对话框的示例 https://www.codeproject.com/articles/32925/scrollable-dialog-in-pure-win32-api 工作正常,并显示对话框 我的问题是这个对话框= de...
我有一个按钮。 HWND 按钮 = CreateWindow("按钮", "test_text", WS_VISIBLE | WS_CHILD, 0, 0, 500, 500, 窗口, NULL, NULL, NULL); “window”是我的
在 Alexandria 64 位中调用 OpenSCManager 进行范围检查
我们最近从 Delphi Berlin 更新到 Alexandria 11.2,并遇到了问题。我们的应用程序之一针对 64 位平台。当它连接查询 Windows 服务时,它会抛出一个 r...
我已经在 WM_CREATE 消息处理程序中的窗口中创建了多个控件,并且我希望允许使用 Tab 键将焦点通过一组控件从一个控件移到下一个控件。 控制
我知道以前有人问过这个问题,但我找不到答案,所以我发帖寻求帮助。 我有一个 DLL,一旦注入进程就会创建一个命名管道。管道将等待,直到
Windows 上通过 PostThreadMessage() 的 WPARAM 类型的共享数据结构是否被序列化?
我想使用 MSG 结构通过 Win32 API PostThreadMessage() 从一个线程向另外两个线程共享数据结构。我只是想知道队列线程消息的使用是否
我需要编写一个函数来生成一个对于运行 Windows 操作系统的给定机器来说是唯一的 id。 目前,我正在使用 WMI 查询各种硬件参数并将它们连接在一起......
我在创建 COM 接口时遇到问题。 我将其定义如下: 结构 __declspec( uuid( "36244c2e-4883-47cb-9e02-5d4ea3cc38d9" ) ) IMyObject:IPersist、IPropertyBag {...
有人可以帮我解决以下问题吗?我没有在这篇文章中包含我的代码的某些部分(错误处理等),以使其尽可能清晰。 当我迭代个体时...
有 Win32 函数用于查找系统上的窗口: [DllImport("user32.dll", SetLastError = true)] 公共静态 extern IntPtr FindWindow(字符串 lpClassName, 字符串 lpWindowName); [DllImport("