Quando um aplicativo está em execução, às vezes requer requisitos especiais para o ambiente do sistema. Por exemplo, em um aplicativo de banco de dados Delphi, pode ser necessário definir o nome da fonte de dados BDE (Borland Database Engine) ou ODBC (DSN: Data Source Name; em um aplicativo de rede, pode ser necessário definir as configurações de rede, Modem); configurações de propriedade ou dial-up do usuário A conta de conexão e senha são configuradas e salvas no sistema no CTI (Computer-Telephony). Integração) o aplicativo pode precisar definir as propriedades de discagem do telefone no programa do jogo, pode precisar definir o controlador de multimídia ou de jogo, etc. Neste momento, você precisa alterar as configurações de ambiente do sistema Windows para se adaptar aos requisitos para o funcionamento normal do aplicativo. Quando o aplicativo não consegue configurar o ambiente sozinho, o usuário do software pode ser solicitado a participar e ajudar na conclusão da configuração.
A maioria das configurações do sistema Win9X/NT são realizadas no painel de controle. Podemos pedir ao usuário que abra o painel de controle e encontre os itens correspondentes para configurar. Neste momento, o usuário deve estar familiarizado com o painel de controle. Também podemos abrir automaticamente o painel de controle para o usuário no programa. e selecione os itens correspondentes. Neste momento, tudo o que o usuário precisa fazer é configurar. O último método é sem dúvida mais amigável e pode melhorar a eficiência do trabalho do usuário.
A maioria das configurações do projeto no painel de controle correspondem a um arquivo CPL no diretório System do Windows. Por exemplo, o arquivo correspondente ao atributo "Internet" é InetCpl.cpl, o arquivo correspondente ao atributo "Multimídia" é MmSys. cpl, etc Ao chamar esses arquivos, a janela de configuração de propriedade correspondente pode ser aberta e você pode até mesmo pular para a página de propriedades correspondente, como a página de propriedades "Conexão" da propriedade "Internet", reduzindo efetivamente as etapas operacionais para usuários de software.
O formato de chamada do arquivo CPL é "RunDLL32.exe Shell32.dll,Control_RunDLL CPLFile.cpl,,ItemNo" (veja o valor padrão de HKEY_CLASSES_ROOTcplfileshellcpopencommand no registro), onde CPLFile.cpl é o arquivo CPL e ItemNo é o número do item . Em um programa Delphi, você pode usar a função WinExec ou CreatePRocess para chamar o arquivo CPL, chamando assim os itens de configuração do painel de controle. Se você deseja chamar a página de propriedades "Conexão" da propriedade "Internet" para definir a conta e a senha para uma conexão dial-up, você pode usar a instrução "WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl ,,3',," SW_SHOWNORMAL);"; Para resolver a interpretação da entrada do ano de dois dígitos no problema de 2000, você precisa chamar a página de propriedades "Data" de "Configurações Regionais", você pode usar a instrução: "WinExec('RunDLL32.exe Shell32 .dll,Control_RunDLL Intl.cpl, ,4',, SW_SHOWNORMAL);".
A lista de instruções correspondentes às chamadas de configuração de cada item do painel de controle é a seguinte:
//Abre o painel de controle
WinExec('RunDLL.exe Shell32.DLL,Control_RunDLL',SW_SHOWNORMAL);
//Gerenciador de fonte de dados ODBC de 32 bits, fonte de dados ODBC, configurações do driver ODBC
//Nenhum parâmetro é fornecido para distinguir as seis páginas de propriedades de "User DSN", "System DSN", "File DSN", "ODBC Driver", "Tracking" e "About"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL ODBCCP32.CPL',SW_SHOWNORMAL);
//Administrador BDE
//Nenhum parâmetro é fornecido para distinguir entre as duas páginas de propriedades de "Bancos de dados" e "Configuração"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL BdeAdmin.CPL',SW_SHOWNORMAL);
//Atributo da Internet, pode ter parâmetro ItemNo
//Página de propriedades "Geral"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,0', SW_SHOWNORMAL);
//página de propriedades "Segurança"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,1', SW_SHOWNORMAL);
//página de propriedades "Conteúdo"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,2', SW_SHOWNORMAL);
//página de propriedades "Conexão"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,3', SW_SHOWNORMAL);
//Página de propriedades do "Programa"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,4', SW_SHOWNORMAL);
//página de propriedades "Avançado"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,5', SW_SHOWNORMAL);
//Propriedades de discagem telefônica, nenhum parâmetro é fornecido para distinguir entre as duas páginas de propriedades de "Meu local" e "Driver de voz do telefone"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Telephon.cpl', SW_SHOWNORMAL);
//Configurações de gerenciamento de energia, nenhum parâmetro é fornecido para distinguir as duas páginas de propriedades "Plano de energia" e "Avançado"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL PowerCfg.cpl', SW_SHOWNORMAL);
//Configurações do modem, nenhum parâmetro é fornecido para distinguir entre as páginas de propriedades "Geral" e "Diagnóstico"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Modem.cpl', SW_SHOWNORMAL);
//Configurações multimídia, pode ter parâmetro ItemNo
//página de propriedades "Áudio"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,0', SW_SHOWNORMAL);
//Página de propriedades "Vídeo"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,1', SW_SHOWNORMAL);
//página de propriedades "MIDI"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,2', SW_SHOWNORMAL);
//página de propriedades "CD Música"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,3', SW_SHOWNORMAL);
//Página de propriedades "Dispositivo"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,4', SW_SHOWNORMAL);
//Configurações de opções auxiliares, podem ter parâmetro ItemNo
//Página de propriedades "Teclado"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,1',SW_SHOWNORMAL);
//página de propriedades "Som"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,2', SW_SHOWNORMAL);
//Página de propriedades "Exibir"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,3', SW_SHOWNORMAL);
//Página de propriedades "Mouse"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,4', SW_SHOWNORMAL);
//Página de propriedades "Geral"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,5', SW_SHOWNORMAL);
//Configuração de senha, nenhum parâmetro é fornecido para distinguir entre as duas páginas de propriedades de "Alterar senha" e "Modificar configuração do usuário"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL PassWord.cpl', SW_SHOWNORMAL);
//Configurações regionais, pode ter parâmetro ItemNo
//Página de propriedades "Configurações Regionais"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,0', SW_SHOWNORMAL);
//Página de propriedades "Número"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,1', SW_SHOWNORMAL);
//página de propriedades "Moeda"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,2', SW_SHOWNORMAL);
//página de propriedades "Tempo"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,3', SW_SHOWNORMAL);
//página de propriedades "Data"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,4', SW_SHOWNORMAL);
//Configuração de data/hora, pode ter parâmetro ItemNo
//Página de propriedades "Data e hora"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL TimeDate.cpl,,0', SW_SHOWNORMAL);
//página de propriedades "Fuso Horário"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL TimeDate.cpl,,1', SW_SHOWNORMAL);
//Configurações do mouse, nenhum parâmetro é fornecido para distinguir as três páginas de propriedades de "Botão", "Ponteiro" e "Mover"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Main.cpl', SW_SHOWNORMAL);
//Adiciona/exclui configurações do programa, parâmetro ItemNo opcional
//Página de propriedades "Instalação/Desinstalação"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,1', SW_SHOWNORMAL);
//página de propriedades do "Windows Installer"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,2', SW_SHOWNORMAL);
//Página de propriedades do "Disco de inicialização"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,3', SW_SHOWNORMAL);
//Configurações de rede, nenhum parâmetro é fornecido para distinguir as três páginas de propriedades de "Configuração", "Identificação" e "Controle de Acesso"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL NetCpl.cpl', SW_SHOWNORMAL);
//Configurações do sistema,
//Página de propriedades "Geral", pode ter parâmetro ItemNo
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,0', SW_SHOWNORMAL);
//Página de propriedades do "Gerenciador de Dispositivos"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,1', SW_SHOWNORMAL);
//página de propriedades "Perfil de Hardware"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,2', SW_SHOWNORMAL);
//página de propriedades "Desempenho"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,3', SW_SHOWNORMAL);
//Configurações de exibição, pode ter parâmetro ItemNo
//página de propriedades "Plano de fundo"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,0', SW_SHOWNORMAL);
//Página de propriedades "Proteção de tela"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,1', SW_SHOWNORMAL);
//página de propriedades "Aparência"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,2', SW_SHOWNORMAL);
//página de propriedades "Configurações"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,3', SW_SHOWNORMAL);
//Configurações do controlador de jogo, pode ter parâmetro ItemNo
//Página de propriedades "Geral"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Joy.cpl,,0', SW_SHOWNORMAL);
//página de propriedades "Avançado"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL Joy.cpl,,1', SW_SHOWNORMAL);
//Configurações do scanner e da câmera digital, nenhum parâmetro é fornecido para distinguir as duas páginas de propriedades de "Dispositivo" e "Configurações de gravação"
WinExec('RunDLL32.exe Shell32.dll,Control_RunDLL StiCpl.cpl', SW_SHOWNORMAL);
O programa acima foi depurado e passado em PWIN98+DELPHI3.0.