OSK.EXE unter Win 10 per Button aufrufen geht nicht

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    OSK.EXE unter Win 10 per Button aufrufen geht nicht

    Ich würde innerhalb meines Programmes gern per Button die alte OSK (Bildschirmtastatur) einblenden. Ich kann sie jedoch nicht starten. Laut Fehlermaldung müsste ich sie mit besonderen Privilegien starten. Hatte es mit Process.Start und Shell versucht. Wie genau bekomme ich das hin? Habe bei Google einige Tipps gefunden die aber nicht funktionieren.
    Es sollte die OSK sein, nicht die Tabtip, weil das Programm auch noch unter Win7 laufen sollte.
    Man(n) kann auch ohne Hunde leben, aber es lohnt nicht (Heinz Rühmann)
    @Skino Existiert das Programm überhaupt?
    Poste Deinen bisherigen Code.
    Probiere, Dein Programm mit Admin-Rechten zu starten, Explorer, rechte Maustarte, Starten mit Admin-Rechten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Skino schrieb:

    Wie genau bekomme ich das hin?


    Hallo Skino,
    es gibt mehrere Ansätze dafür.
    Unter Windows 10 ist es recht einfach. Schau Dir bitte das angehängte Testprojekt an.
    Version 1 geht nur, wenn Du Dein Projekt auf x64 umstellst, Version 2 geht mit allen CPU-Typen.
    Kannst ja mal probieren, ob das auch mit Windows 7 geht, glaube aber nicht.
    Für Windows 7 habe ich auch irgendwo eine Win-API Lösung gesehen...
    Dateien
    • OSKtest.zip

      (19,02 kB, 10 mal heruntergeladen, zuletzt: )
    @simpelSoft Wenn Du den Code ordentlich schreibst, läuft das ganze auch unter Win7-32. Win7-64 sowieso. Ausprobiert.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. using System;
    2. using System.Diagnostics;
    3. using System.IO;
    4. using System.Windows.Forms;
    5. namespace OSKtest
    6. {
    7. public partial class Form1 : Form
    8. {
    9. public Form1()
    10. {
    11. this.InitializeComponent();
    12. }
    13. private void button1_Click(object sender, EventArgs e)
    14. {
    15. Process.Start(new ProcessStartInfo(Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\osk.exe"));
    16. }
    17. private void button2_Click(object sender, EventArgs e)
    18. {
    19. string path;
    20. if (Environment.Is64BitOperatingSystem)
    21. {
    22. path = Path.Combine(Directory.GetDirectories(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "winsxs"), "amd64_microsoft-windows-osk_*")[0], "osk.exe");
    23. }
    24. else
    25. {
    26. path = @"C:\windows\system32\osk.exe";
    27. }
    28. if (File.Exists(path))
    29. {
    30. Process.Start(path);
    31. }
    32. }
    33. }
    34. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke mal wieder für eure Hilfe. Unter Widows 7 kann die OSK ganz normal aufgerufen werden, ohne das Recht-Problem. Nur Win10 macht da Zicken. Ich schaue mir das Testprogramm nacher mal an. Hänge im Moment ein wenig weil mein Programm abgeschmiert ist und ich gerade versuche es wieder zu beleben.
    Man(n) kann auch ohne Hunde leben, aber es lohnt nicht (Heinz Rühmann)

    Skino schrieb:

    weil mein Programm abgeschmiert
    Dann solltest Du regelmäßig ein Backup machen.
    Schau Dir mal den SolutionExplorer vom @ErfinderDesRades an:
    SolutionExplorer - OpenSource
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Skino Unter Win10-64 funktioniert dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim path As String
    3. If (Environment.Is64BitOperatingSystem) Then
    4. path = IO.Path.Combine(Directory.GetDirectories(IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "winsxs"), "amd64_microsoft-windows-osk_*")(0), "osk.exe")
    5. Else
    6. path = "C:\windows\system32\osk.exe"
    7. End If
    8. If (File.Exists(path)) Then
    9. Process.Start(path)
    10. End If
    11. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das Problem ist, dass man mit einem 32 Bit VB-Code nur unter 32 Bit Windows 10 die osk.exe aufrufen kann. Läuft ein 32 Bit Code auf einem 64 Bit Windows 10, dann lässt sich die OSK.exe nicht aufrufen. Da ich 32 Bit VB-Code verwenden muss (wegen diverser externer Komponenten), bin ich auf eine Freeware-Tastatur umgestiegen, die ich dann alternativ starten kann.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com