草庐IT

c# - 使用 hWnd 设置 Window.Owner

在我的WPF/C#应用程序中,我使用如下代码创建了一个对话窗口:Windowdialog=newMyDialog()asWindow;dialog.Owner=Window.GetWindow(this);dialog.ShowDialog();如何将对话框所有者设置为另一个应用程序窗口的hWnd?我需要的功能只是在对话框可见时阻止“所有者窗口”。 最佳答案 使用WindowInteropHelper:Windowdialog=newMyDialog();WindowInteropHelperwih=newWindowInterop

c# - 将 HWND 转换为 IntPtr (CLI)

我的C++MFC代码中有一个HWND,我想将此HWND传递给C#控件并将其作为IntPtr获取。我的代码有什么问题,我该如何正确执行?(我认为使用CLI指针有问题,因为我得到一个错误,它无法从System::IntPtr^转换为System::IntPtr。但我不知道如何使它全部正常工作。..)我的C++MFC代码:HWNDmyHandle=this->GetSafeHwnd();m_CLIDialog->UpdateHandle(myHandle);我的C#代码:publicvoidUpdateHandle(IntPtrmHandle){......}我的CLI代码:voidCLID

c# - 从 HWND 到控制

我正在使用user32.dll中的FindWindow方法查找窗口并获取句柄,但是是否可以从句柄中获取窗体控件?并像普通表格一样使用它?示例:intmyhwnd=FindWindow(null,"MyWindow");formmyform=SomeMagic.GetFormFromHandle(myhwnd);myform.Visible=false;还是必须继续使用user32.dll中的方法向窗口发送消息? 最佳答案 如果它是一个托管窗口(您使用System.Windows.Forms创建它,并且它继承自System.Windo

c# - 在没有 NativeMethods 的情况下,如何找到给定 hWnd 的窗口的位置/位置?

我目前正在使用WatiN,发现它是一个很棒的Web浏览自动化工具。但是,截至上一个版本,它的屏幕捕获功能似乎有所欠缺。除了一些thisStackOverflowquestion之外,我已经想出了一个可行的解决方案来从屏幕上捕获屏幕截图(独立生成类似于codebyCharlesPetzold的代码).不幸的是,缺少一个组件:实际窗口在哪里?WatiN方便地向您提供浏览器的hWnd,因此我们可以(通过这个简化的示例)设置为从屏幕复制图像,如下所示://browseriseitheranWatiN.Core.IEoraWatiN.Core.FireFox...IntPtrhWnd=brows

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++ - 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++ - 删除 HWND 对象

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