我的需求是這樣的
我有兩個程式,一個是服務程式,一個是用戶程式
按照我現在的了解,服務程式在session0層用戶程式在session1層
在正常情況下服務程式中使用findwindow和sendmessage是無效的。
我現在想要實作的就是在服務程式中給用戶程式發送訊息
下面是我在網上找的代碼,原理是修改視窗站,便可以使服務程式給視窗程式發送訊息,經過測驗
服務程式在非服務狀態時運行該代碼可以有效的與用戶程式通訊,一旦設定為服務程式,也就無效了,
并且設定“允許服務與桌面互動“ 也不好使
還請各位大神幫幫忙解決一下,卡在這里2天了

void Run()
{
HWND hWndQQ = NULL;
HWINSTA hstaSave;
LPCWSTR lpStation = L"WinSta0";
LPCWSTR lpDesk = L"default";
HWINSTA hstaUser;
HDESK hdeskSave;
HDESK hdeskUser;
hstaSave = GetProcessWindowStation();
hstaUser = OpenWindowStation(lpStation, 0, WINSTA_ALL_ACCESS);
SetProcessWindowStation(hstaUser);
hdeskSave = GetThreadDesktop(GetCurrentThreadId());
hdeskUser = OpenDesktop(lpDesk, 0, FALSE, DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD | DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS);
if (hdeskUser == NULL)
{
OutputDebugStringA("@xiaohuihui:Open desktop Failed!");
}
if (SetThreadDesktop(hdeskUser) == NULL)
{
OutputDebugStringA("@xiaohuihui:SetThreadDesktop Failed!");
}
////////////////////////這里添加與視窗互動的代碼///////////////////////////
hWndQQ = FindWindow(NULL, L"DiscernPicture");
if (hWndQQ != NULL)
{
OutputDebugStringA("@xiaohuihui:Find Window Success!");
}
else
{
OutputDebugStringA("@xiaohuihui:Find Window Falied!");
}
SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hstaUser);
}
uj5u.com熱心網友回復:
百度搜“Session0穿透”?uj5u.com熱心網友回復:
搜索過了 ,但都不能滿足我的需求,目前進展是互動服務必須運行在 LocalSystem 帳戶的背景關系中,進行配置后以互動方式運行。
在呼叫CreateService函式時指定dwServeceType引數為SERVICE_INTERACTIVE_PROCESS旗標,服務就能夠被配置為以互動的方式運行。
但是,下面的注冊表項包含一個的值NoInteractiveServices,用于控制該 SERVICE_INTERACTIVE_PROCESS 標志的影響:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
NoInteractiveServices的默認值為0,意味著有SERVICE_INTERACTIVE_PROCESS標志的服務能以互動的方式運行。當 NoInteractiveServices 值設定為非零值時,在那之后啟動的服務,無論它是否設定了SERVICE_INTERACTIVE_PROCESS,都不能以互動都方式運行;
以上3條都已經實作了,但還是不行
uj5u.com熱心網友回復:
用管道吧,簡單好用~uj5u.com熱心網友回復:
共享記憶體、管道、dcom、sock 都可以實作通信轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73854.html
標籤:進程/線程/DLL
上一篇:MFC中基于對話框程式,如何畫矩形并讓矩形按給定坐標移動
下一篇:請教UDP丟包檢測怎么做?
