【问题标题】:How do I determine the internal HWND used by COM in my current process?如何确定 COM 在当前进程中使用的内部 HWND?
【发布时间】:2018-01-05 05:08:12
【问题描述】:

我想在我的进程中将消息直接发布到 COM 拥有的 HWND。如何获取 COM 在单线程公寓模式下使用的 HWND?

【问题讨论】:

  • 这个的用例是什么?我不禁想,这是一个可怕的 hack,可能是 XY problem 的结果。
  • 这是一个可怕的黑客攻击。你说得对。这并不违法。是吗?
  • 这是合法的。玩电锯也是合法的。
  • 我很确定我 100% 同意你的观点。但是我该怎么办呢?我想在 stackoverflow 上捕获这些信息,以便我或其他人可以在将来的某个其他时间回到它。
  • @zumalifeguard 很多年前我尝试过做这种事情(并且很成功),但是我找到了更好的解决方案来解决我曾经考虑过的每个问题。如果您想在这里或私下讨论您的用例,我很乐意提供一些替代方案供您考虑。

标签: c winapi com hwnd sta


【解决方案1】:

试试这个:

HWND prevWindow = NULL;
HWND hwnd;
for ( ;; )
{
    hwnd = FindWindowEx( HWND_MESSAGE, prevWindow, L"OleMainThreadWndClass", NULL );
    if ( !hwnd )
        break;

    if ( GetWindowThreadProcessId( hwnd, NULL ) == GetCurrentThreadId() )
        break;

    prevWindow = hwnd;


    WCHAR className[255];
    *className = 0;
    ::GetClassName( hwnd, className, 255 );
}

让我知道它是否有效。

【讨论】:

  • 你问自己是否有效?哇:D
  • Stack Overflow 上的答案应该回答所提出的问题。如果您需要询问建议的解决方案是否正确,您需要将其放在您的问题中。请使用edit 链接并更新您的问题。
  • 好的,IInspectable。我会这样做的。
  • 等等。我不是在问问题中提出的解决方案是否正确。问题只是问如何去做。
猜你喜欢
  • 2011-02-06
  • 2013-01-14
  • 2010-12-23
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多