相关疑难解决方法(0)

如何使用.NET枚举属于特定进程的所有窗口?

我如何使用c#查找特定进程创建的所有窗口?

UPDATE

我需要使用应用程序的PID(进程ID)枚举属于特定进程的所有窗口.

.net c# windows

29
推荐指数
3
解决办法
5万
查看次数

.NET(C#):只有进程句柄或PID时获取子窗口?

一种特殊情况的问题:

  • 我开始一个过程 System.Diagnostics.Process.Start(..)
  • 该过程打开一个闪屏 - 这个闪屏成为主窗口.
  • 启动画面关闭,显示"真实"UI.主窗口(启动画面)现在无效.
  • 我仍然有Process对象,我可以查询它的句柄,模块等.但是主窗口句柄现在无效.

此时我需要获取进程的UI(或UI句柄).假设我无法改变流程的行为以使其更容易(或更安全).

我在网上四处看看,但我承认我没有看一个多小时.看起来像它应该有点琐碎:-(

.net c# windows user-interface

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

屏幕截图中未捕获对话框和菜单更改

我正在构建一个WinForms应用程序,通过每隔500毫秒获取一次屏幕截图来记录外部进程的步骤.我使用以下代码:

Bitmap bmp = new Bitmap(width, height,PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rect.left,
                 rect.top,
                 0,
                 0,
                 new Size(width, height),
                 CopyPixelOperation.SourceCopy);
Run Code Online (Sandbox Code Playgroud)

代码工作正常但唯一的问题是当我从外部进程的窗口打开一个对话框时(例如,Save As...在记事本中打开对话框),屏幕截图冻结到原始窗口而不是显示对话框.

我的理论是,由于我使用以下代码来检测应用程序是否失去焦点,然后只需恢复到上次保存的屏幕截图:

if (GetForegroundWindow() != proc.MainWindowHandle) //proc is just a process from system process list by Process.GetProcessesByName()
{
   return LastScreenShot;
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern IntPtr GetForegroundWindow();
Run Code Online (Sandbox Code Playgroud)

但是,此代码对于向用户仅显示正在记录的应用程序而不是在记录区域内或记录区域内的桌面部分中拖动的任何其他应用程序是必要的.此外,当我单击菜单时,它有时会显示菜单在褪色位置冻结,有时根本不显示或显示但在屏幕截图中看不到导航突出显示.

那么有什么办法可以解决这个问题吗?

类似的问题在这里被问到 屏幕捕获没有捕获我的应用程序中的对话框, 但它没有解决我的问题,因为答案使用相同的代码,我的应用程序没有采取整个桌面的截图.

.net c# graphics winforms

10
推荐指数
1
解决办法
399
查看次数

获取进程的所有窗口的句柄

在使用进程类的C#中,我可以获得进程主窗口的句柄,但是我需要访问一个不是其进程主窗口的窗口.如何获取进程所有窗口的句柄?

c#

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

标签 统计

c# ×4

.net ×3

windows ×2

graphics ×1

user-interface ×1

winforms ×1