Domanda

Ho creato un servizio che mostra una sorta di splash screen sul desktop di un utente specifico e solo quando l'utente è connesso a (utente chiosco).

Questa schermata di avvio, una volta inserito un codice valido, vi dirà che per il servizio e il servizio va a dormire per un ammontare x di tempo (a seconda del codice).

La schermata di avvio si chiude semplicemente. Ora, quando il servizio si sveglia vede che il tonfo non c'è più e in modo da iniziare in su.

Tutto questo sta lavorando, l'unico problema è che l'applicazione avviata non è attivo, vale a dire se sto lavorando in blocco note e il tempo è scaduto, la schermata di avvio viene visualizzata (schermo intero però) dietro il blocchetto per appunti.

Ho solo preoccuparsi di Windows Vista, sto codifica in Python utilizzando le estensioni Win32, ma credo che questo problema sta nel CreateProcessAsUser quando viene chiamato dal LocalSystem.


Aggiornamento:

Il 'problema' è in realtà un on limitazione delle finalità per evitare che le applicazioni 'irritanti' come la mia di rubare messa a fuoco.

È possibile modificare il comportamento impostando: win32gui.SystemParametersInfo (win32con.SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0) che equivale a impostare temporaneamente il valore di registro: HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForegroundLockTimeout Questo deve essere fatto come l'utente stesso, quindi o costruirla in app si sta avviando o costruire un aiutante di lancio per l'applicazione che si desidera avviare.

Tuttavia un'applicazione potrebbe voler evitare di ottenere di essa la messa a fuoco rubato utilizzando alcuni chiamata API, che non mi ricordo in questo momento.

Una probabilmente buona soluzione sarebbe quella di trovare tutte le finestre gestisce attualmente da quell'utente e quindi utilizzare ciascuna di queste maniglie per usare win32gui.ShowWindow (maniglia, di comando) per ridurre al minimo esso.

Anche se per questa impostazione l'impostazione locktimeout era abbastanza particolare problema.

Se qualcuno si chiede come sono riuscito a avviare un'applicazione a un desktop da un servizio, ecco un link per il codice .

È stato utile?

Soluzione 2

Per varie ragioni molto legittimati, Microsoft sarebbe meglio non vedere un servizio di lanciare un app e rubare messa a fuoco, ma ho trovato il seguente lavoro intorno a compiere ancora quello che voglio.

L'originale intenzione è quella di avere un chiosco come l'applicazione ostacolato da un codice come schermata iniziale, che entrando un codice di 8 caratteri chiude la schermata iniziale per un periodo di tempo come nel codice passaggio definito. Originariamente l'effettiva applicazione di uso è stato avviato dal cartella di avvio automatico.

Comunque ora riscritto che viene lanciato dal mio servizio, in questo modo posso nascondere l'applicazione con il lancio di un'applicazione di supporto dal servizio che appena nasconde il programma e lancia la schermata iniziale, all'uscita la schermata iniziale del programma è tornato allo stato precedente.

Altri suggerimenti

Hai provato a lanciare un altro processo che proprio dal servizio per vedere se ottiene fuoco? Come blocco note e vedere se ruba attenzione dal vostro browser? Se è così forse il suo programma in grado di riprendere la messa a fuoco quando si inizia.

I altrimenti beilive è l'attributo wShowWindow dal STARTUPINFO struct i punti lpStartupInfo a che dovrebbe controllarla. È inoltre necessario STARTF_USESHOWWINDOW in dwFlags per usare nShowWindow. I valori devono essere SW_SHOW penso, sono elencati per la funzione ShowWindow se volete provare altri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top