【问题标题】:VB6 ActiveX exe loses focus when launched from a third party app从第三方应用程序启动时,VB6 ActiveX exe 失去焦点
【发布时间】:2010-09-17 15:38:59
【问题描述】:

我有一个从第三方 CRM 应用程序启动的 VB6 ActiveX exe。启动时,主窗体打开,但它开始闪烁,然后失去焦点。如果您移动表单,您将看到带有切换到重试按钮的服务器繁忙屏幕。

我尝试在表单的 OnActivate 事件中使用 SetFocus 和 SetFocusAPI,但这不起作用。从其他应用启动时,如何让此表单获得焦点,有什么建议吗?

其他信息:

OnLoad 事件调用 SetWindowPos API 以使应用居中于调用应用并设置 HWND_TOPMOST。

其他信息:

  • 活动窗口是正确的窗口(但它显然不在焦点上)

  • 前台窗口是调用应用程序。 SetForegroundWindow 切换前台窗口,但立即返回到调用应用程序。直到我点击表格,表格才出现在前台。我正在调用表单的模块中的一个循环中尝试所有这些(而不是在调用应用程序中)。

【问题讨论】:

  • 解决方案:使用 Mouse_event 模拟鼠标点击闪烁的窗体。

标签: vb6 activex focus


【解决方案1】:

CRM 应用程序必须调用 AllowSetForegroundWindow 以“授权”ActiveX ProcessID 以“窃取”当前流程的焦点。

【讨论】:

  • 很遗憾,调用应用不允许 API 调用。
  • 如果没有 AllowSet... 没有合法的方法可以将焦点更改为 XP 及更高版本中另一个进程所拥有的窗口。 AllowSet... 通知操作系统'他和我在一起。把他的窗户当作我的,关于焦点'
【解决方案2】:

您是否尝试过在表单上设置 Tab 键顺序?您的用户控件的 Tab 键顺序应该为 0,以便获得焦点。

还有,启动后焦点在哪里?

【讨论】:

  • 我不确定,设置表单选项卡顺序将如何影响表单本身的焦点,但是选项卡顺序 0 设置为框架,1 设置为文本框旁边的标签,2到该框架内的文本框。我在上面添加了其他信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
相关资源
最近更新 更多