如题!
GetModuleFileName
VB声明
Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
说明
获取一个已装载模板的完整路径名称
返回值
Long,如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。会设置GetLastError
参数表
参数 类型及说明
hModule Long,一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄
lpFileName String,指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的
nSize Long,装载到缓冲区lpFileName的最大字符数量
注解
在Windows 95下,函数会核查应用程序的内部版本号是否为4.0或更大的一个数字。如果是,就返回一个长文件名,否则返回短文件名
我不知道你对实例句柄和窗口句柄是否明白,如果明白就好了,
这么写
dim ProcessName as Straing *255
GetModuleFileName Hinstance,ProcessName,255
MsgBox ProcessName
就这么简单。
Delphi这么写
var MyName:pchar;
GetMem(MyName,255);
GetModuleFileName(HINSTANCE,MyName,255);
self.caption:=MyName;
Shell返回的并不是程序的句柄!!!请看MSDN
用ShellExecuteEx
执行完后会在你传进出的结构中写入一个HANDLE hProcess;
typedef struct _SHELLEXECUTEINFO{
DWORD cbSize;
ULONG fMask;
HWND hwnd;
LPCTSTR lpVerb;
LPCTSTR lpFile;
LPCTSTR lpParameters;
LPCTSTR lpDirectory;
int nShow;
HINSTANCE hInstApp;
// Optional members
LPVOID lpIDList;
LPCTSTR lpClass;
HKEY hkeyClass;
DWORD dwHotKey;
union {
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;