您的位置:首页>动态>欧洲杯 >内容

沙特阿拉伯vs墨西哥胜平负预测分析 (关于沙特阿拉伯vs墨西哥胜平负预测分析 简介)

2022-11-18 14:45:19来源:欧洲杯
导读沙特阿拉伯vs墨西哥胜平负预测分析 是一款非常方便笔记本电脑键盘功能禁用脚本,支持开启禁用笔记本键盘,需要右键以管理员身份运行此程序,...

沙特阿拉伯vs墨西哥胜平负预测分析 是一款非常方便笔记本电脑键盘功能禁用脚本,支持开启禁用笔记本键盘,需要右键以管理员身份运行此程序,运行后重新启动计算机!您还在为老是误触而烦恼吗?

之所以写这个程序,是因为宿舍桌子太小。有时把外接键盘叠在笔记本键盘上,容易误触到笔记本键盘,从而导致一些莫名其妙的问题困扰自己。

于是找了些资料了解到了如何禁用笔记本键盘的方法:

+ 禁用设备法。详细教程请点击 [这里](https://jingyan.baidu.com/article/77b8dc7fb9aa336175eab674.html)

+ 修改注册表法。详细教程请点击 [这里](https://.52pojie.cn/thread-1445700-1-2.html)

可能会有人问:为什么不省事点选用禁用设备法,而是写代码再来操作注册表,来禁用键盘这么麻烦的方法呢?原因很简单,突然对编程语言操作注册表很感兴趣,就这么做了。

注册表结构类似文件目录:分为根键、子键和键值项三部分,与文件目录对应的话就是根目录、子目录和文件。简单介绍一下这三部分:

(1)根键

分为5个:HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG

(2)子键

可以有多个子键和键值项,就像一个目录中可以有多个子目录和多个文件一样。

(3)键值项

**可以理解为文件,它由三部分组成,分别为 :名称、类型、数据。其中类型主要有:REG_BINARY                                       二进制数据REG_DWORD                                       32位双字节数据REG_SZ                                                  以0结尾的字符串REG_DWORD_BIG_ENDIAN              高位排在底位的双字REG_EXPAND_SZ                                扩展字符串,可以加入变量如%PATH%REG_LINK UNICODE                          符号链接REG_RESOURCE_LIST                        设备驱动程序资源列表REG_MULTI_SZ                                   多字符串注册表数据项的数据类型有8种,最常用的是前3种。

操作注册表的几个API函数

需要头文件:atlbase.h

(1)打开一个键

(2)查询某一个键值

(3)设置一个键值

(4)新建指定键

(5)删除注册表指定键下的值

删除注册表项

RegDeleteKey 也可用来删除一个键值。在 Win 95/98 平台下,也可用来删除整个子键和键值。但是在Windows NT/2000平台下,只能用来删除没有子键的键。

工具需要以管理员方式启动

+由于修改注册表后,需要重启电脑后才能生效。所以代码中加入了询问“是否立刻重启”的语句

#include

#include

#include

using namespace std;

void write_dword();

//测试成功,读取到start的当前值//读取操作表,其类型为DWORD

void read_dword(){

    HKEY hKEY;//定义有关的键,在查询结束时关闭

    //打开与路径data_Set相关的hKEY

    char i,x;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt);

    //访问注册表,hKEY则保存此函数所打开的键的句柄

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_READ, &hKEY)){

        DWORD dwValue;//长整型数据,如果是字符串数据用char数组

        DWORD dwSize = sizeof(DWORD);

        DWORD dwType = REG_DWORD;

        if (::RegQueryValueEx(hKEY, _T(Start), 0, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS)

            cout << 错误:无法查询有关的注册表信息 << endl;

        switch (dwValue){

        case 3:

            cout << 当前笔记本键盘状态为:启用 << ( << hex << dwValue << ) << endl << endl << 若需要禁用请输入字母:y或Y << endl;

            cin >>i;

            if (i == 'y'|| i == 'Y') {

                write_dword();

            }

            break;

        case 4:

            cout << 当前笔记本键盘状态为:禁用 << ( << hex << dwValue << ) << endl << endl << 若需要启用请输入字母:y或Y << endl;

            cin >>x;

            if (x == 'y' || x == 'Y') {

                write_dword();

            }

            break;

        default:

            cout << 当前笔记本键盘状态获取未知 << ( << hex << dwValue << ) << endl << endl;

            break;

        }

    }

    ::RegCloseKey(hKEY);

}

//测试成功,读取到start设备名displayname//读取操作表,其类型为REG_SZ

void read_reg_sz(){

    HKEY hkey;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt);

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_READ, &hkey)){

        char dwValue[256];

        DWORD dwSzType = REG_SZ;

        DWORD dwSize = sizeof(dwValue);

        if (::RegQueryValueEx(hkey, _T(DisplayName), 0, &dwSzType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS){

            cout << 无法查询有关的注册表信息 << endl << endl;

        }

        cout << 当前设备名: << dwValue << endl << endl;

    }

    ::RegCloseKey(hkey);

}

//测试成功,更改(创建)到start键值//在SYSTEM\CurrentControlSet\Services\i8042prt文件夹下读取Start的子键,设置其值为dwValue

void write_dword(){

    HKEY hkey;//定义有关的hkey,在查询结束时要关闭

    HKEY hTempKey;

    char ans;

    int flag;

    DWORD dwValue;

    DWORD dwSize = sizeof(DWORD);

    DWORD dwType = REG_DWORD;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt);

    cout << 请设置当前笔记本键盘状态,输入数字:3,表示开启键盘;输入数字4,表示禁用键盘; << endl;

    cin >>flag;

    switch (flag) {

    case 3:

        dwValue = flag; break;

    case 4:

        dwValue = flag; break;

    default:

        cout << 状态值输入错误 << endl; break;

    }

    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){

        //if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T(解开该段落注释,则可更改为:在SYSTEM\\CurrentControlSet\\Services\\i8042prt下,创建以'该文本内容'为名称的子健,并创建一个名为“Start”的子健,其值为:dwValue), &hTempKey)){

            if (ERROR_SUCCESS != ::RegSetValueEx(hkey, _T(Start), 0, REG_DWORD, (CONST BYTE*) & dwValue, sizeof(DWORD))){

                cout << 写入注册表失败 << endl;

            }

            cout << 修改成功! << endl << 是否立刻重启电脑,使设置立即生效? << endl << 输入y或Y,以立刻重新启动电脑;输入n或N退出程序 << endl;

            cin >>ans;

            if (ans == 'y' || ans == 'Y') {

                cout << 再次确认,要立刻重启电脑吗?\n\n输入y或Y,以立刻重新启动电脑;输入n或N退出程序 << endl;

                cin >>ans;

                if (ans == 'y' || ans == 'Y')

                    system(shutdown -r -t 0);

            }

            else

                exit(1);

        //}

    }

    ::RegCloseKey(hkey);

}

//测试成功,更改(创建)子键test111及其键值项Name到start键值

void write_binary(){

    HKEY hkey;

    HKEY hTempKey;

    BYTE m_name[10];

    memset(m_name, 0, sizeof(m_name));

    m_name[0] = 0xff;

    m_name[1] = 0xac;

    m_name[2] = 0x05;

    m_name[3] = 0x4e;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt);

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){

        if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T(test111), &hTempKey)){

            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T(Name), 0, REG_BINARY, (unsigned char*)m_name, 5)){

                cout << 写入错误 << endl;

            }

        }

    }

    ::RegCloseKey(hkey);

}

//测试成功,更改(创建)子键test111及其键值项Name到start键值

void write_reg_sz(){

    HKEY hkey;

    HKEY hTempKey;

    char m_name_set[256] = China;

    DWORD len = strlen(m_name_set) + 1;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt);

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){

        if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T(test111), &hTempKey)){

            if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T(Name), 0, REG_SZ, (const BYTE*)m_name_set, len)){

                cout << 写入错误 << endl;

            }

        }

    }

    ::RegCloseKey(hkey);

}

//测试成功,将键值项Name删除

void delete_value()

{

    HKEY hkey;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt\\test111);

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey))

    {

        if (ERROR_SUCCESS != ::RegDeleteValue(hkey, _T(Name)))

        {

            cout << 删除错误 << endl;

        }

    }

    ::RegCloseKey(hkey);

}

//测试成功,将子键test111删除

void delete_key(){

    HKEY hkey;

    LPCTSTR data_set = _T(SYSTEM\\CurrentControlSet\\Services\\i8042prt);

    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){

        if (ERROR_SUCCESS != ::RegDeleteKey(hkey, test111)){

            cout << 删除错误 << endl;

        }

    }

    ::RegCloseKey(hkey);

}

void menu(){

    cout << 欢迎使用本工具 << endl << endl;

    read_reg_sz();

    cout << endl << 已为您查询到该笔记本当前键盘状态为: ;

    read_dword();

}

int main(){

    menu();

    system(pause);

    return 0;

}

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章