Hallo zusammen,
ich habe eine Anwendung, die an den geöffneten Adobe Reader die Tastenkombination zum Einblenden der erweiterten Suche sendet.
Bei vielen Rechnern funktioniert das auch ohne Probleme, bei einigen jedoch wird der Prozess zwar gestartet, die "Tastatureingabe" hingegen scheint nicht ausgeführt zu werden.
Der Code ist wie folgt:
Process prc = Process.Start(prcInfo);
SetForegroundWindow(prc.MainWindowHandle);
prc.WaitForInputIdle();
SendKeys.SendWait("^+F");
SendKeys.SendWait(txt_Searchvalue.Text);
SendKeys.SendWait("~");
prc.WaitForExit();
Hat jemand einmal etwas ähnliches gehabt oder vielleicht eine Idee, woran es liegen könnte? Es erscheint auch keine Fehlermeldung oder etwas ähnliches, es wird lediglich kein Suchfenster geöffnet.
Vielen Dank im Voraus.
Hallo,
schon mal in die Hilfe zu MainWindowHandle bzw. WaitForInputIdle geschaut?
Du hast die falsche Reihenfolge verwendet, also
prc.WaitForInputIdle();
SetForegroundWindow(prc.MainWindowHandle);
macht wohl mehr Sinn.
hallo,
wenn ich deine anpassung vornehme, funktioniert es an keinem rechner mehr.
ich habe noch eine 2. variante gefunden (http://inputsimulator.codeplex.com/), bei dieser tritt der identische "fehler" auf, wie bei der bisher verwendeten, an den selben computern funktioniert es weiterhin, und an den anderen funktioniert es nach wie vor nicht, das problem kann also nach meinem verständnis nicht an der vorgehensweise liegen, sondern es muss ein problem außerhalb der software vorliegen.
Hallo blackdns,
hast du auch schon einmal probiert, ob keybd_event (via P/Invoke) funktioniert?
Informationen zur Nutzung findest du hier: keybd_event (coredll) auf pinvoke.net
Haben denn die PCs an denen es nicht funktioniert irgendwas gemeinsam? (OS Version, Adobe Version, ...)
Und worin unterscheiden sie sich von denen bei denen es funktioniert?
hallo karill,
diese software scheint nur für mobile endgeräte zu sein?! meine software ist desktop-basiert.
hallo lennart,
die rechner sind auf den ersten blick alle "identisch"
windows 7 sp1 64bit, adobe reader 11 (latest), aktuellstes .net framework (4.5) und vollständig durch-gepatcht
welche anderen faktoren könnten eine rolle spielen?
es handelt sich hier um ein wpf-projekt basierend auf .net 4.5, wenn ich es richtig verstehe, sollte die anwendung entsprechend auf einem pc, der eine ältere version von .net benutzt, garnicht starten - eine wie oben erläuterte arbeitsweise ist kein indiz für einen versionskonflikt der .net-versionen, ist das korrekt?
Gemeint war wohl user32.keybd_event.
Selbst wenn auf einem PC mehrere verschiedene .Net FW Versionen installiert sind ist die in deinen Projekteigenschaften eingestellte Version entscheidend.
Mehr als über pinvoke zu gehn oder weiter nach Unterschieden zu suchen fällt mir jetzt leider auch nicht ein.
Ah ich muss mich entschuldigen...
ja, gemeint war die keybd_event aus der user32.dll 😃
Ich hatte mich selbst gewundert, da ich mir schon vorher sicher war, dass keybd_event in der user32 steht... da ich aber in Eile war, hab ich dem ersten Vorschlag von pinvoke.net vertraut ohne auf die Details zu achten 😕
nicht schlimm 😃
habe jetzt aber herausgefunden, dass der "Geschützte Modus" des Adobe Readers (vgl. Anhang) mir einen Strich durch die Rechnung gemacht hat!
der scheint offenbar dafür zu sorgen, dass die tastatureingaben nicht ankommen.
falls es jmd programmatisch deaktivieren möchte:
Registry.SetValue("HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\11.0\Privileged", "bProtectedMode", "0")