问题标签 [getmodulefilename]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
18359 浏览

c# - 如果我只有一个窗口句柄 (hWnd),我如何 GetModuleFileName()?

我正在尝试获取位于我的 C# 2.0 应用程序之外的窗口的可执行文件的名称。我的应用程序当前使用来自“user32.dll”的 GetForegroundWindow() 调用获取窗口句柄 (hWnd)。

从我能够做的挖掘来看,我想我想使用 GetModuleFileNameEx() 函数(来自 PSAPI)来获取名称,但 GetModuleFileNameEx() 需要一个进程的句柄,而不是一个窗口。

是否可以从窗口句柄获取进程句柄?(我需要先获取窗口的线程句柄吗?)

编辑了第一句话,让我更清楚我想要做什么。

更新!这是我发现对我有用的 C# 代码。唯一需要注意的是,它有时会返回驱动器号为“?”的文件/路径。而不是实际的驱动器号(如“C”)。——还没弄清楚为什么。

0 投票
8 回答
7602 浏览

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

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

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

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

(使用零作为缓冲区大小的技巧不适用于此 API - 我之前已经尝试过)

0 投票
3 回答
1242 浏览

scheme - Chicken Scheme 是否有相当于 Perl 的 $0 的功能?

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

似乎 -ss 占用了脚本名称,因此除非我使用点斜杠来运行我的脚本,否则它是不可见的。

scriptedmain.scm:

痕迹:

0 投票
1 回答
283 浏览

clojure - 如果 __name__=="__main__",Clojure 是否与 Python 等效?

可能重复: Python 习语“if name == ' main
'”的 clojure 等价物是什么?

我会使用-main,但它只在编译模式下运行,而不是解释模式。

我会使用(if (.isAbsolute (java.io.File. *file*)) (main *command-line-args*)), 但这会在任何(load)脚本中运行。

0 投票
2 回答
3682 浏览

c++ - GetModuleFileNameA 返回奇怪的结果

我正在尝试获取在另一个进程中加载​​的模块的名称GetModuleFileNameA
我已经使用 dbgHelp 加载了一个符号并获得了它的模块基地址,但是发生了 2 件奇怪的事情:
1. 有时GetModuleFileNameA返回系统错误代码 5:访问被拒绝。
2.它返回错误的模块名称。对于我知道在模块 A 中的函数,我得到模块 B 的名称...:/

有人可以帮助我吗?
谢谢:)

0 投票
1 回答
954 浏览

c++ - GetModuleFileName 防病毒误检???获取当前进程PATH

您好,我正在尝试从当前进程中检索路径...这是我的第一个代码:

但是当我试图运行它时,Avira antivir 将其检测为:TR/Dropper.Gen :D 我不知道为什么 :D 这是另一个代码:

在那个版本中,TR/Dropper.Gen 问题已修复,但是......我不想使用 WinMain () 所以没有 argv[0] 谁能知道另一种方法或函数来检索路径?不与杀毒软件冲突?

0 投票
3 回答
6008 浏览

c++ - 如何从 dll 中找到 dll 的父 exe?

我需要根据加载它的进程在 dll 中做一些事情。因此,对于 Windows 编程来说相对较新,我需要帮助找出如何找到加载当前 dll 的 exe。到目前为止,我一直在对 exe 文件名进行硬编码,这是最愚蠢的事情:D

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

GetModuleFileName(0,&fileName,MAX_PATH)

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

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

我很感激你的时间!

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

我究竟做错了什么??

谢谢

编辑重要:

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

0 投票
2 回答
925 浏览

winapi - getmodulefilename 可能会阻塞什么?

我们有一个多线程应用程序。其中一个工作线程调用 GetModuleFilename 进行日志记录,我们已经看到了一个死锁,工作线程在调用 GetModuleFilename 之前持有一个锁,这将永远阻塞。

我们可以并且已经从这个锁中删除了 GetModuleFilename 调用,但仍然对死锁是如何发生的非常感兴趣。

在线阅读:http: //blogs.msdn.com/b/oldnewthing/archive/2004/01/28/63880.aspx

似乎 GetModuleFilename 将获得 loaderlock,这似乎是一个很好的死锁候选者。

但通常 loaderlock 中的线程不会执行我们自己的任何代码,除了上面链接的 dllmain 中。

可能会在 loaderlock 和另一个正在创建或销毁的工作线程上调用 dll_thread_attach 或 detach,但我看不出有任何方法会尝试获取我们正在使用的锁。

主线程也有可能尝试获取 GetModuleFilename 线程所持有的锁,而第三个线程正在持有 loaderlock 并在主线程上执行 sendmessage 或类似的阻塞?在这里,我也没有发现会发生这种情况的任何情况。

我怀疑的其他线程之一是使用 com 对象的线程。线程在开始时调用coinitialize,因此应该在单线程单元中。这里有任何与 loaderlock 交互的可能性吗?

无论如何,我们无法确定这种死锁发生的确切方式。因此,我希望获得一些想法,或者在其他情况下获得有关 loaderlock 的更多信息,以及是否有任何其他场景在可能阻塞的 loaderlock 中执行代码。

谢谢。

0 投票
2 回答
16868 浏览

c++ - 比较具有相同值的两个 TCHAR 的结果为 false

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

即使文件位于新路径中,它仍然会导致 pCheck != xPath

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

0 投票
2 回答
2764 浏览

c - 如何在 Windows 上使用 C 语言获取 AppPath 到可执行文件的目录(使用 MinGW gcc )

我的可执行文件在这个地方 --> D:\Examples\C_Pro\newApp.exe 在那个“C_Pro”文件夹中也包含几个文件(file1.txt、file2.txt、file44.exe、newApp.c)

在我的 newApp.c 文件中,我包含了一个 ShellExecute 函数来执行同一文件夹中的“file44.exe”文件,如下所示 --> ShellExecute(NULL,"open","D:\Examples\C_Pro\file44.exe",NULL ,NULL,1)

这样一切正常..

我说的是 VB 中的 AppPath 之类的东西

但情况是我想在不同的电脑上运行这个 newApp.exe 所以我想用另一台电脑中包含“newApp.exe”文件的任何路径替换“D:\Examples\C_Pro\”。(比如 C :\软件\ )

我使用 GetModuleFileName 函数获取路径,但它包含 newApp.exe 部分,我只想要新目录 PathRemoveFileSpec 函数不起作用的点。

以及 GetModuleFileName 的返回路径,如 --> D:\Examples\C_Pro\newApp.exe 但是当我们将一些路径放入 ShellEcxecute 时,需要像这样的双字节(空格序列) --> D:\Examples\C_Pro\

我怎样才能摆脱这个问题。

实际的代码片段是这样的......

但我想这样做。(这是一个虚拟函数,这里的“some_Funtion”表示虚拟函数,用于解释目的。