草庐IT

c++ - 我的 Visual C++ Win32 中有一个无法关闭的 MessageBox!到底是怎么回事?

我有一个无法关闭的消息框,我不确定为什么。它是在我的窗口过程中为这样创建的对话框创建的:hwnd=CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG1),NULL,WndProc);下面是有问题的WndProc代码。问题出在MessageBox调用上,OK按钮没有任何作用,也没有点击该消息框上的“X”。BOOLCALLBACKWndProc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam){staticHBRUSHbgBrush;switch(msg){caseWM_INITD

c++ - 如何在不使用目录的情况下在磁盘上查找文件

我正在编写一个C++应用程序,它将监视以确保磁盘上的某些文件存在。我研究了ReadDirectoryChanges和FindFirstFile/FindNextFile函数以及一个简单的轮询解决方案。我的问题是,如果父目录的名称更改或文件被重命名,我无法判断。我不想查看文件的父目录以进行名称更改。有没有办法在不使用目录的情况下判断磁盘上是否存在文件?有人告诉我这可以使用操作系统本身的内存地址,但我还没有找到任何东西。也许我只是不知道我在找什么?任何帮助将不胜感激。 最佳答案 您可以使用OpenFileById()function打开

c++ - 如何在运行时将编辑样式更改为 ES_NUMBER?

创建编辑控件时,我没有添加ES_NUMBER。后来基于bool标志,我想更改样式并使其成为ES_NUMBER并将其恢复为bool标志的其他值。 最佳答案 documentation有答案。部分摘录:TocreateaneditcontrolusingtheCreateWindoworCreateWindowExfunction,specifytheEDITclass,appropriatewindowstyleconstants,andacombinationofthefollowingeditcontrolstyles.After

c++ - 如何使用RegCopyTree

我一直在尝试使用C++注册表函数,并且试图让RegCopyTree正常工作,但每次尝试时,我都会收到类似这样的错误ERROR_FILE_NOT_FOUND或ERROR_ACCESS_DENIED.我以管理员身份运行该程序,所有其他注册表功能都可以正常工作。这是我使用的代码:HKEYdestinationKey;RegCreateKeyEx(getRootKeyFromCode(rootKeyCode),destinationKeyPathNative,0,NULL,0,0,NULL,&destinationKey,NULL);RegCopyTree(INSERT_ROOT_KEY_HE

c++ - WndProc调用机制(WinAPI)

我正在尝试了解Windows应用程序的工作原理。有一个WndProc函数,其中发生消息处理。LRESULTCALLBACKWndProc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam){switch(msg){caseWM_KEYDOWN:if(wParam==VK_ESCAPE){if(MessageBox(0,L"Areyousure?",L"Exit?",MB_YESNO|MB_ICONQUESTION)==IDYES)//ReleasethewindowsallocatedmemoryDestroyWindow(hwnd);}return

windows - 为什么 Windows 让我们在某些 api 中指定结构的大小?

在一些windowsAPI中,例如Module32Next、Module32First、Process32Next、Thread32Next等,程序员是强制将结构的dwSize字段设置为结构的大小。为什么Windows让我们这样做?这些结构不是Windows自己定义的吗?大小不是已知常数吗?PS:我研究了这些函数,发现它们只是检查大小是否等于硬编码常量。 最佳答案 通过要求程序员指定结构的大小,Windows可以告诉程序员正在使用哪个版本的结构。一些这样的结构实际上在不同版本的Windows之间发生了变化,而另一些则没有-但提供大小

windows - 如何调用 LogonUser() 以在启用 UAC 的 Windows 服务中获取不受限制的完整 token ?

我在WindowsServer2012上运行WindowsService,它需要模拟域管理员用户(该用户也被添加到机器上的本地管理员组)。UAC已在系统上启用,并且使用登录类型为LOGON32_LOGON_INTERACTIVE的凭据调用LogonUser,似乎返回受限token而不是完整token。这导致我尝试执行的管理任务失败。在这种情况下调用LogonUser的正确方法是什么,以便返回完整token而不是受限token?PS:我在这里遇到了一个相关问题HowcanIgetelevatedpermissions(UAC)viaimpersonationunderanon-inter

C++ WinAPI - Windows 关闭之前的清理终止进程?

通常,在使用GUI窗口时,您可以捕获WM_CLOSE事件以在应用程序终止之前执行清理任务。但是,如果我的应用程序只是在后台运行并且进程仅在Windows关闭时终止-是否有任何方法可以捕获此事件并在进程终止之前执行一些清理?我知道无法干预任务管理器进程的关闭。但是随着关机,我只注意到有一个shutdown和一个shutdown/F命令。 最佳答案 创建一个message-onlywindow,并处理WM_QUERYENDSESSION和/或WM_ENDSESSION消息。 关于C++Win

python - 在 Windows 中,如何从另一个窗口的控件中枚举和获取文本?

更具体地说-我有另一个正在运行的应用程序的窗口句柄。此应用程序在某处包含一个TListControl.UnicodeClass控件(我从Winspector了解到这一点)。我如何使用WindowsAPI和该窗口句柄遍历该列表控件中的所有项目并从所有项目中获取文本?您可以假设语言是C/C++,但实际上我将使用win32allforpython。对适当的API调用的引用会很棒。 最佳答案 您需要使用EnumWindows和EnumChildWindows进行枚举。参见here示例和使用信息/警告。对于窗口文本,一旦有了合适的HWND,您

c# - 如果 SetForegroundWindow 和 ShowWindowAsync 不起作用,我该如何设置前景窗口?

它是一个c#winform应用程序。我已将ShowInTaskbar属性设置为false,因为我不希望程序出现在任务栏中,但像这样的SetForegroundWindow或ShowWindowAsync不起作用。 最佳答案 RaymondChen在他的经典文章Foregroundactivationpermissionislikelove:Youcan'tstealit,ithastobegiventoyou中解释了Windows中围绕前台激活的规则。.粗略地说,您不能使用像SetForegroundWindow这样的调用来窃取前台