标签: getmodulefilename

如何正确使用GetModuleFileName?

以下代码:

#include <iostream>
#include <Windows.h>

using namespace std;

int main ()
{   LPWSTR buffer; //or wchar_t * buffer;
    GetModuleFileName(NULL, buffer, MAX_PATH) ;
    cout<<buffer;
    cin.get();
    cin.get();

}
Run Code Online (Sandbox Code Playgroud)

应该显示程序执行的完整路径.但是在VS 2012中我得到了错误:

使用未初始化的局部变量'缓冲区'

代码有什么问题?

c++ getmodulefilename

19
推荐指数
2
解决办法
4万
查看次数

如何计算GetModuleFileName的完整缓冲区大小?

GetModuleFileName()需要一个缓冲器和缓冲器作为输入的大小; 但是它的返回值只能告诉我们复制了多少个字符,以及大小是否足够(ERROR_INSUFFICIENT_BUFFER).

如何确定保存整个文件名的实际所需缓冲区大小GetModuleFileName()

大多数人使用,MAX_PATH但我记得路径可以超过(默认定义为260)...

(使用零作为缓冲区大小的技巧对这个API不起作用 - 我之前已经尝试过)

windows winapi getmodulefilename

12
推荐指数
2
解决办法
6068
查看次数

如何从dll内部查找dll的父exe?

我需要根据已加载的进程在dll中做一些事情。因此,相对于Windows编程而言,我还是比较陌生的,我需要帮助弄清楚如何找到加载当前dll的exe。到目前为止,我一直在对exe文件名进行硬编码,这是最愚蠢的事情:D

1)有人建议使用GetModuleFileName()功能。但这似乎使我的应用程序崩溃了(我使用0作为模块句柄)。我什么也没做。我使用以下语法

GetModuleFileName(0,&fileName,MAX_PATH)

编辑:我从这里了解到,我无法通过此调用获取.exe名称,因为它仅返回dll名称:(

2)在DllMain中这样做是个好主意吗?我知道DllMain并不是处理复杂事物的地方。我也了解与加载程序锁相关的问题。我所需要的只是查找父进程的名称。

感谢您的宝贵时间!

添加:我尝试在获取父进程ID后使用GetProcessImageFileName。我收到访问冲突错误。当我尝试调试时,我注意到openProcess调用将我的结果参数(图像文件路径-LPTSTR)留为错误的指针。
GetProcessImageFileName调用返回错误代码87-INVALID PARAMETER。
但是当前的进程ID是有效ID。
这是代码

LPTSTR fileName={0};  
HANDLE hP=OpenProcess(PROCESS_QUERY_INFORMATION ,FALSE, processes[i]) ;
GetProcessImageFileName(hP,fileName,(DWORD)MAX_PATH+1);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??

谢谢

编辑要点:

我发现我正在尝试在空闲进程上使用openprocess。(ie)我忘记了我的父进程可能因为我同步而可能正在等待我。因此,现在我得到了一个坏消息,即我无法使用OpenProcess打开一个空闲进程。我还能如何查看空闲进程的对象?(我肯定知道它是空闲的,因为我无法在快照中找到它。我不得不使用enumerateprocess来找到它的ID;但是我确实使用快照中的普通进程枚举来首先找到父进程ID)

c++ exe parent getmodulefilename

6
推荐指数
1
解决办法
4515
查看次数

鸡肉计划是否相当于Perl的0美元?

如何在Chicken Scheme中可靠地获取脚本名称?

似乎-ss吃掉了脚本名称,所以除非我使用点斜杠来运行我的脚本,否则它不可见.

scriptedmain.scm:

#!/usr/bin/env csi -q

(display (command-line-arguments))
(display "\n")
(exit)
Run Code Online (Sandbox Code Playgroud)

跟踪:

$ ./scriptedmain.scm 
(-q ./scriptedmain.scm)
wonko:Desktop andrew$ csi -ss scriptedmain.scm 
()
Run Code Online (Sandbox Code Playgroud)

scheme getmodulefilename command-line-arguments chicken-scheme

5
推荐指数
1
解决办法
1181
查看次数

比较两个具有相同值的TCHAR会导致错误

我正在尝试检查我的应用程序路径,如果它不是指定的路径,则移动它.我觉得我的代码很稳定,但它无法正常工作.

TCHAR pCheck[MAX_PATH];
TCHAR xPath[MAX_PATH];

GetModuleFileName(NULL,xPath,MAX_PATH);

if(SHGetSpecialFolderPath(HWND_DESKTOP, pCheck, CSIDL_DESKTOP, FALSE)){
    wcscat(pCheck,L"\\NewFile.exe");
    MessageBox(NULL,pCheck,NULL,NULL);
    MessageBox(NULL,xPath,NULL,NULL);
    if(pCheck!=xPath){  
        CopyFile(xPath,pCheck,0);
        ShellExecute(0,L"open",pCheck,NULL,NULL,SW_SHOW);
        return 0;
    }else{
        MessageBox(NULL,L"New Location",NULL,NULL); 
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

即使文件在新路径中,它仍然会产生pCheck!= xPath

我从来没有得到"新位置"消息框.当显示前两个消息框时,路径是相等的...

c++ compare tchar getmodulefilename

5
推荐指数
1
解决办法
1万
查看次数