あなたの機能におそらく名前main
が使用されています。
他にも多くの機能がありません。 GetModuleFileNameEx
のライブラリも追加する必要があります。
#include <QCoreApplication>
#include <QString>
#include <QStringList>
#include <iostream>
#include <windows.h>
#include <TlHelp32.h>
#include <psapi.h>
QStringList foo()
{
QStringList list;
HANDLE hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPMODULE, 0);
if (hndl)
{
PROCESSENTRY32 process;
memset(&process, 0, sizeof(PROCESSENTRY32));
process.dwSize = sizeof(PROCESSENTRY32);
Process32First(hndl, &process);
do
{
QString qpath;
wchar_t path[MAX_PATH] = L"";
HANDLE hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION, FALSE, process.th32ProcessID);
if (hProcess)
{
GetModuleFileNameEx(hProcess, NULL, path, MAX_PATH);
qpath = QString::fromUtf16((const ushort*)path);
CloseHandle(hProcess);
}
else
{
qpath = QString::fromUtf16((const ushort*)process.szExeFile);
}
list.append(qpath);
} while (Process32Next(hndl, &process));
CloseHandle(hndl);
}
return list;
}
用法:
QStringList list = foo();
for(int i = 0; i < list.count(); i++)
{
//print list[i]...
//or
std::wcout << (const wchar_t*)list[i].utf16() << std::endl;
}
がいっぱい取得するために管理者モードでプログラムを実行しているMinGWの
win32: LIBS += -lpsapi
例を使用した場合は、Windowsのライブラリ "psapi.lib
" を必要とするか、 "libpsapi.a
"経路:
#include <iostream>
#include <windows.h>
#include <winbase.h>
#include <TlHelp32.h>
#include <psapi.h>
#include <Shlobj.h>
void test()
{
if (!IsUserAnAdmin())
std::wcout << "Run this in admin mode!\n";
void* tokenHandle;
TOKEN_PRIVILEGES privilegeToken;
LookupPrivilegeValue(0, SE_DEBUG_NAME, &privilegeToken.Privileges[0].Luid);
privilegeToken.PrivilegeCount = 1;
privilegeToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &tokenHandle);
AdjustTokenPrivileges(tokenHandle, 0, &privilegeToken, sizeof(TOKEN_PRIVILEGES), 0, 0);
CloseHandle(tokenHandle);
HANDLE hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPMODULE, 0);
if (hndl)
{
PROCESSENTRY32 process;
memset(&process, 0, sizeof(PROCESSENTRY32));
process.dwSize = sizeof(PROCESSENTRY32);
Process32First(hndl, &process);
do
{
wchar_t path[MAX_PATH] = L"";
wcscpy_s(path, MAX_PATH, process.szExeFile);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, process.th32ProcessID);
if (hProcess)
{
GetModuleFileNameExW(hProcess, 0, path, MAX_PATH);
CloseHandle(hProcess);
}
else
{
//in case it failed in WinXP
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, process.th32ProcessID);
if (hProcess)
{
GetModuleFileNameExW(hProcess, 0, path, MAX_PATH);
CloseHandle(hProcess);
}
}
std::wcout << path << std::endl;
} while (Process32Next(hndl, &process));
CloseHandle(hndl);
}
}
[定義されていない参照/未解決の外部シンボルエラーとは何ですか?どうすれば修正できますか?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部記号エラーと方法i-fix) – drescherjm
@drescherjmわからないのですか?問題を解決するために私に詳細な答えを教えてもらえますか? –