// TouchPadSettings.cpp : Defines the entry point for the console application.
// by windviki 2010/08/31
// 转载请注明出处。
//
// 办公用的戴尔笔记本除了触摸板,还在键盘中间有一个指点杆(point stick)
// 打字很不习惯,经常会碰到。于是想禁用掉这个指点杆。发现自带的设置软件需要.Net4环境支持。
// 折腾完之后成功禁用。但是很郁闷的发现设置无法保存,重启之后指点杆又启用了。
// 于是祭起windbg,得到一些参数值,写了一个小程序来实现快速禁用或者开启触摸板/指点杆。设为开机启动便解决了这个问题。
// 以下提供两种方法。第一种是直接用deviceiocontrol进行操作,第二种是调用其设置所用的dll导出的函数。
// 至于官方控制程序无法保存设置的问题,现在发现可能是系统启动的时候没有正确的从注册表里面读取设置并应用到设备上所致。
// 能否直接修改官方程序,留待后面有空研究。

#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的导出函数
    // 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笔记本的触摸板和指点杆相关推荐

  1. 禁用戴尔inspiron 5447的触摸板

    关于禁用戴尔Inspiron 5447的触摸板. 原因:在敲代码时,手会不小心碰到触摸板,将鼠标箭头定位在其他地方,影响编程. 解决方案:重新更新了dell touchpad 驱动. 1.进入控制面板 ...

  2. vostro3470装win7_戴尔Latitude 3470笔记本win10怎么改win7系统

    [文章导读]戴尔Latitude 3470是一款14英寸商用笔记本,该机型采用 Intel 酷睿第六代处理器.默认预装了win10系统,很多用户不喜欢win10系统,打算安装win7系统,但是预装wi ...

  3. dell笔记本c语言系统,戴尔Latitude 5280笔记本如何将自带win10改成win7

    [文章导读]戴尔Latitude 5280是一款12.5英寸笔记本,该机型采用 Intel 酷睿第七代处理器.默认预装了windows10系统,很多用户不喜欢win10系统,打算安装win7系统,但是 ...

  4. DELL戴尔笔记本关闭触摸板触控板WIN10

    DELL戴尔笔记本关闭触摸板触控板WIN10 听语音 原创 | 浏览:5728 | 更新:2017-03-05 17:33 1 2 3 4 分步阅读 WIN10系统,控制面版还没有触摸板选项,DELL ...

  5. 戴尔7400服务器要安装系统,戴尔latitude 7400笔记本使用雨林木风u盘安装win7系统教程?...

    戴尔latitude 7400笔记本使用雨林木风u盘安装win7系统教程? 戴尔latitude 7400笔记本是一款拥有着14英寸显示屏的商务型办公笔记本电脑,其采用了intel第八代酷睿i5处理器 ...

  6. 戴尔Latitude 3420/3520进入PE看不到硬盘/设置PE启动

    戴尔Latitude 3420/3520进入PE看不到硬盘/设置PE启动 公司今天新买了一台戴尔3420笔记本电脑用于交付项目使用,win11家庭版系统不适合项目使用想改成win10专业版,进入PE后 ...

  7. dell最新计算机如何U盘引导,戴尔latitude 3301怎么u盘启动 latitude 3301设置u盘启动方法...

    我们在使用电脑的过程当中,经常都会遇到各种各样的问题,有时候碰到无法解决的问题,一般都会选择重装系统来解决问题,最近有位电脑用户使用电脑的时候,想要使用bios设置u盘启动,但是却不知道怎么操作,为此 ...

  8. 戴尔微型计算机如何拆,可靠、专业、智能,戴尔Latitude 7320二合一笔记本体验...

    前不久,戴尔推出了全新的Latitude系列商用笔记本电脑,其中Latitude 7000系列高端商用本也迎来了产品型号上的更新-从上一代的Latitude 7310系列升级到现在的Latitude ...

  9. OpenCore引导安装戴尔-G7笔记本黑苹果之历程

    关键字:OpenCore:OC:戴尔:Dell:G7:黑苹果 OpenCore引导安装戴尔-G7笔记本黑苹果之历程 前言 戴尔-G7笔记本先前用Clover引导黑苹果,基本完美.今年年初看见OpenC ...

最新文章

  1. 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。
  2. 图解粒子群优化算法(PSO)
  3. Bitcoin 中的挖矿算法(6) 难度调整
  4. Android开发中的logcat工具使用方法
  5. 【java】docker容器内使用jstack等命令报错 The VM does not support the attach mechanism
  6. 西瓜书《贝叶斯》朴素贝叶斯公式推导
  7. Go VSCode配置编译task
  8. ElasticSearch - 嵌套对象 nested
  9. Macbook 终端命令使用sudo时改用指纹解锁
  10. C++学习(四九二)cmake file的GLOB和GLOB_RECURSE
  11. 手机连接USB通过宽带免费上网
  12. SLA是什么意思 ?
  13. CTF-数据分析(二)
  14. sdkman的介绍、安装及使用
  15. 基于SpringBoot的影视/短视频网站系统
  16. JavaDoc文档生成
  17. 非关系型数据库NoSQL的崛起
  18. Android WebView(一) WebView详解
  19. 正则表达式:检测密码由6-21字母和数字组成
  20. ios底部栏设计规范_设计干货:底部导航栏规范设计总结

热门文章

  1. Java垃圾回收之新生代垃圾收集器
  2. python3+ 解决写入中文乱码的问题
  3. curl模拟post请求
  4. listary 指定目录搜索_everything
  5. Python ljust()方法
  6. 合肥工业大学—SQL Server数据库实验七:数据查询
  7. 在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库
  8. 2020年人工智能汽车将出台多项标准
  9. [JAVA EE] Filter过滤器
  10. cs嵌html5页面,在.cs c#.net中包含HTML页面