MFC可以用 GetSafeHwnd函数但是SDK呢事因是:我向某个进程注入了DLL 这个DLL是用SDK写的我想判断下 我注入的进程对不对如果注入不对就卸载掉如果对的话 就执行代码我已经用任务管理器获取了目标的窗口标题了我想在 注入进程的DLL里面用窗口标题判断下 是不是注入了目标进程不知道怎么在DLL里获取窗口标题呢求解...

解决方案 »

  1.   

    精简点的是:怎么在DLL里获取当前窗口的句柄
      

  2.   

    DLL代码中在执行前加入判断用FindWindow()找窗口?
      

  3.   

    HWND hWnd = FindWindow ( NULL, L"XX" ) ;
    if ( hWnd )
    {
    PostMessage ( hWnd, NOTIFY_MESSAGE, wParam, lParam )  ;
    }DLL中也可以就这样写啊
      

  4.   

    NOTIFY_MESSAGE 这条Mesg是什么来的呢?
      

  5.   

    你应该一开始就用FindWindow()找到目标窗口,然后用GetWindowThreadProcessId()找到目标窗口的进程,然后再注入就不会错了。
      

  6.   

    不对啊 那个没办法的 它想系统每一个进程注入 要不 我也不怎么这么麻烦啦这是判定函数... 不过注入了它也没MessageBoxBOOL InItProcInfo()
    {
    DWORD PID =GetCurrentProcessId();
    HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcess==INVALID_HANDLE_VALUE)
    {
    MessageBox(NULL,"错误",NULL,MB_OK);
    return FALSE;
    }

    char but[100];
    char buffer[1024];
    memset(buffer ,0,1024);

    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(pe);
    BOOL process=Process32First(hProcess,&pe);
    while(process)
    {

    wsprintf(but,"找到了!进程名:%s-----PID:%d\r\n",pe.szExeFile,pe.th32ProcessID); 
    if (pe.th32ProcessID ==PID && pe.szExeFile == "test.exe")
    {


    MessageBox(NULL,but,"找到了",NULL);

    return TRUE;

    }

    memset(but,0x00,100);
    process=Process32Next(hProcess,&pe);

    }
    CloseHandle(hProcess);
    return FALSE;
    }
      

  7.   

    找到目标进程后,再用CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0); 
    枚举进程的线程,然后再用EnumThreadWindows()枚举线程的窗口。
      

  8.   


    my god 发现了个问题  先看我的函数代码:DWORD  GetProcessPID(char *szProcName)
    {
    HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcess==INVALID_HANDLE_VALUE)
    {

    return FALSE;

    }
    DWORD dwProPID;
    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(pe);
    BOOL process=Process32First(hProcess,&pe);
    while (process)
    {
    if(strcmp(pe.szExeFile,szProcName)==0)
    {
    MessageBox(0,"找到了",0,0);
    dwProPID = pe.th32ProcessID;
    return dwProPID;



    }
    process=Process32Next(hProcess,&pe);

    }

    return 0;


    }
    我这函数有问题吗  我没问题嘛
    然后再看下:BOOL InItProcInfo()
    {
    DWORD dwGamePID=GetProcessPID("test.exe");//获取目标进程pid
    if (dwGamePID !=0)
    {
    char buf[20];
    memset(buf,0,20);
    wsprintf(buf,"PID:%d",dwGamePID);
    MessageBox(0,buf,0,0);
    return true;
    }
    return false;
    }
    这函数有问题吗  也没问题嘛  他就是不弹出。 唉我主函数也贴上来了:BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
    {
    switch(fdwReason)
        {
    case DLL_PROCESS_ATTACH:
    if(!InItProcInfo())
    {
    MessageBox(0,"找不到%>_<%",0,0);
    FreeLibrary(hinstDLL);    
    }
            break;
          default:
            break;
        }
    return true;
    }
      

  9.   


    呵呵 我在学编写WG  因为游戏都有保护 OpenProcess这函数用不上场了