草庐IT

c++ - 在 C++ 中从可执行路径(或从 hWnd,或从 pid)获取程序名

我有一个窗口的HWND,使用GetWindowThreadProcessId我得到它的进程的pid,通过GetModuleFileNameEx我得到了可执行路径(我使用PathFindFileName来获取可执行名称)。但是,我似乎找不到任何方法(如果有的话)来获取程序的名称。例如,对于可执行文件chrome.exe,我想获取名称“GoogleChrome”。你能帮帮我吗?编辑:谢谢大家!使用您推荐的引用资料,我想出了这个:CStringcsProductName;DWORDcbFileVersionInfo=GetFileVersionInfoSize(pszProcessPath,

c++ - 如何获取给定 HWND 的工具提示文本?

我正在寻找一种方法来获取与给定HWND关联的工具提示控件(如果有)。工具提示控件的文本也足够了。我找到的最接近的是TTM_GETTEXT消息,但它意味着要发送到工具提示控件本身,而不是与其关联的工具。虽然我没有工具提示控件的句柄。有人知道怎么做吗?所有这些都是使用C++中的普通WindowsAPI完成的。 最佳答案 似乎没有从控件获取提示或其文本的特定消息,但这是MFC的CWnd类实现OnToolHitTest()的方式,您应该能够适应Win32:INT_PTRSomeFunction(HWNDhWndChild,TOOLINFO*

c++ - 如何在 C++ 中将命令行字符串转换为 hwnd?

我想使用OpenGL在C++中创建屏幕保护程序。发送到我的应用程序以在小窗口中预览屏幕保护程序的命令行包含一个数字,它是屏幕保护程序控制面板小程序中的小监视器窗口的hwnd。如何将此字符串转换为有效的hwnd? 最佳答案 来自INFO:ScreenSaverCommandLineArguments:isaHWNDpresentedonthecommandlineasanunsigneddecimalnumber.因此,将十进制数转换为unsignedint然后转换为HWND.例如:(HWND)atoi(argv[n])哪里argv[

c++ - 自定义编辑控件win32

我终于设法使用richedit和iczelion的教程完成了语法高亮显示。现在我找到了,它肯定不够快。我正在考虑向前迈出这一步:自定义编辑控件。但我不知道该怎么做。你们能告诉我该怎么做吗?给我一些信息开始?甚至一些教程或推荐一些书?现在我不要求你们为我拼写出来,只是一些开始。我将为此使用C++/ASM/Win32API。我敢肯定你们中的许多人之前已经制作过自定义编辑控件,所以您甚至可以分享您的经验。谢谢,开发人员 最佳答案 我花了一天时间编写我自己的自定义编辑控件-它运行良好,所以我想在这里分享我的经验,也许对于某些人来说这段代码可

c++ - 如何最好地封装窗口句柄?

我正在开发一个由许多独立子系统组成的系统。其中两个子系统是Window和GraphicsAdapter子系统。GraphicsAdapter需要一个低级窗口句柄(HWND或X11窗口句柄,具体取决于操作系统),而窗口子系统是一种抽象这些操作系统特定API的方法。如果Window子系统允许访问低级API句柄,则封装很可能会被破坏。如果它允许窗口进入全屏和返回全屏,但必须触发事件警告系统有关这些更改,并且低级句柄被用来在它不知情的情况下切换到全屏怎么办?如何确保句柄从Window子系统安全地传送到GraphicsAdapter而不会被滥用,并且仍然足够灵活以允许稍后添加其他子系统(如Gra

c++ - 如何检查其他程序是否以全屏模式运行,例如。媒体播放器

如何检查其他应用程序是否以全屏模式和C++MFC中的最顶层模式运行?如果媒体播放器或其他播放器正在运行,我只想禁用所有自动对话框(警告)。(就像Avast中的静音/游戏模式。)我怎么能那样做?谢谢。 最佳答案 使用EnumWindows、GetWindowInfo和GetWindowRect的组合可以达到目的。boolIsTopMost(HWNDhwnd){WINDOWINFOinfo;GetWindowInfo(hwnd,&info);return(info.dwExStyle&WS_EX_TOPMOST)?true:false;

c++ - CWnd::CreateDlgIndirect 离开 m_hWnd==NULL

我正在处理的对话框未显示,使用:CWnd::CreateDlgIndirect(LPCDLGTEMPLATElpDialogTemplate,CWnd*pParentWnd,HINSTANCEhInst)对CreateDlgIndirect的调用是在lon-used基类中进行的,它有效地获取了资源文件中对话框模板的IDD-它适用于许多其他对话框,但我看不出我的对话框有什么不同。当以更正常的方式创建时,我的对话框工作正常,但我必须使用基类,因为它内置了许多其他功能。我在dlgcore.cpp中搜索CWnd::CreateDlgIndirect时发现,普通的Win32API调用失败了:hW

c++ - HWND 的 HINSTANCE

我使用ShellExecute从我当前的应用程序创建一个新的应用程序实例。我想获取该应用程序的HWND。是否可以从HINSTANCE获取HWND或者我需要使用EnumWindows? 最佳答案 你是对的,你需要枚举你的窗口thisquestionwillhelpyoufurther 关于c++-HWND的HINSTANCE,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/51925

c++ - 在 C++ WIN32 中识别后台进程并将其置于前台

谁能告诉我如何识别特定的后台进程(即,已经在运行的应用程序)并将其带到前台?例如,如果一个记事本应用程序在后台运行,当我运行我的WIN32应用程序时,它应该识别记事本应用程序并且记事本应该弹出或进入前台。我尝试了SwitchToThisWindow()函数,但它的工作方式类似于Alt+tab。它不会识别后台进程。请给我建议这方面的演练指南..谢谢你.. 最佳答案 不清楚您所说的“后台进程”是什么意思,但这里有一些想法:使用EnumWindows为您提供桌面上的所有顶级HWND。这将包括一堆你不想要的东西,你必须过滤掉。建议您使用Sp

c++ - 删除 HWND 对象

我有一种情况,当我收到一条消息时,我必须从hWnd中删除一个窗口。我虽然这一定是可能的,因为CreateWindowEx通过返回HWND创建了一个对象,但我必须能够删除一个对象。注意:hWnd位于其他进程中。 最佳答案 正确的方式是发送WM_CLOSE向相关窗口发送消息或直接调用DestroyWindow这将发送WM_DESTROY消息到窗口。线程不能使用DestroyWindow来销毁由不同线程创建的窗口。WM_CLOSE和WM_DESTROY的区别:发送WM_CLOSE后,目标应用程序可以在销毁窗口之前提示用户确认,方法是处理W