c# - 开发 C# 控制台应用程序以查找所有使用 DirectX 的进程
问题描述
如果一个正在使用 Windows DirectX,我需要开发一个小型控制台应用程序来搜索所有 Windows 进程。
有什么建议么?我搜索了,但我找不到任何关于它的东西。
解决方案
我曾经遇到过类似的问题,我需要确定一个进程是否使用我要编辑的文件,它采用文件的名称并显示打开它的进程,也许你可以用它来解决你的问题:
#include <windows.h>
#include <RestartManager.h>
#include <stdio.h>
int __cdecl wmain(int argc, WCHAR **argv)
{
DWORD dwSession;
WCHAR szSessionKey[CCH_RM_SESSION_KEY+1] = { 0 };
DWORD dwError = RmStartSession(&dwSession, 0, szSessionKey);
wprintf(L"RmStartSession returned %d\n", dwError);
if (dwError == ERROR_SUCCESS) {
PCWSTR pszFile = argv[1];
dwError = RmRegisterResources(dwSession, 1, &pszFile,
0, NULL, 0, NULL);
wprintf(L"RmRegisterResources(%ls) returned %d\n",
pszFile, dwError);
if (dwError == ERROR_SUCCESS) {
DWORD dwReason;
UINT i;
UINT nProcInfoNeeded;
UINT nProcInfo = 10;
RM_PROCESS_INFO rgpi[10];
dwError = RmGetList(dwSession, &nProcInfoNeeded,
&nProcInfo, rgpi, &dwReason);
wprintf(L"RmGetList returned %d\n", dwError);
if (dwError == ERROR_SUCCESS) {
wprintf(L"RmGetList returned %d infos (%d needed)\n",
nProcInfo, nProcInfoNeeded);
for (i = 0; i < nProcInfo; i++) {
wprintf(L"%d.ApplicationType = %d\n", i,
rgpi[i].ApplicationType);
wprintf(L"%d.strAppName = %ls\n", i,
rgpi[i].strAppName);
wprintf(L"%d.Process.dwProcessId = %d\n", i,
rgpi[i].Process.dwProcessId);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,
FALSE, rgpi[i].Process.dwProcessId);
if (hProcess) {
FILETIME ftCreate, ftExit, ftKernel, ftUser;
if (GetProcessTimes(hProcess, &ftCreate, &ftExit,
&ftKernel, &ftUser) &&
CompareFileTime(&rgpi[i].Process.ProcessStartTime,
&ftCreate) == 0) {
WCHAR sz[MAX_PATH];
DWORD cch = MAX_PATH;
if (QueryFullProcessImageNameW(hProcess, 0, sz, &cch) &&
cch <= MAX_PATH) {
wprintf(L" = %ls\n", sz);
}
}
CloseHandle(hProcess);
}
}
}
}
RmEndSession(dwSession);
}
return 0;
}
推荐阅读
- edge-detection - 有没有什么好的方法可以使用 pycoral api 重写 edgetpu 旧代码?
- flutter - NoSuchMethodError:类'列表
' 没有具有匹配参数的实例方法 'cast' - export - Outfiile 忽略 -Erroraction ?尝试/捕捉不起作用..?
- django - Django admin如何按模型属性排序?
- javascript - 使用 for 循环代替过滤器
- excel - 在声明两个单独的工作簿时遇到问题 - 当我这样做时出现类型不匹配错误
- java - 无法销毁或停止 OnClick RecycleView 侦听器
- flutter - 只是音频颤振包支持 accADTs 文件格式,因为它在购买的 android 和 iOS 中都支持
- r - 如何在 r 中对同年而不是同月进行分组
- ios - 如何理解 objc 中的 ARC