我想获取用户启动的任何应用程序的应用程序名称,但我不知道如何实现这一点,我想在控制台应用程序中执行此操作。
我是否需要挂钩新启动的应用程序才能获取其名称或将其从任务管理器中删除?
编辑:平台是windows
答案 0 :(得分:0)
应用程序的名称作为main()
的第一个值传递给argv[]
:
int main(int argc, char** argv) {
std::cout << "app name is: " << argv[0] << std::endl;
return 0;
}
答案 1 :(得分:0)
如果您的目标只是在桌面窗口中显示正在运行的应用程序列表。 (所以不包括系统进程)
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;
}
答案 2 :(得分:0)
如果要在创建一个进程时设置一种回调,您应该看看 在PsSetCreateProcessNotifyRoutineEx和用户CreateProcessNotifyEx。 PS_CREATE_NOTIFY_INFO -struct包含有关app-name(ImageFileName)甚至其路径的信息(有关详细信息,请参阅链接)。
要删除回调,只需将PsSetCreateProcessNotifyRoutineEx的第二个参数设置为TRUE。
向上侧: 除了WDK的安装实施起来不多。
向下侧:
您需要Windows驱动程序工具包(WDK)和VisualC ++的副本。 (头文件)
您只能安装一定数量的挂钩(64) - &gt;应该够了
使用驱动程序级别附加的回调文件名。
备选方案:
EnumWindow() - 使用worker-thread / timer-function调用。