Ever since I threw this dll together its been bugging me that there wasn’t a native solution in Xojo without using an external DLL, so here you go:
https://www.dropbox.com/s/uzw7qutc5iceten/DisableTouchWhenFullscreen.xojo_binary_project?dl=1
This took me quite a while to figure out, William’s post was crucial in helping me get it working, thanks William.
Next up, playing around with Toast Notifications.
Here’s a copy of the meat and potatoes of the routine (for future search hits).
[code]Public Function DisableTouchWhenFullscreen(Handle As Integer, State As Boolean) as Integer
'Declares made with - https://blog./2017/01/22/windows-to-xojo-data-type-conversion/
'Thanks to William and his post for inspiration - How to Recursively Delete a Folder – Xojo Programming Blog
Dim result As Integer
'http://referencesource.microsoft.com/#PresentationFramework/src/Framework/MS/Internal/AppModel/ComGuids.cs,26
Dim IID_IPropertyStore As MemoryBlock = COM.IIDFromString("{886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99}")
'https://msdn.microsoft.com/en-us/library/windows/desktop/ms678505(v=vs.85).aspx
Const COINIT_APARTMENTTHREADED = &h2
Const COINIT_MULTITHREADED = &h0
Const COINIT_DISABLE_OLE1DDE = &h4
Const COINIT_SPEED_OVER_MEMORY = &h8
'https://msdn.microsoft.com/en-us/library/windows/desktop/ff485842(v=vs.85).aspx
Const S_OK = &h0
Const S_FALSE = &h1
'http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/NativeMethods.cs,6744d905b2436994
Const RPC_E_CHANGED_MODE = &h80010106
'https://msdn.microsoft.com/en-us/library/windows/desktop/ms695279(v=vs.85).aspx
Declare Function CoInitializeEx Lib “Ole32” (pvReserved As Ptr, dwCoInit As UInt32) As Integer
Dim CoInit As Integer
CoInit = CoInitializeEx(Nil, COINIT_APARTMENTTHREADED Or COINIT_DISABLE_OLE1DDE)
If Coinit = S_OK Or CoInit = S_FALSE Or (CoInit And RPC_E_CHANGED_MODE) = RPC_E_CHANGED_MODE Then
'https://msdn.microsoft.com/en-us/library/windows/desktop/dd378430(v=vs.85).aspx
Declare Function SHGetPropertyStoreForWindow Lib "Shell32" (hwnd As Integer, riid As Ptr, ByRef ppv As Ptr) As Integer
Dim PropertyStore As Ptr
result = SHGetPropertyStoreForWindow(Handle, IID_IPropertyStore, PropertyStore)
If result = S_OK Then
Dim formatID As MemoryBlock
'https://msdn.microsoft.com/en-us/library/windows/desktop/jj553591(v=vs.85).aspx
formatID = COM.IIDFromString("{32CE38B2-2C9A-41B1-9BC5-B3784394AA44}")
Dim pformatID As Ptr = formatID
'https://msdn.microsoft.com/en-us/library/windows/desktop/bb773381(v=vs.85).aspx
Dim pk As PROPERTYKEY
pk.fmtid = pformatID.GUID
pk.pid = 2
'https://msdn.microsoft.com/en-us/library/windows/desktop/aa380072(v=vs.85).aspx
Dim propvariant As PROPVARIANT_BOOL
propvariant.vt = VT_BOOL
propvariant.boolVal = Com.RBBooleanToVARIANTBOOL(State)
#If Target64Bit
Const sizeOfPtr = 8
#Else
Const sizeOfPtr = 4
#EndIf
'IPropertyStoreVtbl - propsys.h
Dim setValueFunc As New SetValue(PropertyStore.Ptr(0).Ptr(6 * sizeOfPtr))
result = setValueFunc.Invoke(PropertyStore, pk, propvariant)
Dim releaseFunc As New Release(PropertyStore.Ptr(0).Ptr(2 * sizeOfPtr))
Call releaseFunc.Invoke(PropertyStore)
End If
If (CoInit And RPC_E_CHANGED_MODE) <> RPC_E_CHANGED_MODE Then
'https://msdn.microsoft.com/en-us/library/windows/desktop/ms695279(v=vs.85).aspx
Declare Sub CoUninitialize Lib "Ole32" ()
CoUninitialize
End If
End If
Return result
End Function
[/code]