Windows API(以前称为Win32 API)是可用于Microsoft Windows操作系统的核心应用程序编程接口集。此标记用于使用Windows API开发本机Windows应用程序的问题。
什么是“api-ms-win-*-*-lx-x-x.dll”伞库?
我不断遇到具有长文件名的 DLL。仅两个例如:“api-ms-win-appmodel-runtime-l1-1-1.dll”或“api-ms-win-appmodel-identity-l1-2-0.dll”。显然微软称它们为“
我需要以语言栏显示输入语言的方式向用户显示输入语言列表。 例如: 目前我有 班级计划 { 静态无效主(字符串[]参数) { 变种
如何使用CredUICmdLinePromptForCredentials?
我曾尝试编写一个使用无人使用的功能的应用程序(CredUICmdLinePromptForCredentials)。但结果是错误的,用户和传递变量以十六进制值输出。 这是我...
如何在 Win32 API C++ 中枚举网络适配器并获取其 MAC 地址?
如何在 Win32 API C++ 中枚举网络适配器并获取其 MAC 地址?
使用 ctypes 打开资源管理器并通过 SHOpenFolderAndSelectItems 选择文件
使用 ctypes 打开资源管理器并通过 SHOpenFolderAndSelectItems 选择文件 在 python 中,这可以使用 pywin32 完成,如下所示: 从 win32com.shell 导入 shell def showFilesInExplorer(文件夹, 文件...
仅使用 ctypes 通过 SHGetPropertyStoreForWindow 设置窗口属性
Python 开发人员需要为其应用程序设置某些窗口属性,以便与 Windows 任务栏正确配合(正确的图标和分组以及固定的能力)。就我而言,是 PyQt5
考虑以下两个函数,第一个函数使用 Windows API 函数 ReadFile() 和 CreateFileW(),而第二个函数使用 fopen() 和 fgetws(),读取非英文文本…
如何处理 TLS 1.3 协商期间收到的来自 SCHANNEL 的 SEC_I_RENEGOTIATE
我有一个客户端应用程序,它使用 SCHANNEL 来协商 TLS 1.1 和 TLS 1.2,该应用程序已经工作了多年。我最近更改了代码以使用 SCH_CREDENTIALS 而不是 SCHANNEL_CRED,但它仍然......
我想改进一些现有的项目(VICE,一个c64模拟器)。 在此模拟器中,我们可以使用 ffmpeg dll 记录模拟器屏幕。 这里的问题是,这些 dll 正在运行......
使用 python win32com 发送 Outlook 电子邮件并标记为后续
如果可能的话,如何使用 win32com python 库将已发送的电子邮件标记为后续提醒日期,我下面的代码确实发送了电子邮件,但不创建后续提醒。 代码: 导入
请告诉我如何解决我的小问题。 我正在为 android 模拟器编写自动化,其中我使用 win32api 库来模拟非活动程序窗口中的操作。 在某些地点...
如果我保存新凭证: CREDENTIALW 信用 = { 0 }; ... 信用类型 = CRED_TYPE_GENERIC; cred.TargetName = 转换("PIN"); cred.CredentialBlob = (LPBYTE)pBlob; // 这里的值:“
Codeblocks Win32 对话框项目中的 Unicode 问题(已解决)
我正在尝试通过CodeBlocks制作Unicode程序(波斯语),但似乎这并不容易! 这是我到目前为止所尝试的: 首先,我通过 Resedit p 创建 Win32 GUI 对话框项目和设计资源...
我想以编程方式要求资源管理器刷新 MTP 文件夹内容(Android 设备)并显示现有文件(模拟文件夹上的 F5)。如果它是带驱动器号的标准路径,我...
Codeblocks Win32 对话框项目中的 Unicode 问题(已解决)
我正在尝试通过CodeBlocks制作Unicode程序(波斯语),但似乎这并不容易! 这是我到目前为止所尝试的: 首先,我通过 Resedit p 创建 Win32 GUI 对话框项目和设计资源...
GetTempPath 在 Windows 10 上的应用程序 A 中返回 C:\Users\sam\AppData\Local\Temp\。 但它在另一个应用程序 B 中返回 C:\Users\sam\AppData\Local\Temp \ (一个 dll 挂在另一个应用程序中......
这段代码在Windows下注册了2个全局热键:SHIFT+F5和SHIFT+F6,它在所有情况下都可以正常工作,包括完全其他应用程序具有焦点的情况,例如......
我在包含这两个文件时遇到问题。 现在,我知道我需要首先包含 Winsock2,然后包含 windows.h,或者简单地说: #定义WIN32_LEAN_AND_MEAN 但是,我仍然遇到问题 我有一个
在 Rust 中使用 CryptUnprotectData 解密数据会导致 STATUS_HEAP_CORRUPTION 错误
我正在开发一个 Rust 函数,该函数接收 &[u8] 并使用 WinAPI 中的 CryptUnprotectData 对其进行解密。这是有问题的函数: fn 解密(数据: &[u8]) -> 结果 我正在开发一个 Rust 函数,该函数接收 &[u8] 并使用 CryptUnprotectData 中的 WinAPI 对其进行解密。这是有问题的函数: fn decrypt(data: &[u8]) -> Result<Vec<u8>, String> {} 我已经成功实现了这个功能,并且使用DPAPI成功解密了数据。 但是,我在尝试释放传递给 CryptUnprotectData 的缓冲区时遇到了问题。我收到以下错误: error: process didn't exit successfully: `target\debug\main.exe` (exit code: 0xc0000374, STATUS_HEAP_CORRUPTION) 这是该函数的代码: use winapi::{ um::{ winbase, dpapi, wincrypt }, shared::minwindef }; fn decrypt(keydpapi: &[u8]) -> Result<Vec<u8>, String> { // https://learn.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata // https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-localfree // https://docs.rs/winapi/latest/winapi/um/dpapi/index.html // https://docs.rs/winapi/latest/winapi/um/winbase/fn.LocalFree.html let mut data_in = wincrypt::DATA_BLOB { cbData: keydpapi.len() as minwindef::DWORD, pbData: keydpapi.as_ptr() as *mut minwindef::BYTE, }; let mut data_out = wincrypt::DATA_BLOB { cbData: 0, pbData: ptr::null_mut() }; let result = unsafe { dpapi::CryptUnprotectData( &mut data_in, ptr::null_mut(), ptr::null_mut(), ptr::null_mut(), ptr::null_mut(), 0, &mut data_out ) }; if result == 0 { return Err("CryptUnprotectData failed".to_string()) }; if data_out.pbData.is_null() { return Err("CryptUnprotectData returned a null pointer".to_string()); } let decrypted_data = unsafe { Vec::from_raw_parts(data_out.pbData, data_out.cbData as usize, data_out.cbData as usize) }; unsafe { winbase::LocalFree(data_out.pbData as minwindef::HLOCAL); // error occured here }; Ok(decrypted_data) } 如果有任何见解或解决方案来解决此STATUS_HEAP_CORRUPTION错误,我将不胜感激。 谢谢! let decrypted_data = unsafe { Vec::from_raw_parts(data_out.pbData, data_out.cbData as usize, data_out.cbData as usize) }; unsafe { winbase::LocalFree(data_out.pbData as minwindef::HLOCAL); // error occured here }; 此代码有两处不正确。 Vec::from_raw_parts() 取得所提供的分配指针的所有权;也就是说,它负责释放分配。如果您在创建 Vec 后释放分配,这将是双重释放。 ptr的所有权被有效地转移到Vec<T>,然后它可以随意释放、重新分配或更改指针指向的内存内容。确保调用此函数后没有其他任何东西使用该指针。 分配必须由 Rust 全局分配器分配: ptr 必须使用全局分配器进行分配,例如via alloc::alloc 功能。 每当您使用unsafe功能时,您必须阅读安全要求并遵守所有要求。 而不是 Vec::from_raw_parts,您应该使用 std::slice::from_raw_parts 构造一个非拥有的 切片引用,然后在该切片上调用 to_vec() 将数据 copy 到新的 Vec 中。然后,您可以LocalFree系统创建的分配。 如果您不想复制数据,则必须返回拥有 Windows 分配的类型 - 而不是 Rust Vec。我不熟悉 Windows 绑定,所以也许这样的类型已经存在,但如果不存在,则编写自己的类型 - 一个包含指针的结构,并实现 Deref 特征以提供数据访问和 Drop当不再需要时释放特征。
GetForegroundWindow() 在某些情况下返回 Explorer Id
因此,我将 GetForegroundWindow() 方法挂接到应用程序的焦点事件,但它显示了异常行为。 如果我通过用鼠标单击应用程序的窗口或按 Alt 键来聚焦应用程序...