`

win32 访问注册表

阅读更多
BOOL InitTestDlgCtrl(HWND hdlg)
{

#ifdef WIN64X
LRESULT dwPrinterNameIdx;
#else
DWORD dwPrinterNameIdx;
#endif

#ifdef WIN64X
LRESULT dwGroupNameIdx;
#else
DWORD dwGroupNameIdx;
#endif

HKEY hKey;
HKEY subHKey;
HKEY groupKey;
LONG lnStatus;
TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name
DWORD cbName; // size of name string
TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name
DWORD cchClassName = MAX_PATH; // size of class string
DWORD cSubKeys=0; // number of subkeys
DWORD cbMaxSubKey; // longest subkey size
DWORD cchMaxClass; // longest class string
DWORD cValues; // number of values for key
DWORD cchMaxValue; // longest value name
DWORD cbMaxValueData; // longest value data
DWORD cbSecurityDescriptor; // size of security descriptor
FILETIME ftLastWriteTime; // last write time

DWORD i, retCode;
DWORD dwSize; // サイズ

CHAR finalPrinterPath[MAX_PATH] = REG_PRINTERPATH;  // REG_PRINTERPATH
CHAR logicalName[MAX_PATH];
DWORD groupSW;
CHAR groupName[8] = "Group";
CHAR number[3];

/*-----------------------------------------------------------------------*/
/* キーオープン
/*-----------------------------------------------------------------------*/
lnStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, REG_PRINTERPATH, 0, KEY_ALL_ACCESS, &hKey );
// エラーチェック
if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

dwSize = MAX_PATH;

// Get the class name and the value count.
retCode = RegQueryInfoKey(
hKey,                    // key handle
achClass,                // buffer for class name
&cchClassName,           // size of class string
NULL,                    // reserved
&cSubKeys,               // number of subkeys
&cbMaxSubKey,            // longest subkey size
&cchMaxClass,            // longest class string
&cValues,                // number of values for this key
&cchMaxValue,            // longest value name
&cbMaxValueData,         // longest value data
&cbSecurityDescriptor,   // security descriptor
&ftLastWriteTime);       // last write time

if (cSubKeys) {

for ( i=0; i < cSubKeys; i++ )
{
cbName = MAX_KEY_LENGTH;
retCode = RegEnumKeyEx(hKey, i,
achKey,
&cbName,
NULL,
NULL,
NULL,
&ftLastWriteTime);
if (retCode == ERROR_SUCCESS)
{
strcat_s(finalPrinterPath, MAX_PATH , achKey);
PathAddBackslash(finalPrinterPath);

lnStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, finalPrinterPath, 0, KEY_QUERY_VALUE, &subHKey );

if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

lnStatus = RegQueryValueEx( subHKey, REG_LOGICALNAME, NULL, NULL, (LPBYTE)&logicalName, &dwSize );


if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

SendDlgItemMessage(hdlg, IDC_LOGICALNAME, CB_ADDSTRING, 0, (LPARAM)logicalName);
RegCloseKey( subHKey );
memset(finalPrinterPath, 0x00, MAX_PATH);
wsprintf(finalPrinterPath,REG_PRINTERPATH);
}
}

}

RegCloseKey(hKey);

lnStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, REG_PRINTERGROUPPATH, 0, KEY_QUERY_VALUE, &groupKey );

// エラーチェック
if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

lnStatus = RegQueryValueEx( groupKey, REG_GROUPSW, NULL, NULL, (LPBYTE)&groupSW, &dwSize );

// エラーチェック
if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

for( i = 0;i < 32;i++ )
{
DWORD temp = 1;
temp = temp << i;
temp = groupSW & temp;
if(temp != 0){
itoa(i, number, 10);
strcat(groupName, number);
SendDlgItemMessage(hdlg, IDC_COMBO2, CB_ADDSTRING, 0, (LPARAM)groupName);
memset(number, 0x00, 3);
memset(groupName, 0x00,;
wsprintf(groupName,"Group");
}
}

RegCloseKey(groupKey);

if(guiFirstSet == FN2_FAST_ACCSESS){

SendDlgItemMessage( hdlg, IDC_LOGICALNAME, CB_SETCURSEL, 0, 0);
SendDlgItemMessage( hdlg, IDC_COMBO2, CB_SETCURSEL, 0, 0);

dwPrinterNameIdx = SendDlgItemMessage(hdlg, IDC_LOGICALNAME, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(hdlg, IDC_LOGICALNAME, CB_GETLBTEXT, dwPrinterNameIdx, gPrinterName);

dwGroupNameIdx = SendDlgItemMessage(hdlg, IDC_COMBO2, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(hdlg, IDC_COMBO2, CB_GETLBTEXT, dwGroupNameIdx, gPrinterGroup);

gFormPrintFlag = FALSE;
gJobFlag = FALSE;

guiFirstSet = FN2_NOTFAST_ACCSESS;

}else{

SendDlgItemMessage(hdlg, IDC_LOGICALNAME, CB_SELECTSTRING , -1, gPrinterName);
SendDlgItemMessage(hdlg, IDC_COMBO2, CB_SELECTSTRING , -1, gPrinterGroup);

if(gFormPrintFlag) {
SendDlgItemMessage( hdlg, IDC_CHECK1, BM_SETCHECK, BST_CHECKED, 0 );
}else {
SendDlgItemMessage( hdlg, IDC_CHECK1, BM_SETCHECK, BST_UNCHECKED, 0 );
}

if(gJobFlag) {
SendDlgItemMessage( hdlg, IDC_CHECK2, BM_SETCHECK, BST_CHECKED, 0 );
}else {
SendDlgItemMessage( hdlg, IDC_CHECK2, BM_SETCHECK, BST_UNCHECKED, 0 );
}

}


return TRUE;
}

BOOL TestPrint(HWND hdlg)
{
#ifdef WIN64X
LRESULT dwPrinterNameIdx;
#else
DWORD dwPrinterNameIdx;
#endif

#ifdef WIN64X
LRESULT dwGroupNameIdx;
#else
DWORD dwGroupNameIdx;
#endif


HKEY hKey;        // レジストリキーハンドル
LONG     lnStatus;    // ステータス
CHAR     productName[21];
DWORD dwSize;   // サイズ

/*-----------------------------------------------------------------------*/
/* キーオープン
/*-----------------------------------------------------------------------*/
lnStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, REG_PRODUCTNAMEPATH, 0, KEY_QUERY_VALUE, &hKey );
// エラーチェック
if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

dwSize = sizeof( productName );

lnStatus = RegQueryValueEx( hKey, REG_PRODUCTNAME, NULL, NULL, (LPBYTE)&productName, &dwSize );

// エラーチェック
if( lnStatus != ERROR_SUCCESS ){
return( FALSE );
}

dwPrinterNameIdx = SendDlgItemMessage(hdlg, IDC_LOGICALNAME, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(hdlg, IDC_LOGICALNAME, CB_GETLBTEXT, dwPrinterNameIdx, gPrinterName);

dwGroupNameIdx = SendDlgItemMessage(hdlg, IDC_COMBO2, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(hdlg, IDC_COMBO2, CB_GETLBTEXT, dwGroupNameIdx, gPrinterGroup);

if(SendDlgItemMessage( hdlg, IDC_CHECK1, BM_GETCHECK, 0, 0 )){
gFormPrintFlag = TRUE;
}else{
gFormPrintFlag = FALSE;
}

if(SendDlgItemMessage( hdlg, IDC_CHECK2, BM_GETCHECK, 0, 0 )){
gJobFlag = TRUE;
}else{
gJobFlag = FALSE;
}

return TRUE;
}
分享到:
评论

相关推荐

    Win32 API 注册表类的编制以及使用

    通过封装 Win32 API 函数,如 RegOpenKeyEx、RegCloseKey、RegQueryValueEx 和 RegSetValueEx,CMyRegKey 类提供了简洁的接口,使得在程序中访问和修改注册表变得更为便捷。同时,了解注册表在 Windows 操作系统中的...

    win32 API函数注册表监控C#

    4. **C#中的注册表访问**:除了使用Win32 API,C#的`Microsoft.Win32.Registry`类提供了对注册表的简化访问。但为了更底层的监控,我们通常需要结合Win32 API。 5. **DEMO代码分析**:在`RegistryMonitorDemo`和`...

    win8.1字体注册表

    总之,了解和掌握Win8.1字体注册表的运作原理和操作方法,能帮助我们更好地管理和维护系统的字体设置,提升用户体验,并解决可能出现的字体相关问题。但务必小心操作,确保系统的稳定性和安全性。

    JAVA访问WINDOWS注册表

    需要注意的是,访问注册表需要相应的权限,因此在实际应用中需要确保程序有足够的权限运行。 另外,提供的“用Java操作Windows注册表.rar”可能包含了一个完整的示例项目,你可以解压并学习其中的代码,了解如何...

    winsock win10 注册表备份文件

    标题 "winsock win10 注册表备份文件" 指的是在Windows 10操作系统中,对与Winsock相关的注册表键值进行备份的操作。Winsock,全称为Windows Socket,是Windows操作系统中的网络编程接口,它为应用程序提供了一种...

    如何将Win7系统注册表直接锁定以便防止被篡改.docx

    3. 单击"系统",在右边窗口找到"阻止访问注册表编辑工具"项,然后双击打开它。 4. 它的默认状态是"未配置",我们将其选择为"已启用",然后点击"确定"保存。 5. 重启电脑,然后再根据步骤1中去尝试打开Win7注册表,...

    win7注册表优化

    这通常涉及调整虚拟内存设置,以提高处理器对数据的访问速度,从而提高整体系统性能。 4. **关机速度、加快开机速度副值.reg**: 这个文件可能包含设置来减少系统关闭和启动的时间。这可能涉及到优化系统服务、...

    Win7注册表优化适用28例

    ### Win7注册表优化知识点详解 #### 一、概述 在Windows 7操作系统中,注册表扮演着极其重要的角色,它存储了大量的系统设置与应用程序配置信息。合理的注册表优化能够显著提升系统的性能与稳定性,改善用户的使用...

    win7注册表优化集

    首先,关于**安全设置**,注册表优化可能包括禁用不必要服务、防止恶意软件利用注册表漏洞、限制对关键注册表项的访问权限等。例如,可以通过修改注册表键`HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current...

    V4.0 STEP 7 MicroWIN SP9注册表补丁

    导入这个补丁,不再需要安装SP8. 也适用于Win7 64位系统。

    Win2003:应用注册表和文件系统

    - ACLs定义了哪些用户或组可以访问特定的注册表键,并指定了他们可以执行的具体操作(如读取、写入等)。 - 系统管理员可以通过修改注册表项的ACLs来增强安全性。 #### 二、文件系统的应用 1. **文件系统概述**...

    win7库还原注册表

    在Windows 7操作系统中,"库"是一种组织和管理文件...总的来说,"win7库还原注册表"涉及到的是如何通过恢复注册表项来修复Windows 7系统中的库功能。这需要用户对注册表有一定的理解,并且操作时需谨慎,确保数据安全。

    WIN7 获取权限注册表文件

    总的来说,"WIN7 获取权限注册表文件"是针对Windows 7用户在管理权限方面遇到问题的一个解决方案。通过导入注册表文件,用户可以更方便地获取对特定文件夹的管理员权限,而无需深入了解复杂的系统设置。但务必注意,...

    取消Win7自动排列注册表工具

    "取消Win7自动排列注册表工具"是一个小巧的实用程序,通常以`.reg`文件的形式存在,这种文件类型可以直接导入到注册表中,执行特定的修改。在本例中,`.reg`文件包含了取消自动排列注册表项的命令。使用这个工具时,...

    WIN7右键菜单清理注册表(含恢复)

    在Windows 7操作系统中,右键菜单是用户访问常用功能的快捷方式,它包含了大量快捷操作,如“新建”、“属性”、“发送到”等。然而,随着时间的推移,安装的各种软件可能会向右键菜单添加自定义项,导致右键菜单变...

    安装Pubwin 支持WIN7 的 注册表内容

    3. **检查权限**:在导入注册表项后,可能需要确认Pubwin软件的执行文件有访问注册表的权限。这通常可以在文件的属性中设置,通过选择“安全”选项卡,为程序赋予相应的权限。 4. **重启电脑**:修改注册表后,通常...

    Win7注册表右键菜单管理器

    【Win7注册表右键菜单管理器】 在Windows操作系统中,右键菜单是用户与系统交互的重要途径之一,它提供了快速访问常用功能的便捷方式。Win7注册表右键菜单管理器是一个专为Windows 7设计的工具,帮助用户管理和...

    易语言注册表操作类

    总之,易语言的注册表操作类为开发者提供了一种方便的途径来访问和管理注册表,但同时也需要谨慎对待,以确保程序的稳定性和系统的安全性。通过学习和熟练掌握这些功能,可以编写出更加高效且功能丰富的易语言程序。

    新编WIN32API大全(中文)

    例如,CreateFile用于打开或创建文件,VirtualAlloc分配内存,RegOpenKeyEx访问注册表键等,这些都是编写系统级工具或服务时必须掌握的技能。 通过学习《新编WIN32API大全(中文)》,开发者可以掌握Windows平台下...

    WIN7 下命令行修改注册表提示拒绝访问的解决

    在Windows 7操作系统中,通过命令行(CMD)修改注册表有时会遇到“拒绝访问”的权限问题。这是因为在Windows 7默认设置中,并不启用内置的Administrator账户,同时普通用户账户对系统的某些关键部分(比如注册表)...

Global site tag (gtag.js) - Google Analytics