Reputation: 924
I am using this code below to call On-Screen Keyboard(OSK)
Process.Start("C:\Windows\System32\OSK.EXE")
but as you can see below I got an error. But if I manually open it, it's working fine.
And it is possible to call the OSK but only numeric display (0 - 9)
Upvotes: 1
Views: 14365
Reputation: 31
Declare Function Wow64DisableWow64FsRedirection Lib "kernel32" (ByRef oldvalue As Long) As Boolean
Declare Function Wow64EnableWow64FsRedirection Lib "kernel32" (ByRef oldvalue As Long) As Boolean
Private osk As String = "C:\Windows\System32\osk.exe"
Private pOSK As Process = Nothing
Public Sub Keyboard_Show()
'An instance is running => Dan wordt pOSK het bestaande proces
For Each pkiller As Process In Process.GetProcesses
If String.Compare(pkiller.ProcessName, "osk", True) = 0 Then pOSK = pkiller
Next
'If no instance of OSK is running than create one depending on 32/64 bit
For Each pkiller As Process In Process.GetProcesses
If Not (String.Compare(pkiller.ProcessName, "osk", True) = 0) And (pOSK Is Nothing) Then
Dim old As Long
If Environment.Is64BitOperatingSystem Then
'64 Bit
If Wow64DisableWow64FsRedirection(old) Then
pOSK = Process.Start(osk)
Wow64EnableWow64FsRedirection(old)
End If
Else
'32 Bit
pOSK = Process.Start(osk)
End If
Exit For
End If
Next
End Sub
'-------------------------------------------------
'--- Hide On Screen Keypad mbv process threads ---
'--- 05-07-2018 ---
'-------------------------------------------------
Public Sub Keyboard_Hide()
For Each pkiller As Process In Process.GetProcesses
If String.Compare(pkiller.ProcessName, "osk", True) = 0 And Not (pOSK Is Nothing) Then
' Terminate process
pOSK.Kill()
Exit For
End If
Next
'Wait untill proces is really terminated
For intStap As Integer = 1 To 10
For Each pkiller As Process In Process.GetProcesses
If String.Compare(pkiller.ProcessName, "osk", True) = 0 Then
Thread.Sleep(1000)
Else
pOSK = Nothing
Exit For
End If
Next
Next intStap
End Sub
Upvotes: 3
Reputation: 21
Private oskProcess As Process
Private Sub openButton_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles openButton.Click
If Me.oskProcess Is Nothing Then
If Me.oskProcess IsNot Nothing AndAlso Me.oskProcess.HasExited Then
Me.oskProcess.Close()
End If
Me.oskProcess = Process.Start("osk")
End If
End Sub
Upvotes: 0
Reputation: 61
Public Class Form1
Declare Function Wow64DisableWow64FsRedirection Lib "kernel32" (ByRef oldvalue As Long) As Boolean
Declare Function Wow64EnableWow64FsRedirection Lib "kernel32" (ByRef oldvalue As Long) As Boolean
Private osk As String = "C:\Windows\System32\osk.exe"
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim old As Long
If Environment.Is64BitOperatingSystem Then
If Wow64DisableWow64FsRedirection(old) Then
Process.Start(osk)
Wow64EnableWow64FsRedirection(old)
End If
Else
Process.Start(osk)
End If
End Sub
End Class
Upvotes: 6