
GetCurrentProcessId
参数 hWnd, 整数型‘被查找窗口的句柄
参数 lpdwProcessId, 整数型 ‘存放地址(变量地址)
A、去下个XXdll,下好后打开系统盘,找到windows文件夹,打开后找到system32打开,把XXdlll放进去。这个DLL上百度一下就有得下的了。
B、打开腾讯电脑管家的电脑诊所之后,搜缺失的dll文件,会自动出来,点立即修复。重启电脑后就可以了。
HANDLE GetProcessHandle(int nID)
{
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);
}
HANDLE GetProcessHandle(LPCTSTR pName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)) {
if (!_tcscmp(peszExeFile, pName)) {
CloseHandle(hSnapshot);
return GetProcessHandle(peth32ProcessID);
}
}
return NULL;
}
PS你的代码不够精炼,所以重新写了一个。你看下这个能用不,不能用再帮你找找你的错误。主要你的代码太长了,所以没细看,你的Pn酱紫初始化啊,还有既然是DLL的,那就应该分别做LPCWSTR和LPCSTR两个版本,看你在LPCSTR版本里还用Process32FirstW,是不是有些混乱了?Pn被填充了UNICODE字符集再去和LPCSTR做比较,怎么能得出正确结果呢? 还有那个那个连COM的东西也出来了,完全被雷倒了,休克中
===================================
贴上来的代码都已很负责任的运行通过,不会有错你再检查看看是由于什么引起编译错误可以把出错信息贴上来然后帮你分析看看
另外,workingroy说要提权,DLL是不是应该自作主张提权有待商榷,提权完全可以由客户程序负责决定可以在调用函数前提权,函数调用完恢复原来的权限另外就是提权 *** 作也有消耗,对于系统管理员身份运行(通常我们都是系统管理员身份登陆WINDOWS),不需要提权当然,有高手指出,VISTA和7对系统管理员的权限已经有了修改,既是是系统管理员,权限也受到了某些限制这个我没研究过持保留意见当然楼主的函数应该在提供一个参数,用来传递要打开的进程句柄的权限一般不需要PROCESS_ALL_ACCESS的
线程是进程内部的一个执行单元,一个进程可以有多个线程,但是这些线程仅存在于该进程中,纯种是在它所属的进程地址空间里执行的,并在进程的地址空间对数据进行 *** 作。
输入下面的语句:
Requirements
Client
Requires Windows Vista
Server
Requires Windows Server 2008 or Windows Server 2003
Header
Declared in Winbaseh; include Windowsh
Library
Use Kernel32lib
DLL
Requires Kernel32dll
你可以用 [DllImport("user32dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(
string lpClassName,
string lpWindowName
);
来获得窗体句柄,然后直接用C#的process类获得所有进程的句柄和ID然后比对就可以了
原型:
int WINAPI icePub_getProcessInfo(char strInfoList ,int maxLen)
输入:maxLen strInfoList最大长度
输出:strInfoList 进程基本信息,name|pid|path,一行一条信息
int recordCounts;
char buff[102430+1];
typedef int (WINAPI ICEPUB_GETPROCESSINFO)(char strInfoList ,int maxLen);
ICEPUB_GETPROCESSINFO icePub_getProcessInfo = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDlldll");
if(hDLLDrv)
{
icePub_getProcessInfo = (ICEPUB_GETPROCESSINFO )GetProcAddress(hDLLDrv, "icePub_getProcessInfo");
}
if(icePub_getProcessInfo)
recordCounts=icePub_getProcessInfo(buff,102430);
if(hDLLDrv)
FreeLibrary(hDLLDrv);
AfxMessageBox(buff);
以上就是关于易语言如何取自身进程ID 和 句柄全部的内容,包括:易语言如何取自身进程ID 和 句柄、已获得进程PID,如何获取该进程某dll的全路径、高分求解。VC++ 通过进程名或进程ID获取进程句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)