如果是当前进程可以通过AfxGetInstanceHandle()获得,但是如果不是当前进程,而且知道了进程的ID如何获得instance?
thx!!!!

解决方案 »

  1.   

    The OpenProcess function opens an existing process object. If the function succeeds, the return value is an open handle to the specified process.
      

  2.   

    OpenProcess打开进程,获得进程句柄
      

  3.   

    如果你要操作的话,用ALL_ACCESS打开。如果你只是这个函数打不开的话,说明你的参数没传对哈。
      

  4.   

    楼上说的对,
    CWnd      *pWnd = FindWindow(NULL , " 出货单") ;
    GetWindowThreadProcessId(pWnd->GetSafeHwnd () , &dwPID) ;
    hIns = (HINSTANCE)OpenProcess (PROCESS_ALL_ACCESS , FALSE , dwPID) ;
    g_hHook = SetWindowsHookEx(WH_MOUSE , (HOOKPROC)CallWndProc , (HINSTANCE)hIns , dwPID) ;
    DWORD dwError = GetLastError() ;
    不知道为什么g_hHook为0,而dwError却是0(成功)?
      

  5.   

    OpenProcessSee Also
    CloseHandle, GetLastError, OpenProcessRequirements 
    Runs on Versions Defined in Include Link to 
    Windows CE OS 2.0 and later   Winbase.h Coredll.lib 
    This function returns a handle to an existing process object.HANDLE OpenProcess( 
    DWORD fdwAccess, 
    BOOL fInherit, 
    DWORD IDProcess
    );
      

  6.   

    用SPY++看了,OpenProcess()得到的handle和instance handle不一样啊!!!
      

  7.   

    呵呵,搞定了,
    hIns  = (HINSTANCE)GetWindowLong(pWnd->GetSafeHwnd () , GWL_HINSTANCE) ;
    但是现在的问题是得到了hInstance后
    SetWindowsHookEx不知道为什么会失败.
    DWORD     dwPID ;
    HINSTANCE hIns ;
    CWnd      *pWnd = FindWindow(NULL , " 出货单") ;
    DWORD dwThreadID = GetWindowThreadProcessId(pWnd->GetSafeHwnd () , &dwPID) ;
    DWORD dwError ;
    // hIns = (HINSTANCE)OpenProcess (PROCESS_ALL_ACCESS , FALSE , dwPID) ;
    hIns  = (HINSTANCE)GetWindowLong(pWnd->GetSafeHwnd () , GWL_HINSTANCE) ;
    dwError = GetLastError() ;
    g_hHook = SetWindowsHookEx(WH_MOUSE , (HOOKPROC)CallWndProc , (HINSTANCE)hIns , dwThreadID) ;
    dwError = GetLastError() ;
    g_hHook为0,dwError显示的却是0
      

  8.   

    GetWindowLong(pWnd->GetSafeHwnd () , GWL_HINSTANCE) ;
      

  9.   

    SetWindowsHookEx(WH_MOUSE , (HOOKPROC)CallWndProc , (HINSTANCE)应该在dll中