2010-11-22 11 views
1

Bu biraz sıra dışı bir sorundur. Şu anda bir Office uygulamasını otomatikleştirmek için bir çaba üzerinde çalışıyorum. Temelde sorun, uygulamamın RDP aracılığıyla uygulamamı yürüttüğümde Office uygulamasıyla etkileşimde bulunabilmesiydi, ancak uygulamayı bir windows hizmetinden oluşturmak için kurduğumda SendInput() kullanarak tuş vuruşlarını gönderemiyorum. İşletim Sistemi Win03 Std.C# - Windows Hizmetinden SendInput() çalışmıyor ancak 1 - Win03 döndürüyor

Uygulamayı bir windows hizmetinden oluştururken pencere başlıklarını okuyabilirim, pinvoke yoluyla beklendiği gibi birlikte çalışma, vb. Aracılığıyla otomatikleştirebilirim, ancak çağrı 1 yanıt verse bile SendInput() iletileri kaybolur Bu noktada yapmaya çalışıyorum bir diyaloğa bir kaçış tuş vuruşu gönderir.

Tuş vuruşlarını sanal anahtarlar ve tarama kodları olarak göndermeyi denedim.

Herhangi bir fikir veya ipucu? Şimdiden teşekkürler!

(BTW: otomasyon bu tür/desteklenen MSFT tarafından yaptırım olmadığını fark yoktur.)

DÜZENLEME: başka vaka herkes bu sorunu var Sadece içeri, bu işleri :

[DllImport("user32")] 

public static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); 


bool returnVal = NativeWin32.PostMessage(popup, 0x0100, new IntPtr(0x1b), IntPtr.Zero); 

cevap

1

SendInput'un geçerli etkin pencereye (veya odaklanılan pencereye) anahtarları göndereceğine inanıyorum. Genellikle, windows hizmetleri farklı masaüstü (o etkileşimli masaüstü) ile ilişkili olurdu - böylece windows hizmetinden başlatılan App arka plan masaüstü ile ilişkili olurdu - böylece aktif pencere (veya odak ile pencere) ve bu yüzden çalışmayan sendinout neden olabilir . Belki de, SendMessage veya PostMessage kullanarak anahtar tıklamayı simüle etmeyi deneyebilirsiniz - bunun için pencere tanıtıcısına ihtiyacınız olacaktır.

+0

Yardımlarınız için teşekkürler; bir sebepten dolayı odaklanmayı başarabilecek bir pencere olmadığı gerçeğini aştım. * grumble * Şimdi PostMessage ile test ediyorum. – cursedfrogurt

+0

Yardım için çok teşekkürler; Bu sorunu çözdü! – cursedfrogurt

0

Windows Vista'dan itibaren, hizmetlerin masaüstüyle etkileşime girmesine artık izin verilmiyor. Bu, klavye olaylarını göndermek için bir masaüstü içeriğine sahip olmayacakları anlamına gelir.

İlgili konular