快速设置戴尔latitude笔记本的触摸板和指点杆
生活随笔
收集整理的這篇文章主要介紹了
快速设置戴尔latitude笔记本的触摸板和指点杆
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
// TouchPadSettings.cpp : Defines the entry point for the console application.
// by windviki 2010/08/31// 轉載請注明出處。//// 辦公用的戴爾筆記本除了觸摸板,還在鍵盤中間有一個指點桿(point stick)// 打字很不習慣,經(jīng)常會碰到。于是想禁用掉這個指點桿。發(fā)現(xiàn)自帶的設置軟件需要.Net4環(huán)境支持。// 折騰完之后成功禁用。但是很郁悶的發(fā)現(xiàn)設置無法保存,重啟之后指點桿又啟用了。// 于是祭起windbg,得到一些參數(shù)值,寫了一個小程序來實現(xiàn)快速禁用或者開啟觸摸板/指點桿。設為開機啟動便解決了這個問題。// 以下提供兩種方法。第一種是直接用deviceiocontrol進行操作,第二種是調用其設置所用的dll導出的函數(shù)。// 至于官方控制程序無法保存設置的問題,現(xiàn)在發(fā)現(xiàn)可能是系統(tǒng)啟動的時候沒有正確的從注冊表里面讀取設置并應用到設備上所致。// 能否直接修改官方程序,留待后面有空研究。
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
????//直接和驅動通信
????HANDLE hApfilter = ::CreateFile(
????????_T("\\\\.\\Apfiltr"), //設備名
????????GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,?
????????NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
????if (hApfilter == INVALID_HANDLE_VALUE)
????{
????????DWORD dwErr = ::GetLastError();
????????return -1;
????}
????// 111111
????// 123456
????// 1:touchpad buttons enable?
????// 2,6:touchpad enable?
????// 3:stick buttons enable?
????// 4,5:stick enable
????//char szInput[6] = {0x00, 0x00, 0x28, 0x00, 0x00, 0x00/*, 0x20, 0x00*/}; //全禁
????//char szInput[6] = {0x00, 0x00, 0x3f, 0x00, 0x00, 0x00/*, 0x15, 0x00*/}; //全開
????char szInput[6] = {0x00, 0x00, 0x28, 0x00, 0x00, 0x00};
????char szOutput[2] = {0};
????DWORD dwReturned = 0;
????if(!DeviceIoControl(hApfilter, 0xd82625b8, szInput, 6, szOutput, 2, &dwReturned, NULL))
????{
????????//
????}
????::CloseHandle(hApfilter);
????return 0;
????//--------------------------------------------------------------------------------------------------------------------------------
????//依靠Vxdif.dll的導出函數(shù)
????// export functions
????typedef DWORD (__stdcall *IOCTL_DisableTouchpad)(INT dwDevSelect);
????typedef DWORD (__stdcall *IOCTL_EnableWheel)(USHORT Param1);
????typedef DWORD (__stdcall *IOCTL_GetDeviceID)(DWORD hWnd, INT& dwDeviceID, INT nBuffSize);
????typedef DWORD (__stdcall *IOCTL_GetDeviceType)(DWORD hWnd, INT& dwDeviceType, INT nBuffSize);
????typedef DWORD (__stdcall *IOCTL_SelectDevice)(INT dwDevSelect);
????typedef DWORD (__stdcall *IOCTL_SetButtonEventMask)(INT dwDevSelect);
????typedef DWORD (__stdcall *IOCTL_SetButtonFunction)(DWORD hWnd, INT Param2);
????typedef DWORD (__stdcall *IOCTL_SetCornerTapOffset)(DWORD hWnd, USHORT Param2, USHORT Param3);
????typedef DWORD (__stdcall *IOCTL_SetSpeed)(DWORD hWnd, INT Param2, INT Param3);
????typedef DWORD (__stdcall *IOCTL_SetSPHwTapping)(INT Param1);
????typedef DWORD (__stdcall *IOCTL_SetSPTapSettings)(INT Param1);
????typedef DWORD (__stdcall *IOCTL_SetTapSettings)(DWORD hWnd, BYTE Param2);
????typedef DWORD (__stdcall *IOCTL_SetTouchSensitivity)(INT Param1);
????typedef DWORD (__stdcall *IOCTL_Tapping)(DWORD hWnd, INT Param2);
????HINSTANCE hVxDif = ::LoadLibrary(_T("Vxdif.dll"));
????IOCTL_DisableTouchpad pfIOCTL_DisableTouchpad = (IOCTL_DisableTouchpad)GetProcAddress(hVxDif, "IOCTL_DisableTouchpad");
????IOCTL_EnableWheel pfIOCTL_EnableWheel = (IOCTL_EnableWheel)GetProcAddress(hVxDif, "IOCTL_EnableWheel");
????IOCTL_GetDeviceID pfIOCTL_GetDeviceID = (IOCTL_GetDeviceID)GetProcAddress(hVxDif, "IOCTL_GetDeviceID");
????IOCTL_GetDeviceType pfIOCTL_GetDeviceType = (IOCTL_GetDeviceType)GetProcAddress(hVxDif, "IOCTL_GetDeviceType");
????IOCTL_SelectDevice pfIOCTL_SelectDevice = (IOCTL_SelectDevice)GetProcAddress(hVxDif, "IOCTL_SelectDevice");
????IOCTL_SetButtonEventMask pfIOCTL_SetButtonEventMask = (IOCTL_SetButtonEventMask)GetProcAddress(hVxDif, "IOCTL_SetButtonEventMask");
????IOCTL_SetButtonFunction pfIOCTL_SetButtonFunction = (IOCTL_SetButtonFunction)GetProcAddress(hVxDif, "IOCTL_SetButtonFunction");
????IOCTL_SetCornerTapOffset pfIOCTL_SetCornerTapOffset = (IOCTL_SetCornerTapOffset)GetProcAddress(hVxDif, "IOCTL_SetCornerTapOffset");
????IOCTL_SetSpeed pfIOCTL_SetSpeed = (IOCTL_SetSpeed)GetProcAddress(hVxDif, "IOCTL_SetSpeed");
????IOCTL_SetSPHwTapping pfIOCTL_SetSPHwTapping = (IOCTL_SetSPHwTapping)GetProcAddress(hVxDif, "IOCTL_SetSPHwTapping");
????IOCTL_SetSPTapSettings pfIOCTL_SetSPTapSettings = (IOCTL_SetSPTapSettings)GetProcAddress(hVxDif, "IOCTL_SetSPTapSettings");
????IOCTL_SetTapSettings pfIOCTL_SetTapSettings = (IOCTL_SetTapSettings)GetProcAddress(hVxDif, "IOCTL_SetTapSettings");
????IOCTL_SetTouchSensitivity pfIOCTL_SetTouchSensitivity = (IOCTL_SetTouchSensitivity)GetProcAddress(hVxDif, "IOCTL_SetTouchSensitivity");
????IOCTL_Tapping pfIOCTL_Tapping = (IOCTL_Tapping)GetProcAddress(hVxDif, "IOCTL_Tapping");
????if (pfIOCTL_SelectDevice)
????{
????????pfIOCTL_SelectDevice(0x3f); //全開
????????//pfIOCTL_SelectDevice(0x28); //全禁止
????}
????::FreeLibrary(hVxDif);
????return 0;
}
Published by Wiz
// by windviki 2010/08/31// 轉載請注明出處。//// 辦公用的戴爾筆記本除了觸摸板,還在鍵盤中間有一個指點桿(point stick)// 打字很不習慣,經(jīng)常會碰到。于是想禁用掉這個指點桿。發(fā)現(xiàn)自帶的設置軟件需要.Net4環(huán)境支持。// 折騰完之后成功禁用。但是很郁悶的發(fā)現(xiàn)設置無法保存,重啟之后指點桿又啟用了。// 于是祭起windbg,得到一些參數(shù)值,寫了一個小程序來實現(xiàn)快速禁用或者開啟觸摸板/指點桿。設為開機啟動便解決了這個問題。// 以下提供兩種方法。第一種是直接用deviceiocontrol進行操作,第二種是調用其設置所用的dll導出的函數(shù)。// 至于官方控制程序無法保存設置的問題,現(xiàn)在發(fā)現(xiàn)可能是系統(tǒng)啟動的時候沒有正確的從注冊表里面讀取設置并應用到設備上所致。// 能否直接修改官方程序,留待后面有空研究。
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
????//直接和驅動通信
????HANDLE hApfilter = ::CreateFile(
????????_T("\\\\.\\Apfiltr"), //設備名
????????GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,?
????????NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
????if (hApfilter == INVALID_HANDLE_VALUE)
????{
????????DWORD dwErr = ::GetLastError();
????????return -1;
????}
????// 111111
????// 123456
????// 1:touchpad buttons enable?
????// 2,6:touchpad enable?
????// 3:stick buttons enable?
????// 4,5:stick enable
????//char szInput[6] = {0x00, 0x00, 0x28, 0x00, 0x00, 0x00/*, 0x20, 0x00*/}; //全禁
????//char szInput[6] = {0x00, 0x00, 0x3f, 0x00, 0x00, 0x00/*, 0x15, 0x00*/}; //全開
????char szInput[6] = {0x00, 0x00, 0x28, 0x00, 0x00, 0x00};
????char szOutput[2] = {0};
????DWORD dwReturned = 0;
????if(!DeviceIoControl(hApfilter, 0xd82625b8, szInput, 6, szOutput, 2, &dwReturned, NULL))
????{
????????//
????}
????::CloseHandle(hApfilter);
????return 0;
????//--------------------------------------------------------------------------------------------------------------------------------
????//依靠Vxdif.dll的導出函數(shù)
????// export functions
????typedef DWORD (__stdcall *IOCTL_DisableTouchpad)(INT dwDevSelect);
????typedef DWORD (__stdcall *IOCTL_EnableWheel)(USHORT Param1);
????typedef DWORD (__stdcall *IOCTL_GetDeviceID)(DWORD hWnd, INT& dwDeviceID, INT nBuffSize);
????typedef DWORD (__stdcall *IOCTL_GetDeviceType)(DWORD hWnd, INT& dwDeviceType, INT nBuffSize);
????typedef DWORD (__stdcall *IOCTL_SelectDevice)(INT dwDevSelect);
????typedef DWORD (__stdcall *IOCTL_SetButtonEventMask)(INT dwDevSelect);
????typedef DWORD (__stdcall *IOCTL_SetButtonFunction)(DWORD hWnd, INT Param2);
????typedef DWORD (__stdcall *IOCTL_SetCornerTapOffset)(DWORD hWnd, USHORT Param2, USHORT Param3);
????typedef DWORD (__stdcall *IOCTL_SetSpeed)(DWORD hWnd, INT Param2, INT Param3);
????typedef DWORD (__stdcall *IOCTL_SetSPHwTapping)(INT Param1);
????typedef DWORD (__stdcall *IOCTL_SetSPTapSettings)(INT Param1);
????typedef DWORD (__stdcall *IOCTL_SetTapSettings)(DWORD hWnd, BYTE Param2);
????typedef DWORD (__stdcall *IOCTL_SetTouchSensitivity)(INT Param1);
????typedef DWORD (__stdcall *IOCTL_Tapping)(DWORD hWnd, INT Param2);
????HINSTANCE hVxDif = ::LoadLibrary(_T("Vxdif.dll"));
????IOCTL_DisableTouchpad pfIOCTL_DisableTouchpad = (IOCTL_DisableTouchpad)GetProcAddress(hVxDif, "IOCTL_DisableTouchpad");
????IOCTL_EnableWheel pfIOCTL_EnableWheel = (IOCTL_EnableWheel)GetProcAddress(hVxDif, "IOCTL_EnableWheel");
????IOCTL_GetDeviceID pfIOCTL_GetDeviceID = (IOCTL_GetDeviceID)GetProcAddress(hVxDif, "IOCTL_GetDeviceID");
????IOCTL_GetDeviceType pfIOCTL_GetDeviceType = (IOCTL_GetDeviceType)GetProcAddress(hVxDif, "IOCTL_GetDeviceType");
????IOCTL_SelectDevice pfIOCTL_SelectDevice = (IOCTL_SelectDevice)GetProcAddress(hVxDif, "IOCTL_SelectDevice");
????IOCTL_SetButtonEventMask pfIOCTL_SetButtonEventMask = (IOCTL_SetButtonEventMask)GetProcAddress(hVxDif, "IOCTL_SetButtonEventMask");
????IOCTL_SetButtonFunction pfIOCTL_SetButtonFunction = (IOCTL_SetButtonFunction)GetProcAddress(hVxDif, "IOCTL_SetButtonFunction");
????IOCTL_SetCornerTapOffset pfIOCTL_SetCornerTapOffset = (IOCTL_SetCornerTapOffset)GetProcAddress(hVxDif, "IOCTL_SetCornerTapOffset");
????IOCTL_SetSpeed pfIOCTL_SetSpeed = (IOCTL_SetSpeed)GetProcAddress(hVxDif, "IOCTL_SetSpeed");
????IOCTL_SetSPHwTapping pfIOCTL_SetSPHwTapping = (IOCTL_SetSPHwTapping)GetProcAddress(hVxDif, "IOCTL_SetSPHwTapping");
????IOCTL_SetSPTapSettings pfIOCTL_SetSPTapSettings = (IOCTL_SetSPTapSettings)GetProcAddress(hVxDif, "IOCTL_SetSPTapSettings");
????IOCTL_SetTapSettings pfIOCTL_SetTapSettings = (IOCTL_SetTapSettings)GetProcAddress(hVxDif, "IOCTL_SetTapSettings");
????IOCTL_SetTouchSensitivity pfIOCTL_SetTouchSensitivity = (IOCTL_SetTouchSensitivity)GetProcAddress(hVxDif, "IOCTL_SetTouchSensitivity");
????IOCTL_Tapping pfIOCTL_Tapping = (IOCTL_Tapping)GetProcAddress(hVxDif, "IOCTL_Tapping");
????if (pfIOCTL_SelectDevice)
????{
????????pfIOCTL_SelectDevice(0x3f); //全開
????????//pfIOCTL_SelectDevice(0x28); //全禁止
????}
????::FreeLibrary(hVxDif);
????return 0;
}
Published by Wiz
轉載于:https://www.cnblogs.com/windviki/archive/2011/08/31/2160957.html
總結
以上是生活随笔為你收集整理的快速设置戴尔latitude笔记本的触摸板和指点杆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2,000,00是多少钱啊?是2千还是2
- 下一篇: 好听霸气的狗名字大全