Articles of winapi

在用户注销/login后,创build托盘图标时出现罕见错误

我创build一个系统托盘图标: BOOL TrayMessage(HWND hWnd, DWORD dwMessage) { NOTIFYICONDATA nid; nid.cbSize = sizeof(nid); nid.hWnd = hWnd; nid.uID = 1; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_MYAPP)); lstrcpy(nid.szTip, L"MyApp"); nid.uCallbackMessage = WM_NOTIFYICON; return Shell_NotifyIcon(dwMessage, &nid); } 当应用程序启动/窗口创build时: case WM_CREATE: if (!TrayMessage(hWnd, NIM_ADD)) MessageBox(hMainWnd, L"Tray error.", 0, 0); 这个错误消息框: 正常启动.exe时不会发生。 只有在用户注销/用户重新login后才会发生,平均每5次启动一次 (我的应用程序在每次启动任务时都会自动启动,并带有TaskSchedular任务) 当然,当错误发生时,图标不会显示在任务栏中。 可能是什么原因? […]

C窗口gui字体大小更改在hmenu

我在WINAPI资源文件中有这个菜单,菜单的元素看起来很小,有没有办法使字体变大或者改变文本的颜色? 要么在主代码中添加一些代码,要么更改资源文件。 我尝试了FONT 13, "MS Sans Serif"但没有奏效 IDR_MYMENU MENU BEGIN FONT 13, "MS Sans Serif" POPUP "&File" BEGIN MENUITEM "&Exit", IDD_FILE_EXIT END POPUP "&Stuff" BEGIN MENUITEM "&Go", ID_STUFF_GO MENUITEM "&File Kapat", IDD_FILE_KAPAT END END

嵌套的Windows作业对象:如何查询由父作业对象施加的限制

设P是首先分配给MS Windows作业对象J1,然后分配给另一个作业对象J2的过程。 所以J2嵌套到J1中。 然后为J1设置限制,例如JOB_OBJECT_LIMIT_PROCESS_MEMORY 。 文档说: 如果作业是嵌套的,则有效内存限制是作业链中限制最多的内存限制。 如何在没有J1的情况下从P内部获得有效限制? 使用NULL作为作业句柄调用QueryInformationJobObject仅为J2提供信息。

C + +的Windows IP发布和更新

我从这里拿了代码: IpRenewAddress函数 创build一个新的空的Win32项目,并将其中的代码。 build立和运行。 一切正常。 没有任何错误。 但… 的结果: dwRetVal = IpReleaseAddress(&pInfo->Adapter[0]) 和 dwRetVal = IpRenewAddress(&pInfo->Adapter[0]) dwRetVal = 2,描述为“系统找不到指定的文件”。 我closures了所有优化,打开所有通知。 属性: /增量:NO 链接器输出文件是 $(OUTDIR)$(的TargetName)$(TargetExt) 我看过“C:\ Windows \ inf \ setupapi.setup”,那里有logging “错误2:系统找不到指定的文件DeleteFile:'C:\ windows \ system32 \ DRIVERS \ nvgfx.sys' ……” 删除的NVIDIA驱动程序,重新启动 – 没有帮助。 包含“windows.h”时,“Windows API分区和ARM桌面支持”块中的“corect.h”中只有一个警告。 错误C2220:将警告视为错误 – 不生成“对象”文件 只有/ WX标志。 任何人都可以帮忙吗? 新: 检查所有接口。 “找不到…”。 新2 ipconfig / […]

GetQueuedCompletionStatus在线程池工作线程中使用时的奇怪行为

我一直在testing将IO完成端口与线程池中的工作线程相结合,并偶然发现了一个我无法解释的行为。 特别是,虽然下面的代码: int data; for (int i = 0; i < NUM; ++i) PostQueuedCompletionStatus(cp, 1, NULL, reinterpret_cast<LPOVERLAPPED>(&data)); { std::thread t([&] () { LPOVERLAPPED aux; DWORD cmd; ULONG_PTR key; for (int i = 0; i < NUM; ++i) { if (!GetQueuedCompletionStatus(cp, &cmd, &key, &aux, 0)) break; ++count; } }); t.join(); } 工作得很好,并接收NUM状态通知(NUM为大数,100000或更多),类似的代码使用线程池工作对象读取每个工作项的一个状态通知,读取后重新发布工作项,读取后失败几百个状态通知。 有以下全局variables(请不要介意名字): HANDLE cport; PTP_POOL […]

使用Windows API连接到无线miracast显示器

我想连接到已经与主机配对的无线miracast显示器。 我能够使用EnumDisplayDevices列出无线显示设备。 我曾尝试使用ChangeDisplaySettingsEx但它不起作用,我希望它会自动连接到它并将其设置为主显示器在miracast显示设备上使用CDS_SET_PRIMARY 。 它看起来像ChangeDisplaySettingsEx不能build立自己的连接。 应该有一些可以连接到显示器的API。 我也试着用SDC_TOPOLOGY_CLONE尝试SetDisplayConfig ,把显示configuration改成“clone”,认为它会自动连接到显示器。 问题:使用Windows API连接无线显示设备的正确方法是什么?

有什么办法可以显示与Windows Hello结合的凭证对话框?

我的意思是,像这样的东西(它在Control Panel > Credential Manager ): 我已经尝试了一些API: CredUIPromptForWindowsCredentials和CredentialPicker.PickAsync :看起来不错,但没有指纹/ PIN选项。 UserConsentVerifier.RequestVerificationAsync :看起来不错,但只有指纹选项。 我需要显示user/password和fingerprint/pin选项。 有没有任何API或选项来显示它们? 谢谢:)

JNA:枚举系统处理内存错误-1073740940(0xC0000374)

我想枚举Windows 64位的所有系统句柄与以下内容: WinDef.ULONGByReference nBufferLength = new WinDef.ULONGByReference(); Memory pInfo = new Memory(4); long ntStatus = -1; while (ntStatus != 0 /* NT_SUCCESS */) { ntStatus = NtDll.INSTANCE.NtQuerySystemInformation( 0x10, pInfo, (int) pInfo.size(), nBufferLength); if (ntStatus == 0xC0000004 /*STATUS_INFO_LENGTH_MISMATCH*/) { if (pInfo != Pointer.NULL) { Native.free(Pointer.nativeValue(pInfo)); } int bufferLength = nBufferLength.getValue().intValue(); pInfo = new Memory(bufferLength); } else […]

设备句柄GetFinalPathNameByHandle失败

如果我使用CreateFile为“\\?\ NUL”或“\\?\ pipe \”path创build文件句柄,则该句柄将映射到为“\ Device \ Null”或“\ Device \ NamedPipe“内核设备对象。 由于GetFinalPathNameByHandle函数支持已经返回“\ Device \ HarddiskVolume1 \”这样的string的VOLUME_NAME_NT属性,所以我想我能够获得类似的设备句柄path。 但是,调用总是失败,或者使用ERROR_INVALID_FUNCTION或ERROR_INVALID_PARAMETER ,具体取决于打开文件的访问标志。 实际上,几乎所有对类似函数的调用都失败了,比如GetFileInformationByHandle , GetFileInformationByHandleEx ,甚至像NtQueryInformationFile一样调用NT函数 – 返回STATUS_INVALID_PARAMETER 。 唯一不失败的函数是GetFileType (能够识别pipe道), GetVolumeInformationByHandle (能够识别驱动程序)和NtQueryInformationFile与FileModeInformation 。 所有这些函数在任何标准文件上都可以使用,但不支持设备文件句柄。 我如何从设备句柄获取path信息? 有一些Nt或Iofunction可以工作吗? 有没有其他方法来识别设备,如果我唯一拥有的是手柄?

无法在user32.dll中findSetWindowsHookEx过程

操作系统:Windows 10 64bit Go版本: go版本go1.7 windows / amd64 运行代码时出现以下错误消息。 我试图用pipe理员prividge运行它,但仍然无法正常工作。 我参考了以下链接, https://github.com/AllenDang/w32 https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx panic: Failed to find SetWindowsHookEx procedure in user32.dll: The specified procedure could not be found. goroutine 1 [running]: panic(0x4a7980, 0xc04206c3f0) C:/Go/src/runtime/panic.go:500 +0x1af golang.org/x/sys/windows.(*LazyProc).mustFind(0xc04206c240) D:/repos/src/golang.org/x/sys/windows/dll_windows.go:286 +0x71 golang.org/x/sys/windows.(*LazyProc).Call(0xc04206c240, 0xc04203e480, 0x4, 0x4, 0xc042036058, 0x0, 0xc04206c360, 0xc04202def8) D:/repos/src/golang.org/x/sys/windows/dll_windows.go:307 +0x36 main.SetWindowsHookEx(0xd, 0x4cab20, 0x0, 0xc000000000, 0x4bfe15) d:/repos/src/github.com/quchunguang/trygo/demos/demo_windows_hook/main.go:85 +0xac […]