あなたは間違っているので、それはfalseを返すため、GetLastErrorはERROR_INVALID_HANDLE(6)を返します。
HWND WINAPI GetForegroundWindow(void);
は、現在のフォアグラウンドウィンドウを返し、型HWNDのそれのウィンドウハンドルを返します。
あなたはあなたのアプリケーションのファイル名を取得するために、これを行うことができます。加えて
TCHAR szName[MAX_PATH];
GetModuleBaseName(GetCurrentProcess(), GetModuleHandle(NULL), szName, MAX_PATH);
を、また、あなたのアプリケーションのフルパスを取得するために、GetModuleFileNameはやGetMappedFileNameを使用することができます編集
:は彼が望んでいますあまりにも何かをする。別のプロセスのパスを取得するには、そのプロセスをプロセスIDでオープンする必要があります。たとえば、9912がChromeのプロセスIDであれば、次のコードを実行してパスを取得できます
HANDLE process = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, 9912);
if (process)
{
char file_path[MAX_PATH];
if (::GetModuleFileNameEx(process, nullptr, file_path, MAX_PATH))
{
std::cout << file_path << std::endl;
}
else
{
std::cout << "Error retrieving path" << std::endl;
}
::CloseHandle(process);
}
現在のプロセスのパスを取得しようとしていますか?はいの場合は間違っています。 – Asesh
GetModuleBaseName()にはプロセスハンドルが必要です。 GetWindowProcessThreadId()を使用して、ウィンドウハンドルをプロセスIDにマップします。次にOpenProcess()を呼び出してプロセスハンドルを取得します。あなたはそのような周りにスヌープするのに十分な権利を持っていなければなりません、標高が必要かもしれません。 –
ありがとうございました。はい、現在のプロセスのパスを取得しようとしています。あなたが言ったその方法を試しました。しかし、GetCurrentProcess関数はコンソールシステムで他のアプリケーションを取得できないと思います。例。主な機能を実行して、私はクロムのような他のアプリケーションを実行しました。この場合、GetCurrentProcessはchromeを取得できません。この問題を解決するためのアイデアはありますか?私に教えてください。 – comingkim