【问题标题】:Check for window title [duplicate]检查窗口标题[重复]
【发布时间】:2018-11-06 17:45:01
【问题描述】:

您好,我正在创建检查打开的窗口名称的程序,但目前它每秒检查 100 次,我想在每次窗口更改时检查它。我知道它可能是由于无限循环。但我是新手C++,我不知道怎么做,有人可以帮助我吗?

    char wnd_title[256];
    while(1) {
        HWND hwnd=GetForegroundWindow();
        GetWindowText(hwnd,wnd_title,sizeof(wnd_title));
        cout << wnd_title;
    }

最好的问候。

【问题讨论】:

  • Dupe 被标记为 C#,但答案仅使用基本的 Win API,因此它们仍然适用。
  • 嗯我的功能正常工作我只需要写1次而不是1000次,我知道最简单的答案是粘贴另一个主题,但每个问题都不同不一样,这就是我不喜欢的原因在堆栈上发布一些东西:)

标签: c++ loops winapi


【解决方案1】:

您可以做几件事来实现这一目标:

Best(感谢 cmets 中的 Remy):“另一种选择是使用 SetWinEventHook() 来监听 EVENT_OBJECT_NAMECHANGE 事件。这比拦截 WM_SETTEXT 消息“更有希望”,并且比“渗透”更少侵入。”

  • 简单而无聊(而且看起来并不是您真正想要的):为请求设置一个计时器,以便在更长的时间内调用它
  • 可能是最有希望的一个:使用 WH_GETMESSAGE 设置 Window hook 以侦听来自 SetWindowTextA 函数的消息的 WM_SETTEXT
  • 或者发疯似的 CreateRemoteThread 用一个值得信赖的间谍渗透你的敌人。

【讨论】:

  • 另一种选择是使用SetWinEventHook() 来监听EVENT_OBJECT_NAMECHANGE 事件。这比拦截WM_SETTEXT 消息“更有希望”,并且比“渗透”更少侵入。
  • @RemyLebeau 好的提示谢谢!在我的快速研究中一定跳过了这个。
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 2020-02-13
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多