解决方案 »
- MDI如何最大化子窗口(不是初始化)
- 有没有办法让菜刀无法弹出子菜单?
- 循环算法问题
- 如何计算屏幕大小?
- GetOpenFileName的使用????不懂请给个例子
- 在线程中调用解析XML的动态库为何会丢失内存(该动态库利用msxml4.dll提供的DOM函数解析XML)
- ShellExecute,ShellExecuteEx,WinExec,CreateProcess这四个函数有什么联系和区别呢?
- GetFileAttributesEx 读取文件属性问题
- 怎样批量获取文件名
- VC中注释中文变成乱码,该如何解决?
- x86程序如何注入一个64位DLL到一个64位远程进程中?
- 列表控件关联变量提示未定义?
TCHAR szFilePath[MAX_PATH + 1]={0};
GetModuleFileName(NULL, szFilePath, MAX_PATH);
我这里测试并没有出现你说的问题
A.exe运行了,这时GetModuleFileName获取的是**\A.exe,但是文件名被改变(A.exe仍处于运行中),怎么获取改变后的文件名?
你要的是不是窗口标题?
#include "stdafx.h"
#include <Windows.h>
#include <Psapi.h>
#include <stdio.h>#pragma comment(lib, "Psapi.lib")void OutputSelfpath()
{
char szFile[MAX_PATH] = {0};
GetModuleFileName(NULL, szFile, MAX_PATH);
printf("GetModuleFileName:\n\r%s\n\n", szFile); memset(szFile, 0, MAX_PATH); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
if (!hProcess)
{
printf("OpenProcess failed!\n");
}
else
{
DWORD dwRet = GetProcessImageFileName(hProcess, szFile, MAX_PATH);
if (dwRet)
{
printf("GetProcessImageFileName:\n\r%s\n\n", szFile);
}
else
{
printf("GetProcessImageFileName failed!\n");
} DWORD dwSize = MAX_PATH;
if (QueryFullProcessImageName(hProcess, 0, szFile, &dwSize))
{
printf("QueryFullProcessImageName:\n\r%s\n\n", szFile);
}
else
{
printf("QueryFullProcessImageName failed\n", szFile);
}
}
}int main()
{
const char* pszFile = "ConsoleTest.exe";
const char* pszNewFile = "ConsoleTest_bak.exe";
remove(pszNewFile); OutputSelfpath();
int nRet = rename(pszFile, pszNewFile); if (0 != nRet)
{
printf("rename file failed!\n");
}
else
{
OutputSelfpath();
} system("pause");
return 0;
}输出:
参见http://www.mazhuang.org/2014/10/09/path-after-rename/
嗯……可能很多人想当然了吧。不只是EXE运行中一般可以改名,DLL在被加载后一般也是可以改名的。