gpt4 book ai didi

vb.net - VB.NET exe,当外部脚本AppActivate时与激活事件炸弹上的进程外COM进行对话

转载 作者:行者123 更新时间:2023-12-03 17:38:30 24 4
gpt4 key购买 nike

我编写了一个VB.NET Windows窗体应用程序,每次激活事件触发时,该程序都会从​​进程外COM对象请求一个字符串。我的表单有两个选项卡,因此每次我的窗口获得焦点时,我都需要以编程方式翻转到正确的选项卡。正常工作,直到...

偶然地,有人运行了一个vbscript(是,脚本,不是exe),其中包含:

    Set shell = CreateObject("WScript.Shell")
shell.AppActivate("Window Title That Matches My App")

此脚本始终使我的应用程序崩溃。通常情况非常糟糕,以至于“异常”对话框通常无法绘制自身。我必须从任务管理器中删除它。有时,异常是可读的。 (我还通过使用Visual Studio附加到正在运行的exe来确认异常)。它是:“System.Runtime.InteropServices.COMException(0x8001010D):由于应用程序正在调度输入同步调用,因此无法进行传出调用。”

我真正感到困惑的是,我的应用程序具有使用互斥锁的多个实例检测,并且如果现有实例正在运行,则我自己的代码(已编译)将使用VB.NET自己的AppActivate关键字,这不会使我的应用程序崩溃。它会激活正在运行的实例,并按预期退出冗余实例。

该问题似乎完全是由cscript / wscript的AppActivate触发的。我写了一个3线.vbs来确认这一点。可重复的。

有没有办法在我的已编译应用程序中捕获或避免这种情况?

最佳答案

对我来说尚不清楚为什么这种方法实际上可以解决问题,但是确实有效:

  • 在表单中添加一个计时器。
  • 将所有_Activated代码移至计时器的_Tick事件。
  • 使_Activated事件启动计时器。
  • 使_Tick事件停止计时器,然后执行COM任务。
  • 关于vb.net - VB.NET exe,当外部脚本AppActivate时与激活事件炸弹上的进程外COM进行对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17175464/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com