急问,CMsFlexGrid * pGrid=(CMSFlexGrid*)FromHandle(hGridWnd);
这样行不行

解决方案 »

  1.   

    这样当然不行,向目标进程插入一个DLL?
      

  2.   

    向目标进程插入一个DLL?
    老大,你也不能确定线程注入可行吗?为什么打个?号
      

  3.   

    使用进程间通讯机制:
    1) A/B PROCESS之间内存文件共享的方式:A PROCESS发送消息到B,B接到后将GRID的内容写入共享内存区域,然后A读取B写入的数据即可
    2)SOCKET:A通过SOCKET发送命令到B,B得到本身的数据,返回数据到A
    3) 其它管道/等方式
      

  4.   

    #include "tlhelp32.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif//注入代码。
    #pragma comment(lib,"th32.lib")
    const char *pkill="F:\\mydoc\\vcsrc\\GetScreenTable\\Debug\\HookTable.dll";  
    BOOL g_bStart = FALSE;
    HINSTANCE g_hInst = NULL;char *prosess="机械设计手册(软件版)R2.0.exe";   //要注入的进程名(目标进程名)int install()
    {
    HANDLE hSnap;
    HANDLE hkernel32;        //被注入进程的句柄
    PROCESSENTRY32 pe; 
    BOOL bNext;
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    LUID Luid;
    LPVOID p;
    FARPROC pfn;

    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
    {
    return 1;
    }

    if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid))
    {
    return 1;
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    tp.Privileges[0].Luid = Luid;

    if (!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
    {
    return 1;
    }

    pe.dwSize = sizeof(pe);
    hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    bNext=Process32First(hSnap, &pe); 
    while(bNext) 
    {
    if(!stricmp(pe.szExeFile,prosess))                //--->>
    {
    hkernel32=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,1,pe.th32ProcessID);
    break;
    }
    bNext=Process32Next(hSnap, &pe); 
    }

    CloseHandle(hSnap);



    p=VirtualAllocEx(hkernel32,NULL,strlen(pkill),MEM_COMMIT,PAGE_READWRITE);
    WriteProcessMemory(hkernel32,p,pkill,strlen(pkill),NULL);
    pfn=GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
    CreateRemoteThread(hkernel32,NULL,0,(LPTHREAD_START_ROUTINE)pfn,p,NULL,0); 

    return 0;
    }