i tried the code below to convert it to c#. But i am getting many errors when i use it.
Like error related to || and && symbols using in c# version.
can any one help me to convert to perfect c# code ?? Thanks.
Option Explicit On
Option Strict On
Imports Microsoft.Win32
Imports System.Runtime.InteropServices
Public Class Kiosk
Implements IDisposable
#Region "IDisposable"
'' Implementing IDisposable since it might be possible for
'' someone to forget to cause the unhook to occur. I didn''t really
'' see any problems with this in testing, but since the SDK says
'' you should do it, then here''s a way to make sure it will happen.
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
If disposing Then
'' Free other state (managed objects).
End If
If m_hookHandle <> 0 Then
UnhookWindowsHookEx(m_hookHandle)
m_hookHandle = 0
End If
If m_taskManagerValue > -1 Then
EnableTaskManager()
End If
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
End Sub
#End Region
Shared Sub main()
End Sub
Private Delegate Function LowLevelHookDelegate(ByVal code As Integer, ByVal wParam As Integer, ByRef lParam As KeyboardLowLevelHookStruct) As Integer
Private Const Hc_Action As Integer = 0
Private Const WindowsHookKeyboardLowLevel As Integer = 13
Private Const LowLevelKeyboardHfAltDown As Integer = &H20
Private Enum WindowsMessage
KeyDown = &H100
KeyUp = &H101
SystemKeyDown = &H104
SystemKeyUp = &H105
End Enum
Private Enum Vk
Tab = &H9
Escape = &H1B
Shift = &H10
Control = &H11
Menu = &H12 '' ALT key.
Alt = &H12
Pause = &H13
LeftWindows = &H5B '' Left Windows key (Microsoft® Natural® keyboard).
RightWindows = &H5C '' Right Windows key (Natural keyboard).
Applications = &H5D '' Applications key (Natural keyboard).
End Enum
Private Structure KeyboardLowLevelHookStruct
Public VirtualKeyCode As Integer
Public ScanCode As Integer
Public Flags As Integer
Public Time As Integer
Public ExtraInfo As UInt32
End Structure
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal hook As Integer, ByVal address As LowLevelHookDelegate, ByVal [mod] As Integer, ByVal threadId As Integer) As Integer
Private Declare Function CallNextHookEx Lib "user32" (ByVal handle As Integer, ByVal code As Integer, ByVal wParam As Integer, ByVal lParam As KeyboardLowLevelHookStruct) As Integer
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal handle As Integer) As Integer
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal virtualKey As Integer) As Integer
Private m_hookHandle As Integer
Private Function LowLevelHook(ByVal code As Integer, ByVal wParam As Integer, ByRef lParam As KeyboardLowLevelHookStruct) As Integer
If code = Hc_Action Then
If (wParam = WindowsMessage.KeyDown) OrElse _
(wParam = WindowsMessage.SystemKeyDown) OrElse _
(wParam = WindowsMessage.KeyUp) OrElse _
(wParam = WindowsMessage.SystemKeyUp) Then
''Dim alt As Boolean = (GetAsyncKeyState(Vk.Alt) And &H8000) = &H8000
''Dim shift As Boolean = (GetAsyncKeyState(Vk.Shift) And &H8000) = &H8000
Dim control As Boolean = (GetAsyncKeyState(Vk.Control) And &H8000) = &H8000
Dim suppress As Boolean
'' CTRL+ESC
If control AndAlso lParam.VirtualKeyCode = Vk.Escape Then
suppress = True
End If
'' ALT+TAB
If (lParam.Flags And LowLevelKeyboardHfAltDown) = LowLevelKeyboardHfAltDown AndAlso lParam.VirtualKeyCode = Vk.Tab Then
suppress = True
End If
'' ALT+ESC
If (lParam.Flags And LowLevelKeyboardHfAltDown) = LowLevelKeyboardHfAltDown AndAlso lParam.VirtualKeyCode = Vk.Escape Then
suppress = True
End If
'' Left Windows button.
If lParam.VirtualKeyCode = Vk.LeftWindows Then
suppress = True
MessageBox.Show("Pressed Left windows key")
End If
'' Right Windows button.
If lParam.VirtualKeyCode = Vk.RightWindows Then
suppress = True
MessageBox.Show("Pressed Right windows key")
End If
'' Applications button.
If lParam.VirtualKeyCode = Vk.Applications Then
suppress = True
End If
If suppress Then
Return 1
End If
End If
Return CallNextHookEx(m_hookHandle, code, wParam, lParam)
End If
End Function
Public Sub Disable()
If m_hookHandle = 0 Then
m_hookHandle = SetWindowsHookEx(WindowsHookKeyboardLowLevel, AddressOf LowLevelHook, Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
End If
End Sub
Public Sub Enable()
If m_hookHandle <> 0 Then
UnhookWindowsHookEx(m_hookHandle)
m_hookHandle = 0
End If
End Sub
End Class
First, the provided code will not compile because of it calling a method EnableTaskManager() that does not exists in the example code. But just to go around that problem, I changed it to call the Enable-function that DOES exist in the example.
The provided code did also use a variable that was not declared anywhere in the code: m_taskManagerValue, to get around that I declaraed that as an int=0 in my example.
Also, the function LowLevelHook did not return a value on one codepath so I just added so it returned 0 in that case (I dont know what it suppose to return there)
And finally, C# didn’t like the sub Finally with the dispose so I just deleted it. 😉
Well. After that fixed I converted the code to C# here http://www.developerfusion.com/tools/convert/vb-to-csharp/
I fixed the errors where it complained about comparing a int with a non-int by ctype the value to int.
And then I compiled the vb-version and looked in it with reflection to get the SetWindowHookEx-row to work.
And voila, this will compile: