GetProcessId undeclared identifier,我去啊

selooloo 2012-12-08 06:22:35
想从handle获取hwnd,貌似要先获取程序ID,用了GetProcessId结果来一句未定义。从网上看了N种方法都不行,求各位帮忙,或者有别的方法能获取hwnd也可以,先谢谢了,编译器是VC6.0,XP系统
...全文
377 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
selooloo 2012-12-08
  • 打赏
  • 举报
回复
引用 11 楼 oyljerry 的回复:
引用 10 楼 selooloo 的回复:引用 8 楼 stjay 的回复:引用 6 楼 selooloo 的回复:引用 3 楼 stjay 的回复:也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID f……
这个还真不太懂,先谢谢,刚捣鼓了下SDK,GetProcessId可以用了
oyljerry 2012-12-08
  • 打赏
  • 举报
回复
引用 10 楼 selooloo 的回复:
引用 8 楼 stjay 的回复:引用 6 楼 selooloo 的回复:引用 3 楼 stjay 的回复:也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID from Process Handle h……
可以获取kernel32.dll导出了对应的函数,然后来调用。这样就不依赖lib库文件了
selooloo 2012-12-08
  • 打赏
  • 举报
回复
引用 8 楼 stjay 的回复:
引用 6 楼 selooloo 的回复:引用 3 楼 stjay 的回复:也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID from Process Handle http://www.codepro……
是的,急于求成了,我再试试,多谢
selooloo 2012-12-08
  • 打赏
  • 举报
回复
引用 7 楼 tiger9991 的回复:
不是VC6,0垃圾,关键是你SDK没更新上去。 VC6.0也是有优势的,速度快啊。可以开10几个,机器都不卡 高版本的VS开几个就卡死你了。VC6.0特别适合学习和实验。 做项目还是高版本VS
谢谢,刚看了下VS2008,4个多G,没敢下
stjay 2012-12-08
  • 打赏
  • 举报
回复
引用 6 楼 selooloo 的回复:
引用 3 楼 stjay 的回复:也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID from Process Handle http://www.codeproject.com/Articles/21……
你没认真看codeproject那篇文章和代码
#if !defined NTSTATUS
typedef LONG NTSTATUS;
#endif

#if !defined PROCESSINFOCLASS
typedef LONG PROCESSINFOCLASS;
#endif

#if !defined PPEB
typedef struct _PEB *PPEB;
#endif

#if !defined PROCESS_BASIC_INFORMATION
typedef struct _PROCESS_BASIC_INFORMATION {
    PVOID Reserved1;
    PPEB PebBaseAddress;
    PVOID Reserved2[2];
    ULONG_PTR UniqueProcessId;
    PVOID Reserved3;
} PROCESS_BASIC_INFORMATION;
#endif;

typedef NTSTATUS (WINAPI * PFN_ZWQUERYINFORMATIONPROCESS)(HANDLE, PROCESSINFOCLASS,
    PVOID, ULONG, PULONG);


DWORD GetProcessIDbyProcessHandleZw(HANDLE hProcess)
{
    HINSTANCE hNtDll = LoadLibraryW(L"ntdll.dll");
    if (hNtDll == NULL)    return 0xffffffff;
    PFN_ZWQUERYINFORMATIONPROCESS fnProcInfo = PFN_ZWQUERYINFORMATIONPROCESS(
        ::GetProcAddress(hNtDll, "ZwQueryInformationProcess"));
    if (fnProcInfo == NULL)
    {
        CloseHandle(hNtDll);
        return 0xffffffff;
    }
    PROCESS_BASIC_INFORMATION pbi;
    ZeroMemory(&pbi, sizeof(PROCESS_BASIC_INFORMATION));
    if (fnProcInfo(hProcess, 0, &pbi, sizeof(PROCESS_BASIC_INFORMATION), NULL) == 0)
    {
        CloseHandle(hNtDll);
        return pbi.UniqueProcessId;
    }
    else
    {
        CloseHandle(hNtDll);
        return 0xffffffff;
    }
}
看不见的裂痕 2012-12-08
  • 打赏
  • 举报
回复
不是VC6,0垃圾,关键是你SDK没更新上去。 VC6.0也是有优势的,速度快啊。可以开10几个,机器都不卡 高版本的VS开几个就卡死你了。VC6.0特别适合学习和实验。 做项目还是高版本VS
selooloo 2012-12-08
  • 打赏
  • 举报
回复
引用 3 楼 stjay 的回复:
也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID from Process Handle http://www.codeproject.com/Articles/21926/Getting-Proce……
VC6.0果然很垃圾啊,PFN_ZWQUERYINFORMATIONPROCESS PROCESS_BASIC_INFORMATION各种undeclared identifier
selooloo 2012-12-08
  • 打赏
  • 举报
回复
引用 3 楼 stjay 的回复:
也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID from Process Handle http://www.codeproject.com/Articles/21926/Getting-Proce……
谢谢,我试试,好多不认识的函数,头大。。
selooloo 2012-12-08
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
GetCurrentProcessId
不是当前的进程
stjay 2012-12-08
  • 打赏
  • 举报
回复
也可以动态调用 GetProcAddress(LoadLibrary(_T("kernel32.dll")), "GetProcessId"); 参考codeproject这里Getting Process ID from Process Handle http://www.codeproject.com/Articles/21926/Getting-Process-ID-from-Process-Handle ZwQueryInformationProcess的方法较为简单点
DWORD GetProcessIDbyProcessHandleZw(HANDLE hProcess)
{
    HINSTANCE hNtDll = LoadLibraryW(L"ntdll.dll");
    if (hNtDll == NULL)    return 0xffffffff;
    PFN_ZWQUERYINFORMATIONPROCESS fnProcInfo = PFN_ZWQUERYINFORMATIONPROCESS(
        ::GetProcAddress(hNtDll, "ZwQueryInformationProcess"));
    if (fnProcInfo == NULL)
    {
        CloseHandle(hNtDll);
        return 0xffffffff;
    }
    PROCESS_BASIC_INFORMATION pbi;
    ZeroMemory(&pbi, sizeof(PROCESS_BASIC_INFORMATION));
    if (fnProcInfo(hProcess, 0, &pbi, sizeof(PROCESS_BASIC_INFORMATION), NULL) == 0)
    {
        CloseHandle(hNtDll);
        return pbi.UniqueProcessId;
    }
    else
    {
        CloseHandle(hNtDll);
        return 0xffffffff;
    }
}
后面的就是 EnumWindows GetWindowThreadProcessId 枚举所有窗口,比较其ProcessId
schlafenhamster 2012-12-08
  • 打赏
  • 举报
回复
GetCurrentProcessId

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧