开发系统服务时,不能与桌面交互,后来加入了与桌面交互的部分,可以在桌面看见窗口。
但是在使用iwebbrowser时出错,具体代码如下:
int SysCallMainFunc( )
{
DWORD dwThreadId;
HWINSTA hwinstaSave;
HDESK hdeskSave;
HWINSTA hwinstaUser;
HDESK hdeskUser;
int result; // Ensure connection to service window station and desktop, and
// save their handles. GetDesktopWindow();
hwinstaSave = GetProcessWindowStation();
dwThreadId = GetCurrentThreadId();
hdeskSave = GetThreadDesktop(dwThreadId); hwinstaUser = OpenWindowStation(TEXT("WinSta0"), FALSE, MAXIMUM_ALLOWED);
SetProcessWindowStation(hwinstaUser);
hdeskUser = OpenDesktop(TEXT("Default"), 0, FALSE, MAXIMUM_ALLOWED);
RpcRevertToSelf();
if (hdeskUser == NULL)
{
SetProcessWindowStation(hwinstaSave);
CloseWindowStation(hwinstaUser);
return 0;
}
SetThreadDesktop(hdeskUser); // Display message box. dwGuiThreadIde = dwThreadId;
result = MessageBox(NULL, TEXT("Default"), TEXT("Default"), 0); //这一步可以实现 dwGuiThreadIde = 0;
BOOL b_OK = FALSE;
IWebBrowser2 *pBrowser=NULL;
HRESULT hr1 ;
hr1 = CoInitialize(NULL); //这一步也正确
if( !SUCCEEDED( hr1 ) )
{
return FALSE;
} hr1 = CoCreateInstance(CLSID_InternetExplorer, //到这里出错啦,hr1 报 ACCESSDENY
NULL,
CLSCTX_SERVER,
IID_IWebBrowser2,
(LPVOID *)&pBrowser);
if( !SUCCEEDED( hr1 ) )
{
return FALSE;
} BSTR bstrURL = ::SysAllocString(TEXT("http://www.baidu.com"));
VARIANT vaURL, vNull;
vaURL.vt = VT_BSTR;
vaURL.bstrVal = bstrURL;
vNull.vt = VT_NULL;
pBrowser->Navigate2(&vaURL,&vNull,&vNull,&vNull,&vNull); // Restore window station and desktop. SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hwinstaUser); return result;
}
请教各位高手,这个到底是什么原因,为什么iwebbrowser不能创建????
但是在使用iwebbrowser时出错,具体代码如下:
int SysCallMainFunc( )
{
DWORD dwThreadId;
HWINSTA hwinstaSave;
HDESK hdeskSave;
HWINSTA hwinstaUser;
HDESK hdeskUser;
int result; // Ensure connection to service window station and desktop, and
// save their handles. GetDesktopWindow();
hwinstaSave = GetProcessWindowStation();
dwThreadId = GetCurrentThreadId();
hdeskSave = GetThreadDesktop(dwThreadId); hwinstaUser = OpenWindowStation(TEXT("WinSta0"), FALSE, MAXIMUM_ALLOWED);
SetProcessWindowStation(hwinstaUser);
hdeskUser = OpenDesktop(TEXT("Default"), 0, FALSE, MAXIMUM_ALLOWED);
RpcRevertToSelf();
if (hdeskUser == NULL)
{
SetProcessWindowStation(hwinstaSave);
CloseWindowStation(hwinstaUser);
return 0;
}
SetThreadDesktop(hdeskUser); // Display message box. dwGuiThreadIde = dwThreadId;
result = MessageBox(NULL, TEXT("Default"), TEXT("Default"), 0); //这一步可以实现 dwGuiThreadIde = 0;
BOOL b_OK = FALSE;
IWebBrowser2 *pBrowser=NULL;
HRESULT hr1 ;
hr1 = CoInitialize(NULL); //这一步也正确
if( !SUCCEEDED( hr1 ) )
{
return FALSE;
} hr1 = CoCreateInstance(CLSID_InternetExplorer, //到这里出错啦,hr1 报 ACCESSDENY
NULL,
CLSCTX_SERVER,
IID_IWebBrowser2,
(LPVOID *)&pBrowser);
if( !SUCCEEDED( hr1 ) )
{
return FALSE;
} BSTR bstrURL = ::SysAllocString(TEXT("http://www.baidu.com"));
VARIANT vaURL, vNull;
vaURL.vt = VT_BSTR;
vaURL.bstrVal = bstrURL;
vNull.vt = VT_NULL;
pBrowser->Navigate2(&vaURL,&vNull,&vNull,&vNull,&vNull); // Restore window station and desktop. SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hwinstaUser); return result;
}
请教各位高手,这个到底是什么原因,为什么iwebbrowser不能创建????
解决方案 »
- 用过CPPToolTip的进,关于CPPToolTip在对话框里不能显示
- odbc 在程序中选择要打开的数据库中的表
- 如何在DC中输出文本,保证它的格式与按钮上缺省的相同?
- 求救:client-server的 socket程序,局域网内可以,广域网中失败?
- 帮我看看我酱紫能找到新工作吗?
- 求救:nafxcw.lib與libcp.lib沖突--關於void _cdecl operator delete(void*)怎麽辦
- 请问一下大师:在VC中用ADO编程如何取得字段名,即列名?有这样的内部函数吗?
- 我想將字符串變量中的值傳給某個數組進行存儲,一直存24個ip地址 char IniFileString[20];,如何實現呢?
- 一般关于菜单的事件(比如,COMMAND)绑定在那里?是类CMainFrame or MyAppApp or MyAppDoc or ...???
- 为什么只会抄别人的代码
- 请教: NT程序在2003系统下启动不了
- 怎样把一个窗口句柄HWND设为当前MDI框架的子窗口??
要么你把服务使用用户帐户来运行,要么换成WinHTTP来访问。
那就是说我需要用户名和密码才可以实现喽?具体怎么实现请指导一下下子,不使用winHTTP。
注入大部分杀软都认为是病毒啦,会让客户感觉不安全。