FindWindow geht bei Services nicht.
-
Hallo zusammen
In meinem Service benötige ich das WindowHandle von einem Fenster (den Namen habe ich).
hWnd = FindWindow(NULL, (LPCSTR)"myWindow");
Das ganze funktioniert auch, wenn das Programm NICHT als Service läuft.
Läuft das Programm jedoch als Service wird bei mir 0 zurückgegeben.
Kann der Windows Service nicht mit der WinApi umgehen? Oder was mache ich falsch?
-
Sag mal, informierst du dich eigentlich nicht, über das, was du da tust? Weißt du was ein Service ist? Weißt du, wie ein Service funktioniert? Weißt du, was eine Windows Station ist? Weißt du, was ein Desktop ist? Hast du dich mal über das Sicherheitskonzept von Windows informiert? Denn dann wüsstest du, dass ein Service nicht in der interaktiven Windows Station des Benutzers läuft und somit auch keinen Zugriff auf dessen Desktop hat. Bis Windows XP gab es zwar noch interaktive Dienste, ab Windows Vista wurden diese aber aus Sicherheitsgründen abgeschafft.
Wenn dein Dienst mit dem Benutzer interagieren muss, dann mache dies über ein zweites Programm, welches im Kontext des Benutzers läuft und mittels eines IPC Mechanismus mit deinem Dienst kommuniziert.
-
salute,
nein nicht wirklich.
Sprich dann werden auch diverse andere WinAPI Befehle die ein GUI verändern nicht funktionieren?Die Applikation muss jedoch nur auf Windows XP laufen. Also wäre dies dann trotzdem möglich?
-
mr.window schrieb:
nein nicht wirklich.
Meinst du nicht auch, dass es dann mal sinnvoll sich zu informieren? Gerade, wenn es um einen Bereich geht, der für die Sicherheit von Windows nicht ganz unrelevant ist.
Tu dies und du kannst dir deine Fragen selber beantworten. Dann wirst du auch feststellen, dass es auch unter XP seltenst eine gute Idee ist, einen interaktiven Dienst zu entwickeln.
-
Hi
Du kanns dir zugriff beschafen indem du die WindowsStation switch'st.
[code]
int main()
{
HWINSTA m_hWinsta;
HDESK m_hDesk;m_hWinsta = OpenWindowStation("winsta0", FALSE,
WINSTA_ACCESSCLIPBOARD |
WINSTA_ACCESSGLOBALATOMS |
WINSTA_CREATEDESKTOP |
WINSTA_ENUMDESKTOPS |
WINSTA_ENUMERATE |
WINSTA_EXITWINDOWS |
WINSTA_READATTRIBUTES |
WINSTA_READSCREEN |
WINSTA_WRITEATTRIBUTES);if (m_hWinsta == NULL)
{
printf("error");
getchar();
}SetProcessWindowStation(m_hWinsta);
m_hDesk = OpenDesktop("default", DF_ALLOWOTHERACCOUNTHOOK, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);if (m_hDesk == NULL)
{
printf("error");
getchar();
}SetThreadDesktop(m_hDesk);
// Und hier kannst du jaetz deine Api call's machen !!
}
lowbyte
-
Hi
So wie es es _Luckie gesagt hat, manche Leute haben einfach keine Ahnung !!
lowbyte