标签: hwnd

长到HWND(VS8 C++)

我怎么能长时间转到HWND(C++ visual studio 8)?

Long lWindowHandler;
HWND oHwnd = (HWND)lWindowHandler;
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下警告:

警告C4312:'type cast':从'LONG'转换为更大尺寸的'HWND'

谢谢.

casting hwnd long-integer

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

获取每个窗口的HWND?

我正在开发一个python应用程序,我想获得HWND每个打开的窗口.我需要窗口的名称和HWND过滤列表来管理一些特定的窗口,移动和调整它们的大小.

我试图自己查看信息,但我没有得到正确的代码.我试过这个代码,但我只得到每个窗口的标题(这很棒),但我也需要它HWND.

import ctypes
import win32gui
EnumWindows = ctypes.windll.user32.EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
GetWindowText = ctypes.windll.user32.GetWindowTextW
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
IsWindowVisible = ctypes.windll.user32.IsWindowVisible

titles = []
def foreach_window(hwnd, lParam):
    if IsWindowVisible(hwnd):
        length = GetWindowTextLength(hwnd)
        buff = ctypes.create_unicode_buffer(length + 1)
        GetWindowText(hwnd, buff, length + 1)
        titles.append((hwnd, buff.value))
    return True
EnumWindows(EnumWindowsProc(foreach_window), 0)

for i in range(len(titles)):
    print(titles)[i]

win32gui.MoveWindow((titles)[5][0], 0, 0, 760, 500, True)
Run Code Online (Sandbox Code Playgroud)

这里有一个错误:

win32gui.MoveWindow((titles)[5][0], 0, 0, 760, 500, True)
 TypeError: The object is …
Run Code Online (Sandbox Code Playgroud)

python windows hwnd

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

我可以使用hwnd/NativeWindow来设置我的WinForms表单所有者的行为吗?

我的应用程序是一个vb6可执行文件,但系统中的一些较新的表单是用C#编写的.我希望能够使用主应用程序窗口的句柄设置C#表单的Owner属性,以便在我的应用程序和其他应用程序之间来回切换时,对话框保持在最顶层.

我可以获得主应用程序窗口的hwnd.我不确定我能从那里做什么?


更新2008年10月20日17:06:

斯科特,

谢谢你的回复.我忽略了Show/ShowDialog方法参数不是Form类型 - 我只查看Owner属性.

我稍微修改了我正在使用的代码 - 我们有一个组件通常加载我们的Forms并调用ShowDialog.我的代码看起来像这样:

Form launchTarget = FormFactory.GetForm(xxx);  // psuedo-code for generic form loader
launchTarget.StartPosition = FormStartPosition.CenterParent;
IWin32Window parentWindow = GetWindowFromHwnd(hwnd);

launchTarget.ShowDialog(parentWindow);
Run Code Online (Sandbox Code Playgroud)

GetWindowFromHwnd 是代码的方法包装版本:

private IWin32Window GetWindowFromHost(int hwnd)
{
    IWin32Window window = null;
    IntPtr handle = new IntPtr(hwnd);

    try
    {
        NativeWindow nativeWindow = new NativeWindow();
        nativeWindow.AssignHandle(handle);
        window = nativeWindow;
    }
    finally
    {
        handle = IntPtr.Zero;
    }

    return window;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并不是我所希望的.表单以模态方式显示,但它没有显示在正确的位置,也没有在我离开并返回父窗口时仍然在顶部.我们的模态不会在任务栏中显示任务,因此窗口看起来"消失"(尽管它仍然存在于alt-tab窗口列表中).那对我来说表明我可能没有合适的人.如果您有任何其他建议,请回复.再次感谢.


更新于2008年11月10日16:25

一个跟进注释 - 如果你将它分解为try/finally中的方法调用,就像在Scott的第二篇文章中那样,finally块中的调用应该是:

parentWindow.ReleaseHandle();
Run Code Online (Sandbox Code Playgroud)

c# hwnd winforms

6
推荐指数
1
解决办法
5558
查看次数

在C中为我自己的应用程序获取HWND

因为我找不到这个问题的答案,所以我进一步研究了MSDN,我找到了isChild().它可能会给我另一个问题的答案.

现在,为了使用isChild(),我需要传递我要检查的父应用程序的HWND,在本例中是我自己的应用程序.如何获得自己应用程序的HWND?

我不知道标题因为它不断变化所以我不能使用FindWindow().

谢谢

编辑:

由于不清楚,我将添加更多信息:我不是在创建一个窗口.我无权访问窗口的创建.我的代码是一段代码,它与其他程序员编写的任何应用程序一起编译,我无法访问窗口的创建方式,标题或任何其他信息.那么,如何将HWND运行到我正在运行的应用程序的"WINDOW"中?

c windows hwnd

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

在VB6中获取当前窗口/窗体的hWnd?

何我在VB6中获得当前窗口/窗体的hWnd?

vb6 hwnd

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

在WebBrowser控件上显示Adorner

我在我的应用程序中使用System.Windows.Controls.WebBrowser进行各种操作,我注意到当它们应该出现在WebBrowser上时,它们会被切断.我意识到WebBrowser控件实际上是一个COM组件的包装器,可能呈现不同的方式,但我想知道是否有人想出如何解决这个问题.

这是我看到的问题.在这里,我只有一个样本装饰,应该在某个东西的顶角绘制一个大的红色圆圈(作为样本).

当我用这个装饰WebBrowser时,我得到了这个结果:

我希望看到完整的圆圈.

这是这个毫无价值的装饰者的代码,以防有用:

public class SillyAdorner : Adorner
{
    public SillyAdorner(UIElement element) : base(element)
    {

    }
    protected override void OnRender(DrawingContext drawingContext)
    {
        drawingContext.DrawEllipse(new SolidColorBrush(Colors.Red), new Pen(), new Point(7, 7), 30, 30);
        base.OnRender(drawingContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我在主机控件的OnRender方法中将其应用于浏览器的方法:

    protected override void OnRender(DrawingContext drawingContext)
    {
        base.OnRender(drawingContext);            
        var layer = AdornerLayer.GetAdornerLayer(browser);
        layer.Add(new SillyAdorner(browser));
    }
Run Code Online (Sandbox Code Playgroud)

有没有任何黑客或解决方法?

编辑:我正在使用.NET 4.0,如果这有所作为.

编辑#2:WebBrowser似乎继承自HwndHost,我已经看到了关于adorners和hwndsources的另外一两个问题,但我没有看到任何看起来像我可以为WebControl实现它的东西,但希望这是有用的信息有人.

com wpf hwnd adorner webbrowser-control

6
推荐指数
2
解决办法
2194
查看次数

在调试时如何在visual studio中查看有关HWND的信息?

在调试/单步执行Visual Studio时,是否有任何众所周知的工具或插件可用于获取有关HWND的属性?我知道我可以使用Spy ++来做这些事情,但是这样做也很麻烦,同时也踩着调试器.我喜欢做的是将HWND放入Watch子窗口,看看如下内容:

  • 客户端矩形
  • Window Rect
  • 样式/扩展样式
  • 窗口的类以人类可读的形式出现
  • 窗口的名称(:: SetWindowText)
  • 等等

这对我来说似乎是非常基本的东西,对任何人都有用.这样的插件存在吗?我可以通过使用Autoexp.dat玩游戏来实现这一目标吗?

debugging winapi hwnd visual-studio

6
推荐指数
1
解决办法
936
查看次数

如何获取任务管理器中显示的活动窗口应用程序名称

我正在尝试获取活动窗口的名称,如任务管理器应用程序列表中所示(使用 c#)。我遇到了与此处所述相同的问题。我试图按照他们的描述去做,但是我遇到了问题,而重点应用程序是我得到异常的图片库。我也试过这个,但没有给我预期的结果。现在我使用:

IntPtr handle = IntPtr.Zero;
handle = GetForegroundWindow();

const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
if (GetWindowText(handle, Buff, nChars) > 0)
{
    windowText = Buff.ToString();
}
Run Code Online (Sandbox Code Playgroud)

并根据我为大多数常见应用程序创建的表删除不相关的内容,但我不喜欢这种解决方法。有没有办法获取所有正在运行的应用程序的任务管理器中的应用程序名称?

c# winapi hwnd active-window

6
推荐指数
1
解决办法
4680
查看次数

从UWP中的CoreWindow对象获取HWND

这篇简短的MSDN文档称CoreWindow具有ICoreWindowInterop,它获取CoreWindow的句柄HWND.但我找不到如何获得它的参考(C#).请帮忙.

https://msdn.microsoft.com/en-us/library/dn302119(v=vs.85).aspx

c# hwnd uwp

6
推荐指数
2
解决办法
4272
查看次数

枚举HWND属性c ++

我正试图从一个获得属性HWND.我使用了" 使用窗口属性"中的信息,但下面的示例对我不起作用.我在编译代码时遇到错误.

类型"BOOL(__stdcall*)(HWND hwndSubclass,LPCSTR lpszString,HANDLE hData)"的参数与"PROPENUMPROCEXW"类型的参数不兼容

这是我的回调函数

BOOL CALLBACK PropEnumProcEx(HWND hwndSubclass, LPCSTR lpszString, HANDLE hData) {
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

这就是我如何使用它

EnumPropsEx(hwnd, PropEnumProcEx, NULL);
Run Code Online (Sandbox Code Playgroud)

有人有任何关于如何解决这个问题的建议吗?

c++ winapi hwnd

6
推荐指数
1
解决办法
333
查看次数