PDA

Pogčedajte punu verziju : c++ MessageBox problem na Visti


eraser
11. 11. 2009., 09:25
Zdravo svima,

imam jedan win service koji je napisan u c++; njegov posao je da prati velicinu baze i da obavestava korisnika kada baza dodje blizu neke unapred definisane velicine. Obavestavanje se radi upisom u log fajl i prikazom odgovarajuce poruke preko MessageBox-a. To sve radi vec godinama na raznim verzijama Windows-a ali na Visti ne. Naime, poruka se ispise u log file ali nikako da se prikaze MsgBox. Preko googla sam video da vec neki ljudi imaju slicne probleme ali za sad nema nekog konkretnog odgovora kako da se problem resi.
Da se neko nije susretao sa slicnim problemima, bilo kakav hint bi mi bio od pomoci.
Napomena: VS6 C++
Pozdrav.

Dragi Tata
11. 11. 2009., 17:08
Сервиси не треба директно да комуницирају са корисником и зато на Висти и новијим верзијама Виндоуза MessageBox више не приказује ништа.

Ако баш мораш, пробај да користиш WTSSendMessage() функцију.

eraser
13. 11. 2009., 09:44
Po dokumentaciji trebalo bi ako se ukljuci 'Interactive services dialog detection' da on kroz neki svoj security ipak propusti msgbox. Ali i kada sam to ukljucio msgbox je i dalje nevidljiv.
Ipak cu morati da menjam kood i da probam da saljem poruku preko WTSSendMessage() fje.

eraser
17. 11. 2009., 13:17
Ako nekom bude trebalo evo kako bi trebalo da se radi.
Ako smo pre Viste imali servis koji radi ovo: MessageBox(NULL,szText,m_szServiceName,MB_OK + MessageTyp + MB_TOPMOST);

Od Viste pa nadalje mora da se radi ovako:

char cTitle[50];
sprintf(cTitle,"DB Size Security Service");
char cMessage[1024];
sprintf(cMessage, szText);

DWORD dwSession = WTSGetActiveConsoleSessionId();
DWORD dwResponse = 0;

WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, dwSession,
cTitle,
static_cast<DWORD>((strlen(cTitle) + 1) * sizeof(char)),
cMessage,
static_cast<DWORD>((strlen(cMessage) + 1) * sizeof(char)),
MB_OK + MessageTyp + MB_TOPMOST, 0, &dwResponse, FALSE);