获取与用户相关的流程/窗口的列表
Obtaining a list of user-relevant processes/windows
因此,我正在构建一个程序,该程序根据是否正在运行用户定义的进程有条件地复制某些文件。现在,由于用户正在选择该过程,因此我想过滤他们可以选择的过程,以将其选择为他们真正关心的内容。从本质上讲,我只想要可以贴上替代的过程/窗口。我找到了几种获取跑步过程的方法,但是我没有太多运气来弄清楚如何将它们过滤到我想要的东西。现在,这是我用来获取过程名称&的代码。窗口名称,但我觉得可能有更好的方法:
(仅供参考,我正在为此使用QT,所以这就是QString和QStringLists来自的地方(
HWND hwnd_current = GetWindow(GetDesktopWindow(), GW_CHILD);
QStringList process_list;
do {
wchar_t str_window_name[MAX_PATH];
DWORD pid;
DWORD exStyles = (DWORD)GetWindowLongPtr(hwnd_current, GWL_EXSTYLE);
DWORD styles = (DWORD)GetWindowLongPtr(hwnd_current, GWL_STYLE);
if(!((exStyles & WS_EX_TOOLWINDOW) == 0 && (styles & WS_CHILD) == 0)){
continue;
}
if(!GetWindowText(hwnd_current, str_window_name, MAX_PATH)){
continue;
}
GetWindowThreadProcessId(hwnd_current, &pid);
if(pid == GetCurrentProcessId()){
continue;
}
wchar_t fileName[MAX_PATH];
LPWSTR file_name;
HANDLE hProcess;
hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ, FALSE, pid);
if(hProcess){
DWORD dwSize = MAX_PATH;
QueryFullProcessImageName(hProcess, 0, fileName, &dwSize);
file_name = PathFindFileName(fileName);
}
CloseHandle(hProcess);
QString boxString = QString("[");
#ifdef UNICODE
QString q_file_name = QString::fromStdWString(file_name);
QString q_str_window_name = QString::fromStdWString(str_window_name);
#else
QString q_file_name = QString::fromStdString(file_name);
QString q_str_window_name = QString::fromStdString(str_window_name);
#endif
boxString.append(q_file_name);
boxString.append("] ");
boxString.append(q_str_window_name);
if(!q_file_name.isEmpty() && !q_str_window_name.isEmpty() && !pNameList.contains(boxString) && !process_list.contains(q_file_name)){
if(!q_str_window_name.endsWith("MSCTFIME UI") && !q_str_window_name.endsWith("Default IME")){
process_list.append(q_file_name);
pNameList.append(boxString);
}
}
} while (hwnd_current = GetNextWindow(hwnd_current, GW_HWNDNEXT));
任何建议将不胜感激!谢谢!
这与任务栏过滤窗口的方式非常相似。
您似乎很近,但是您应该检查窗口是否可见,WS_EX_APPWINDOW
允许将工具窗口视为普通窗口。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 问:如何使用C++中的按钮从窗口打开窗口
- 读取访问违规当前为0xCDCDCDCD,链接列表窗口
- 获取与用户相关的流程/窗口的列表
- 如何在列表框窗口进程中捕获VK_ESCAPE
- 在QT中获取窗口WID的列表
- 在对话框窗口中使用列表控件
- 使用 EnumWindows 填充窗口对象列表
- 我需要在桌面上显示或隐藏所有窗口的列表
- 如何获取绑定到我正在运行的控制台窗口的进程列表,这些进程也可以在 Windows 2000 中工作?
- 如何在Visual c++中从窗口中获取控件列表
- 如何知道EnumWindows何时完成其窗口列表
- 如何从打开的窗口列表中检索QWidget