windows下调用ShellExecute CreateProcess 界面不显示
细粉条 2014-09-15 07:23:49 winlogon notification package 的 Eventstartup 函数中用 ShellExecute或者CreateProcess 调用一个exe, 这个exe是弹出一个窗口,但是显示不出来,系统logon后通过任务管理器能看到调用的exe的进程,但是为什么界面显示不出来呢?
而用createwindow是可以显示窗口的,而且此窗口显示在系统 欢迎界面 之上。
winlogon notification package 的 Eventstartup 函数如下:
VOID WLEventStartUp(PWLX_NOTIFICATION_INFO pInfo)
{
wchar_t lszCurrentDektopName[MAX_PATH] = {0};
DWORD ldwNameLen = MAX_PATH,ldwLengthNeeded = 0;
GetUserObjectInformation(OpenInputDesktop(DF_ALLOWOTHERACCOUNTHOOK,FALSE,MAXIMUM_ALLOWED),UOI_NAME,lszCurrentDektopName,ldwNameLen,&ldwLengthNeeded);//得到的,lszCurrentDektopName为winlogon。
//不能显示窗口
ShellExecute(NULL, L"open", L"C:\\test.exe",L"C:\\",NULL, SW_SHOW);
// 创建进程,不能显示窗口
STARTUPINFO sInfo;
PROCESS_INFORMATION lpInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESHOWWINDOW;
sInfo.wShowWindow=SW_SHOWNORMAL;
ZeroMemory(&lpInfo,sizeof(lpInfo));
//创建一个进程
wchar_t wsModulePathName[MAX_PATH] = L"";
wcscpy_s(wsModulePathName,MAX_PATH,L"c:\\Test.exe");
if(::CreateProcess(wsModulePathName, NULL,
NULL,
NULL,
FALSE,
0,
NULL,
L"C:\\",
&sInfo,
&lpInfo))
{;
}
//可以弹出窗口
CreateWindowEx(WS_EX_TOPMOST|WS_EX_TOOLWINDOW,TEXT("Edit"),L"test",WS_VISIBLE | WS_POPUP ,0,0,
200,200,NULL,NULL,gHinstance,NULL);
}
createwindow和调用ShellExecute CreateProcess 调用exe 显示窗口有什么不同?
为什么createwindow直接创建可以成功,而其他方法不可以?