我以服务的方式写程序,在程序里面安装了勾子,然后在勾子里显示对话框,可是就不显示啊。为什么,大体如下:
主程序:
      servicestatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
servicestatus.dwCurrentState = SERVICE_START_PENDING;
servicestatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令
servicestatus.dwWin32ExitCode = 0;
servicestatus.dwServiceSpecificExitCode = 0;
servicestatus.dwCheckPoint = 0;//当dwCurrentState = SERVICE_START_PENDING时,此值为0
servicestatus.dwWaitHint = 0;
//ServiceMain要迅速完成自身工作,首先是必不可少的两项工作,第一项是调用RegisterServiceCtrlHandler函数去通知SCM它的CtrlHandler回调函数的地址:
hStatus = ::RegisterServiceCtrlHandler(_T("SFS"),CtrlHandler);
if(hStatus == 0)
{
return ;
}
//向scm报告运行状态
servicestatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hStatus,&servicestatus);
//hStatus为SERVICE_STATUS_HANDLE类型的全局变量。当需要改变服务状态时SetServiceStatus()函数需要它做为参数来标识一个服务。 brun=true;
        UmaFunction fun;   //umafunction是一个类,是导入的一组件类,在其ShowSupDlg()中实现如下:
fun.ShowSupDlg();以下是在组件UmaFunction.dll里面的内容
在其ShowSupDlg()中实现如下:
SetWindowsHookEx(WH_KEYBOARD,HotKeyHook,::GetModuleHandle(_T("UmaFunction")),0);   //下全局勾子勾子函数如下:
if( wParam == '0')
  {
  OutputDebugString(_T("hookwanglong"));
  AfxBeginThread(threadproc, NULL);     //按下0时开线程用于显示对话框
  }线程实现如下:
UINT threadproc(LPVOID lp)
{
::AFX_MANAGE_STATE(AfxGetAppModuleState());

///////////////////////////////////////////
UmaUgentDlg dlg;   //UmaUgentDlg 在UmaFunction.dll组件里面,对应的有处理程序
dlg.DoModal();     //显示对话框,问题是显示不出来。这个问题搞的我头大,请哪位大神帮忙看一下,小弟不胜感激,马上要过年,可是项目却卡这了,动不了啊,谢谢。