从隐藏的控制台应用程序显示表单

2023-11-29

我有一个运行控制台应用程序的主应用程序。控制台应用程序通常是隐藏启动的(ProcessWindowStyle.Hidden),但出于测试目的,我可以使用显示的窗口来运行它。

在控制台应用程序中,我可以加载和执行插件。其中一个插件尝试打开 WinForm 对话框。如果控制台应用程序可见,它可以正常工作,但如果控制台隐藏,它就不再工作。

我努力了:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());

我也在新线程中尝试了同样的操作。

Thread t = new System.Threading.Thread(start);
t.Start();
t.Join();

where start()包含之前的东西。另外我尝试过ShowDialog()

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var f = new Form();
f.ShowDialog();

所有方法均未显示该窗口。

在 WinDbg 中,本机调用堆栈始终包括NtUserWaitMessage():

0:000> k
ChildEBP RetAddr  
0038dd58 7b0d8e08 USER32!NtUserWaitMessage+0x15

并且托管调用堆栈始终包括WaitMessage(), FPushMessageLoop() and RunMessageLoop():

0:000> !clrstack
OS Thread Id: 0x47c4 (0)
ESP       EIP     
0045e560 76bff5be [InlinedCallFrame: 0045e560] System.Windows.Forms.UnsafeNativeMethods.WaitMessage()
0045e55c 7b0d8e08 System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32, Int32, Int32)
0045e5f8 7b0d88f7 System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
0045e64c 7b0d8741 System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
0045e67c 7b5ee597 System.Windows.Forms.Application.RunDialog(System.Windows.Forms.Form)
0045e690 7b622d98 System.Windows.Forms.Form.ShowDialog(System.Windows.Forms.IWin32Window)
0045e71c 7b622faf System.Windows.Forms.Form.ShowDialog()

如何从隐藏的控制台窗口显示 WinForms 表单?

SSCCE:

将其编译为 Windows 窗体应用程序:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var startInfo = new ProcessStartInfo("Console.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        Process.Start(startInfo);
    }
}

将其编译为控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var mainForm = new Form();
        // Enable next line to make it show
        // mainForm.Visible = true;
        Application.Run(mainForm);
    }
}

Using 温斯派克特间谍我发现窗口实际上是可用的,但它没有WS_VISIBLE风格。将该样式应用于表单使其可见并显示在 Windows 任务栏中。

解决方案是在显示表单之前使其可见,因此以下方法有效:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var f = new Form()
f.Visible = true;
Application.Run(f);

因为就我而言,我想获得返回值,我应该调用ShowDialog()。然而,调用ShowDialog()不允许在已经可见的表单上使用,所以我坚持Application.Run(f)并自己检索结果:

var answer = configForm.DialogResult;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从隐藏的控制台应用程序显示表单 的相关文章

  • 您可以从基本 Win32 控制台模板应用程序中的 C#/Winrt 组件调用(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)吗?)

    我有一个现有的程序 win32 x86 控制台应用程序 需要调用托管代码 来自 Net 的 C dll The dll不暴露给 COM 但可以从 C WinRT 组件调用并由 C WinRT 控制台模板应用引用 BUT即使安装了 C Win
  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 在后台播放网页中的声音文件

    我想在我的网页上后台播放声音文件 不希望出现媒体播放器 UI 我的网站将在 Fire Fox 上运行 我使用了 Embed 元素并设置了 Hidden 属性是真实的问题是 除非我删除隐藏属性 否则不会播放任何声音 在这种情况下 声音文件会播
  • React 组件渲染方法无缘无故被调用两次

    import App css import SolarSystem from components solarSystem solarSystem class App extends React Component componentDid
  • Akka 整合并发数据库请求

    我希望能够向多个数据存储库发出并发请求并合并结果 我试图了解我的方法是否有效 或者是否有更好的方法来解决这个问题 我绝对是 Akka Spray Scala 的新手 并且真的想更好地了解如何正确构建这些组件 任何建议 提示将不胜感激 试图让
  • 如何将设计器生成的类的基类从 System.Windows.Forms.Form 更改为我自己的 BaseForm

    每次我向 WinForms 项目添加一个新的 Form 时 设计器都会生成一个继承自 System Windows Forms Form 的新类的代码 出于某种原因 我希望它继承自我自己的 BaseForm 类 除了自己编辑生成的文件之外
  • shell级别的PostgreSQL数据库逆向工程

    我碰巧用大型数据库做了一些调节工作 但我对此没有那么丰富的经验 所以我想明智的做法是在我的本地主机上创建类似的数据库 以免弄乱原始数据库 这是我的问题 是否可以生成SQL脚本将创建我想要的精确表 我的意思是在 MySQL GUI 工具上有这
  • 如何使用 Node.js 在 a 中使用通配符从目录中读取文件

    我需要使用 Node js 从目录中读取文件 文件名都是 json 如何在 Node js 中对文件名部分使用通配符 您可以使用glob npm用于使用通配符文件名模式匹配 var glob require glob options is
  • 如何在iOS SDK中创建一个伞形框架?

    我想在 iOS SDK 中创建一个伞形框架 我的要求是 我有一个名为 框架 A 的框架 我想创建另一个名为 框架 B 的框架 我想将 框架A 作为子框架添加到 框架B 中 用户只需在项目中导入 框架B 即可同时使用 框架A 和 框架B 换句
  • 子对象初始化的顺序是什么?

    让我们有一个对象o类的某种类型 其中包含成员子对象so and sso另一个类类型 考虑以下示例 include
  • 如何从 FiPy 中的 3D 变量中提取平面(3D 到 2D)

    我在 3D 网格上有一个变量 我正在尝试制定一个计划 我很惊讶这个问题以前没有被问过 它看起来是一个简单而常见的问题 但我还没有找到任何好的方法 我将不胜感激任何建议 假设我有一个 3x3x5 的平行六面体 并且我正在尝试提取 z 平面 f
  • 由于错误 80020101,无法完成操作。IE [重复]

    这个问题在这里已经有答案了 可能的重复 Ajax请求问题 错误80020101 我正在使用 JQuery 1 64 这是我重置计时器的代码 var message Logged in var myTimeout setTimeout tim
  • 如何将 IIS 服务器中的特定端口重定向到其他端口

    我的 URL 重写规则仅适用于 IIS 中的端口 80 重写适用于 http 本地主机 80 gt http 本地主机 8100 重写适用于 http localhost 80 重定向 gt http 本地主机 8100 重写不适用于 ht
  • 为无效迭代器定义了哪些操作?

    作为后续关于比较无效迭代器的问题 我试图在 C 标准中找到无效迭代器允许的表达式的定义 搜索 无效迭代器 仅在 24 2 1 11 中找到一个引用 它说无效的迭代器可能是 单一的 但仅说明取消引用它们可能是未定义的行为 没有给出进一步的语义
  • 使用 ASP.Net 教授初学者 Web 开发的小项目想法 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我几周前就问过这个问题 如
  • 尝试将数据插入 Atlast 服务器上的集合时,命令失败并出现错误 8000 (AtlasError)

    我正在使用 mongoDB Atlas 创建一个 mongodb 一切似乎都很好 当我运行程序时 服务器连接成功 但是 当我尝试将数据插入集合时 它给出了错误 命令失败 错误 8000 AtlasError 我读到另一篇文章说我必须使用不同
  • 使用 JSF 的 Servlet 过滤器

    我尝试使用 JSF 配置 Servlet 过滤器 我在这里遇到很多问题 我也使用 PrimeFaces 这是我的 web xml
  • 如何在不root的情况下禁用Android设备的hdmi端口?

    我想知道是否有一种方法可以在不root的情况下禁用android设备的hdmi端口 从 Android 4 2 SDK 级别 17 开始 DisplayManager API http developer android com refer
  • 如何绑定一个List(一次或多次)?

    我遵循演示模型模式来编码一些屏幕 我把一些豆子储存在一个ArrayList 我将在一个列表中显示该列表的内容JTable 感谢一个AbstractTableModel 我也想展示some组合框中此列表中的记录 以表单形式 和其他一些在 JL
  • 如何检测触发器中的对象?

    我在场景中放置了一个带有触发器的对象 并且我希望控制台在我单击按钮时向我发送一条消息 检测玩家是否处于触发器内或不在触发器内 当我玩游戏时 它只会在玩家进入触发器时向我发送一条消息 Code using System Collections
  • NSNumber 计算和精度?

    两个简单的问题 如果可以的话 我应该如何获取两个 NSNumber 对象 执行计算并最终得到一个 NSNumber 的结果 NSNumber flux NSNumber alloc initWithDouble 100 0 NSNumber
  • 从隐藏的控制台应用程序显示表单

    我有一个运行控制台应用程序的主应用程序 控制台应用程序通常是隐藏启动的 ProcessWindowStyle Hidden 但出于测试目的 我可以使用显示的窗口来运行它 在控制台应用程序中 我可以加载和执行插件 其中一个插件尝试打开 Win