Wie starte ich meine Anwendung zwar eine UAC-dialog-Fenster zeigt?
Ich habe eine Anwendung, die ich schrieb .NET. Es muss weiterhin ausgeführt und haben Zugriff auf den desktop, dass die UAC-dialog von windows öffnen und die Interaktion mit dem desktop mit Tastatur und Maus-Ereignisse.
Es ist irgendwie wie ein VNC-Programm. Stellen Sie sich vor, auf denen ein VNC-Programm und ein UAC-Fenster erscheint, wollen Sie Ihr VNC-Programm, immer noch in der Lage zu kontrollieren dem desktop mit der UAC-Fenster in der es, so dass der Benutzer kann die Maus bewegen und klicken Sie auf die Schaltfläche " OK " auf der UAC-dialog. Kann mir jemand sagen, wie ich dies tun?
Dank
- Nein, die Maus und Tastatur nicht arbeiten, weil meine Bewerbung ist immer noch auf dem ursprünglichen desktop und das UAC-Fenster ist auf einem sicheren desktop, die mein Programm nicht zugreifen. Ich muss in der Lage sein zu finden, dass secure desktop, dann laufen meine Programm auf Sie.
- Wenn Sie das tun könnten, wäre es nicht machen es zu einem sicheren desktop, würde es...;)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, Sie beginnen mit der Durchsicht der Dokumentation. Ich würde vermuten, dass vielleicht könnten Sie das Fenster öffnen station und fügen Sie Ihren Prozess, aber ich bin nicht sehr vertraut mit diesem Bereich von Windows.
Edit 1:
In Windows XP konnte ich auf den sicheren desktop zugreifen ("winlogon") über OpenDesktop, wenn Sie als "SYSTEM" ausgeführt; die ACL auf dem sicheren desktop ermöglicht nur den Zugriff auf das SYSTEM-Konto. Nach dem öffnen konnte ich aufzählen, die Fenster auf, obwohl es nur eine Handvoll. Vielleicht konnten Sie ein Fenster Haken und hören für die Bildung der spezifischen dialog. Ich bin mir nicht sicher, ob Vista dieses Modell so geändert, also vielleicht funktioniert es nicht; ich habe keinen Vista-Rechner vor mir zum test vor.
Edit 2:
Ok, ich hab etwas, was meistens funktioniert (getestet unter Windows 7). Zuerst müssen Sie ein Dienst läuft als SYSTEM. Von diesem service, die Sie brauchen, um zu starten einen separaten Antrag in der Sitzung des Benutzers. Um dies zu tun, auflisten aller Prozesse, die auf der Suche für winlogon.exe öffnen Sie das token, und CreateProcessAsUser. Geben Sie "WinSta0\Winlogon" für die ipdesktop-parameter der STARTUPINFO. Jetzt haben Sie einen Prozess als "SYSTEM" ausgeführt in der Sitzung des Benutzers auf "Winlogon" - desktop. In dem neuen Prozess können Sie tun, was Sie wollen; ich habe einen schnellen test mit EnumDesktopWindows und ich war in der Lage, um die Fenster der Klasse und der text für die verschiedenen UAC zugehörige windows ("$$$Secure UAP-Fenster Hintergrund", "$$$Secure UAP Hintergrund Fake-Client-Fenster", etc). Ich bin mir nicht sicher, wie Sie Sie, um zu bestimmen, wenn eine UAC-Eingabeaufforderung angezeigt wird, obwohl; als quick hack, Sie könnten laufen Sie einfach eine Schleife, die alle 100 ms der Suche nach UAC von windows oder so. Ich konnte fügen Sie einige code, wenn es helfen würde.
Edit 3:
Ok. Ich habe geschrieben ein Win32-Dienst, der verwendet die folgenden Parameter:
/install - installiert die service
/uninstall - deinstalliert den Dienst
/service - läuft als Dienst; aufgerufen via SCM
/client - läuft als client; aufgerufen über CreateProcessAsUser
Nur interessante code in die /der Dienstleistung und /client-Modi.
In /service-Modus es listet die Laufenden Prozesse über EnumProcesses und GetModuleFileNameEx auf der Suche nach "winlogon.exe". Wenn er eine findet es öffnet seine token und startet sich selbst in /client-Modus über CreateProcessAsUser:
In /client-Modus, klickt er auf die Schaltfläche "ja" auf der UAC-prompt über eine Reihe von FindWindow und FindWindowEx Anrufe. Können Sie Spy++ herausfinden, die Fenster-Hierarchie.
Die Art, wie ich dies testen zu kleben ein Sleep(5000); in der /dem der client-code. Dann habe ich den Dienst starten und sofort etwas tun, löst eine UAC-Eingabeaufforderung (D. H. ausführen, regedit). Nach 5 Sekunden wird der /dem der client-code wird aufwachen und finden, und klicken Sie auf die Schaltfläche "ja". Sie können laufen andere Prozesse auf dem Winlogon-desktop; cmd.exe und spyxx.exe (Spy++) sind sehr nützlich. Leider explorer.exe weist eine Menge Probleme bei der Ausführung auf dem Winlogon-desktop und ist nicht sehr nützlich. Um auf dem Winlogon-desktop können Sie ausführen, regedit und dann Alt+Tab wechseln Sie auf die andere Anwendung. Wenn Sie wollen bekommen Sie Lust, Sie können schreiben Sie Ihre eigenen desktop-switching utility (mit dem SwitchDesktop-Funktion), so dass Sie nicht haben, um die trigger eine UAC-Eingabeaufforderung angezeigt zu bekommen, auf dem Winlogon-desktop. Wenn Sie wirklich wünschen, können Sie eine Globale Fenster-hook-monitor-Fenster-Erstellung, wenn das UAC-Dialogfeld angezeigt, die Sie vorbereiten können, um klicken Sie auf die Schaltfläche "ja". Ich nahm es nicht ganz so weit, aber.
Das problem ist, dass die UAC-Eingabeaufforderung nicht öffnen auf dem aktuellen desktop, sondern in einem völlig neuen Secure Desktop, die Aussetzung der aktuell geöffneten desktops.
Dies ist beabsichtigt, da die Programme sind nicht erlaubt, um die Interaktion mit diesem dialog.
Gibt es eine Ausnahme: "trusted SYSTEM-Prozesse laufen auf dem Sicheren Desktop" nach dieser blog-Eintrag.
Ich könnte mir vorstellen, dass Sie wahrscheinlich benötigen, um als Windows-Dienst ausgeführt werden darf, ausgeführt, solange die Benutzerkontensteuerung aktiv ist.
Ich glaube, alles, was Sie auf Ihrem Bildschirm sehen, während der UAC-prompt ist ein screenshot(mit Ausnahme der dialog selbst)
Können Sie nicht tun. Standardmäßig, wenn eine UAC-Aufforderung erscheint, ist es tatsächlich läuft in einer isolierten WinStation, die von der anderen, läuft "normalen" Anwendungen. Diese WinStation ist speziell isoliert, um zu verhindern, dass Benutzer Anwendungen aus der Interaktion mit der UAC-Aufforderung. Es sieht aus wie Ihre desktop, da der hintergrund, dass WinStation ist eigentlich eine statische bitmap-Bild von Ihrem desktop, wie es war kurz bevor der UAC-Eingabeaufforderung angezeigt wurde.
Ich vermute, dass dies möglicherweise ein problem in der version von VNC, die Sie ausgeführt werden, wie ich bin ziemlich sicher, das Remote-Desktop bietet, das richtige Verhalten und ermöglicht es Ihnen, die Benutzer immer noch die Interaktion mit der UAC-Eingabeaufforderung über das remote-desktop-client. Halten Sie im Verstand, wenn Sie unter jeder Art von remote-Clients (remote desktop, VNC, etc.) die Idee ist, die der client sollte Ihnen ermöglichen, zu tun, was Sie normalerweise in der Lage sein zu tun, wenn man physisch sitzt an der Tastatur.