标签: hwnd

QT5 QPlatformNativeInterface和HWND

使用Qt5(来自WId)的Windows上获取HWND的答案之一中,建议使用QPlatformNativeInterface以恢复本机窗口处理程序.

要访问QT标头,尽管示例使用其完整路径:

#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h>
Run Code Online (Sandbox Code Playgroud)

当然,这不是一个明确的解决方案.有没有办法使用QT的默认包含系统包含QPlatformNativeInterface

请注意,都没有

#include <QPlatformNativeInterface> 
Run Code Online (Sandbox Code Playgroud)

工作(在默认QT构建期间不生成此文件)

也不

#include <QGuiApplication>
Run Code Online (Sandbox Code Playgroud)

作品(仅包含QPlatformNativeInterface的前向声明 )

hwnd wid qtgui qt5

14
推荐指数
3
解决办法
8398
查看次数

从CWnd :: FromHandle获得的CWnd的生命周期是多少?

根据msdn,当我用CWnd :: FromHandle获得CWnd*时,

指针可能是临时的,不应存储以供以后使用.

"后期使用"的含义对我来说并不清楚.它只是当前方法的范围吗?据我所知,Win32中没有GC!

winapi mfc hwnd cwnd

12
推荐指数
1
解决办法
3437
查看次数

将文本插入另一个应用程序的文本框中

如何使用C#或C++将文本插入另一个应用程序的文本框中?很久以前我这样做了,似乎记得使用应用程序HWND的一些事情.但是,由于应用程序的每个实例的更改,我觉得我不记得完整的故事.我是否以某种方式获得正在运行的应用程序列表,提取我想要的应用程序,从中获取HWND然后......嗯....那么什么?:)

c# c++ ipc hwnd inter-process-communicat

11
推荐指数
1
解决办法
2万
查看次数

在WinMain中hPrevInstance的目的是什么?

的定义WinMain为:

int CALLBACK WinMain(
    _In_ HINSTANCE hInstance,
    _In_ HINSTANCE hPrevInstance,
    _In_ LPSTR     lpCmdLine,
    _In_ int       nCmdShow
);
Run Code Online (Sandbox Code Playgroud)

我的理解是:

然而,即使是在20 世纪90年代后期的书中,也从来没有遇到任何用法.那么,使用什么,究竟什么呢?hPrevInstancehPrevInstance

c windows winapi hwnd hinstance

11
推荐指数
1
解决办法
1926
查看次数

如果我只有一个窗口句柄(hWnd),我如何GetModuleFileName()?

我正在尝试获取我的C#2.0应用程序之外的窗口的可执行文件的名称.我的应用程序当前使用来自"user32.dll"的GetForegroundWindow()调用获取窗口句柄(hWnd).

从我能够做的挖掘,我想我想使用GetModuleFileNameEx()函数(来自PSAPI)来获取名称,但GetModuleFileNameEx()需要一个Process的句柄,而不是一个Window.

是否可以从窗口句柄获取进程句柄?(我是否需要先获取窗口的线程句柄?)

编辑了第一句话,使我更清楚我正在尝试做什么.

UPDATE!这是我发现为我工作的C#代码.唯一需要注意的是偶尔它返回一个文件/路径,其中驱动器盘符是"?" 而不是实际的驱动器号(如"C"). - 还没弄明白为什么呢.

[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);

[DllImport("psapi.dll")]
static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] int nSize);

[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);

private string GetWindowModuleFileName(IntPtr hWnd)
{
    uint processId = 0;
    const int nChars = 1024;
    StringBuilder filename = new StringBuilder(nChars);
    GetWindowThreadProcessId(hWnd, out processId);
    IntPtr hProcess = OpenProcess(1040, 0, …
Run Code Online (Sandbox Code Playgroud)

c# winapi hwnd

10
推荐指数
2
解决办法
2万
查看次数

通过进程id c ++获取hwnd

如果我知道进程ID,我怎样才能获得应用程序的HWND?有人可以发一个样品吗?我正在使用MSV C++ 2010.我找到了Process :: MainWindowHandle,但我不知道如何使用它.

c++ pid get hwnd

9
推荐指数
2
解决办法
4万
查看次数

如何找到阻止关机的HWND?

我的应用程序中的某个地方(以及第三方代码库)是一个阻止Windows的窗口过程:

  • 退出
  • 关闭
  • 重新启动

我在我的代码中发现了一个地方,我犯了一个非常常见的调用错误DefWindowProc,但调用错误:

void Grobber.BroadcastListenerWindowProc(ref TMessage msg)
{
   DefWindowProc(_broadcastListenerHwnd, msg.msg, msg.wparam, msg.lparam);
}
Run Code Online (Sandbox Code Playgroud)

我修复了那个错误,我的测试程序不再停止关机.

但完整的应用程序

我现在面临着不得不将程序撕成碎片,直到我的计算机终于重新启动.

在我的应用程序内部的某个地方是一个附加到HWND的Window过程,它返回零WM_QUERYENDSESSION.如果我只知道HWND,我可以使用Spy ++找到Window.

但我怎么能找到hwnd呢?

Windows 应用程序事件日志记录了停止关闭的过程:

在此输入图像描述

并且在更详细的应用程序和服务日志中有更详细的日志.但那些没有证件.

我怎么能找到我的问题hwnd

尝试

我试图用来EnumThreadWindows获取我的"主"线程的所有窗口,并想要手动发送WM_QUERYENDSESSION给所有人以查看谁返回false:

void Grobber.BroadcastListenerWindowProc(ref TMessage msg)
{
   //20170207: Forgetting to set the result can, for example, prevent Windows from restarting
   msg.Result = DefWindowProc(_broadcastListenerHwnd, msg.msg, msg.wparam, msg.lparam);
}
Run Code Online (Sandbox Code Playgroud)

现在我列出了十二个hwnds.戳他们:

var
   wnds: TList<HWND>;

function …
Run Code Online (Sandbox Code Playgroud)

windows delphi hwnd

8
推荐指数
1
解决办法
205
查看次数

如何清除Direct2D渲染目标以使其完全透明

我试图在一个看不见的HWND上绘制半透明的矩形.但是,使用ID2D1HwndRenderTarget :: Clear清除窗口只会使整个窗口变黑,所以当我在顶部绘制矩形时,它们看起来是半黑色的.

如果我没有Clear()并且没有绘制,那么窗口是不可见的,因为它应该是.Clear()是罪魁祸首; 但是,如果我不使用它,那么绘画就会非常糟糕.

这是我在WindowProc中使用的代码:

case WM_PAINT:
    // Begin drawing
    pRenderTarget->BeginDraw();
    pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

    // Clear the window
    pRenderTarget->Clear();

    // Paint the panel and its children
    D2DSurface()->StartPainting();
    {
        D2DSurface()->PaintTraverse(panel);
    }
    D2DSurface()->FinishPainting();

    // Finish drawing
    HRESULT hr = plat->pRenderTarget->EndDraw();
Run Code Online (Sandbox Code Playgroud)

提前致谢!

c c++ transparency hwnd direct2d

7
推荐指数
3
解决办法
8518
查看次数

将输入事件从HwndHost传递到基础WPF控件?

有没有办法将HwndHost上发生的输入事件(主要是鼠标,但最终也是键盘输入)传递回基础WPF控件(例如面板)?我可以在HwndHost中连接到WndProc并重新发送Windows消息.我可以手动创建一个用于鼠标单击的routedevent并将其发送给父级以使其冒泡吗?和想法将不胜感激.谢谢jkersch

wpf hwnd routedevent hwndhost

7
推荐指数
1
解决办法
2159
查看次数

如何从 MainWindow 上的 NavigationView 控件中的框架中的页面检索当前 WinUI 3 MainWindow 的窗口句柄

我正在创建我的第一个 WinUI 3 桌面应用程序。我的主窗口上有一个导航视图。我通过 NavigationView 中的框架导航到 9 个不同的页面。其中一页用于打印报告。我需要让 FileSavePicker 从“reportPage”工作。我直接按照 learn.microsoft.com 的示例实现了以下内容。(我还在下面的一个小型虚拟 winui-3 沙箱测试应用程序中添加了相同的 FileSavePicker 代码段,但我将代码放在 MainWindow 的代码隐藏中,并且它工作得很好。)我需要让 FileSavePicker 工作页面而不是主窗口。感谢大家迄今为止的帮助。

我收到此调试错误:

在此输入图像描述

我知道问题与获取 MainWindow 的 HWND 有关。

// Retrieve the window handle (HWND) of the current WinUI 3 window.
   var window = (MainWindow)Application.Current.MainWindow; (I tried this, but it did not work)
Run Code Online (Sandbox Code Playgroud)

我从上面的行得到这个错误: 在此输入图像描述

(我尝试过这个,但没有成功)

   var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(window); 
Run Code Online (Sandbox Code Playgroud)

我从上面的行得到这个错误:

在此输入图像描述

我不知道正确的语法。

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Provider;
    
namespace MetricReporting.Pages
{
    /// <summary>
    /// An empty …
Run Code Online (Sandbox Code Playgroud)

c# hwnd mainwindow navigationview winui-3

7
推荐指数
1
解决办法
6373
查看次数