【问题标题】:c++ get application name when clicked by mousec ++鼠标单击时获取应用程序名称
【发布时间】:2014-03-19 14:01:04
【问题描述】:

我想获取用户启动的任何应用程序的应用程序名称,但我不知道如何实现,我想在控制台应用程序中执行此操作。

我是否需要挂接新启动的应用程序以获取其名称或从任务管理器中获取它?

编辑:平台是windows

【问题讨论】:

  • 您可以添加您正在使用的平台。如果您在 Windows 上运行,这可能会有所帮助:stackoverflow.com/questions/4593493/…
  • 您想枚举在某个时刻给出的所有进程名称,还是希望在用户创建进程时得到*通知? (例如:用户 A 打开 Notepad.exe --> 回调函数会导致向您自己的应用程序发送消息)。
  • 我想在用户创建进程时收到通知

标签: c++ console mouseevent


【解决方案1】:

如果你想在创建一个进程时设置一种回调,你应该看看 在PsSetCreateProcessNotifyRoutineEx 和用户CreateProcessNotifyExPS_CREATE_NOTIFY_INFO-结构包含有关应用程序名称 (ImageFileName) 甚至其路径的信息(有关更多信息,请参阅链接)。

要移除回调,只需将PsSetCreateProcessNotifyRoutineEx 的第二个参数设置为 TRUE。

优点: 另外安装WDK没有太多的执行。

缺点:

您需要 Windows 驱动程序工具包 (WDK) 和 VisualC++ 的副本。 (头文件)
您只能安装一定数量的 hooks (64) --> 应该足够了
使用附加在驱动程序级别的文件名回调。

替代方案:

EnumWindow()-用工作线程/定时器函数调用。

【讨论】:

  • 当我达到 64 时是否可以删除回调,或者这是某种安全限制?然后我会将应用程序信息存储在其他地方
  • 有例子吗?
  • 实际上我发现了一个问题,可能会提供您需要的所有答案:here。它甚至可以在 stackoverflow 上找到!
【解决方案2】:

应用程序的名称作为argv[]的第一个值传递给main()

int main(int argc, char** argv) {
    std::cout << "app name is: " << argv[0] << std::endl;
    return 0;
}

【讨论】:

  • 我不想知道我自己的应用程序的名称。还是我使用/启动的每个应用程序的名称都传递给 main()?
  • argv 包含由 Shell/cmd.exe/something 传递的启动应用程序的命令行。对于 WinMain(),它是第三个参数 (LPSTR lpCmdStr)。根据标准,第一个参数 [argv[0]] 包含应用程序的名称。
【解决方案3】:

如果您的目标只是在桌面窗口中显示正在运行的应用程序列表。 (所以不包括系统进程)

EnumWindows 函数可以是一个很好的方法。

这是一个小示例代码。

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <iostream>

using namespace std;

#pragma comment(lib, "user32.lib")

int window_num1=0;

BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)
{
    TCHAR title[256] = {0,};
    if (IsWindowVisible(hWnd) && GetWindowTextLength(hWnd) > 0)
    {
        window_num1++;
        GetWindowText(hWnd, title, _countof(title));
        _tprintf(_T("Value is %d, %s\n"), window_num1, title);
    }
    return TRUE;
}

int main() 
{
    EnumWindows(MyEnumProc, 0);

    getchar();
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    相关资源
    最近更新 更多