现在在做一个Credential Provider的DLL,想在其中一个函数弹出一个MessageBox,但是在计算机锁定的时候这个MessageBox被桌面盖住了,显示不出来。我想获取DLL自己的句柄,作为MessageBox的第一个参数,
请问怎么在一个DLL里获取这个DLL的句柄?

解决方案 »

  1.   

    那么如何获取调用这个DLL的程序或是窗口的句柄呢?
      

  2.   

    比如我这个DLL叫cp.dll,
    那么在这个cp.dll里调用GetModuleHandle,
    HANDLE hd;
    hd = GetModuleHandle(cp.dll);这样行吗?
      

  3.   

    DllMain的第一个参数不就是这个DLL的模块句柄嘛 ?
    弄个全局变量, 保存下来, 任何地方都可以直接用这里我就不懂你说什么了 ?  DLL自己的是模块句柄, MessageBox的第一个参数是窗口句柄, 据微软说不能混用...想在计算机被锁定或者未登录的时候能够看到你的MessageBox, 有个方法..
    在MessageBox的第四个参数 添加MB_SERVICE_NOTIFICATION标志, 看看有没有什么不同  ?::MessageBox(NULL, _T("xx"), _T("yy"), MB_SERVICE_NOTIFICATION);
      

  4.   

    DllMain的第一个参数就是模块句柄啊,保存下来就行了。GetModuleHandle当然也行,后面加DLL名就行了。如果写成GetModuleHandle(NULL)获取的是调用进程的模块句柄。