Mapeamento e Remapeamento
Prezados,
Estou com a seguinte duvida.
Estou usando a api WNetAddConnection para criar mapeamentos, so que quando a letra da unidade que eu informo para mapear já esta sendo utilizada o sistema retorna um erro. Eu gostaria de pode remapear esta unidade.
Alguém teria alguma dica para fazer isto.
Eu utilizo o mesmo comando para configurar a impressora (Capturar a porta da impressora) e gostaria de pode reutilizar uma porta que já esta configurada.
Agradeço a todos.
Que Deus nos abençoe.
Estou com a seguinte duvida.
Estou usando a api WNetAddConnection para criar mapeamentos, so que quando a letra da unidade que eu informo para mapear já esta sendo utilizada o sistema retorna um erro. Eu gostaria de pode remapear esta unidade.
Alguém teria alguma dica para fazer isto.
Eu utilizo o mesmo comando para configurar a impressora (Capturar a porta da impressora) e gostaria de pode reutilizar uma porta que já esta configurada.
Agradeço a todos.
Que Deus nos abençoe.
Garoto Programa
Curtidas 0
Respostas
Werlon Goulart
05/08/2003
Ai vao as rotinas pra verificar se a unidade ja esta sendo utilizada, mapear uma unidade de rede, remover o mapeamento.
Um Abraço
Werlon Goulart
Retorna as unidades mapeadas na Estação com seus Respectivos paths
function GetNetworkDriveMappings(sl : TStrings ) : integer;
// Ex:
// procedure TForm1.Button1Click(Sender: TObject);
// var
// sl : TStrings;
// nMappingsCount,
// i : integer;
// begin
// sl := TStringList.Create;
// nMappingsCount := GetNetworkDriveMappings( sl );
// for i := 0 to nMappingsCount-1 do
// begin
// Listbox1.items.Add(PChar(sl.Strings[ i ] )+ ´ Network drive mappings´);
// end;
// sl.Free;
// end;
var
i : integer;
sNetPath : string;
dwMaxNetPathLen : DWord;
begin
sl.Clear;
dwMaxNetPathLen := MAX_PATH;
SetLength( sNetPath,dwMaxNetPathLen );
for i := 0 to 25 do
begin
if (NO_ERROR = Windows.WNetGetConnection(PChar(´´ +
Chr(65 + i) + ´:´),PChar(sNetPath),dwMaxNetPathLen ) )then
begin
sl.Add( Chr( 65 + i ) + ´: ´ + sNetPath );
end;
end;
Result := sl.Count;
end;
Desconecta uma unidade mapeada via programação
Function DesconectaRede(Letra:Pchar;Forcada:boolean):String;
// Letra = Letra atribuida a unidade
// Forcada = Força o cancelamento do mapeamento
begin
WNetCancelConnection2(Letra,0,Forcada);
Case GetLastError() of
1205: Result := ´Não foi possível abrir o perfil´;
1206: Result := ´Perfil do usuário não encontrado ou inválido´;
1208: Result := ´Ocorreu um Erro específico na rede´;
2138: Result := ´Rede não encontrada ou fora do ar´;
2250: Result := ´Mapeamento inválido ou não encontrado´;
2401: Result := ´Existem muitos arquivos abertos´;
else
Result := ´Unidade disconectada com sucesso´;
end;
end;
Mapea uma pasta via programação
function MapeaPasta(Server,Alias,senha:Pchar): String;
// Exemplo:
// MapeaPasta(´\ALPHAMG01Extra´,´E:´,´ ´)
var
err : DWord;
PServer, PSenha, PLetra : PChar;
Begin
PServer := Server;
PLetra := Alias;
PSenha := senha;
ERR := WNetAddConnection ( PServer , PSenha , PLetra );
case ERR of
ERROR_ACCESS_DENIED :
result := ´Acesso negado.´;
ERROR_ALREADY_ASSIGNED :
result := ´A letra do drive especificada já está conectada.´;
ERROR_BAD_DEV_TYPE :
result := ´O tipo de dispositivo e o tipo de recurso não são compatíveis.´;
ERROR_BAD_DEVICE :
result := ´Letra inválida.´;
ERROR_BAD_NET_NAME :
result := ´Nome do servidor não é válido ou não pode ser localizado.´;
ERROR_BAD_PROFILE :
result := ´Formato incorreto de parâmetros.´;
ERROR_CANNOT_OPEN_PROFILE :
result := ´Conexão permanente não disponível.´;
ERROR_DEVICE_ALREADY_REMEMBERED :
result := ´Uma entrada para o dispositivo especificado já está no perfil do usuário.´;
ERROR_EXTENDED_ERROR :
result := ´Erro de rede.´;
ERROR_INVALID_PASSWORD :
result := ´Senha especificada inválida.´;
ERROR_NO_NET_OR_BAD_PATH :
result := ´A operação não foi concluída porque a rede ´;
´não foi inicializada ou caminho é inválido.´;
ERROR_NO_NETWORK :
result := ´A rede não está presente.´;
else
result := ´A Conexão ´+ server+ ´ na unidade ´+ Alias+´ Foi efetuada corretamente´;
end;
end;
Um Abraço
Werlon Goulart
Retorna as unidades mapeadas na Estação com seus Respectivos paths
function GetNetworkDriveMappings(sl : TStrings ) : integer;
// Ex:
// procedure TForm1.Button1Click(Sender: TObject);
// var
// sl : TStrings;
// nMappingsCount,
// i : integer;
// begin
// sl := TStringList.Create;
// nMappingsCount := GetNetworkDriveMappings( sl );
// for i := 0 to nMappingsCount-1 do
// begin
// Listbox1.items.Add(PChar(sl.Strings[ i ] )+ ´ Network drive mappings´);
// end;
// sl.Free;
// end;
var
i : integer;
sNetPath : string;
dwMaxNetPathLen : DWord;
begin
sl.Clear;
dwMaxNetPathLen := MAX_PATH;
SetLength( sNetPath,dwMaxNetPathLen );
for i := 0 to 25 do
begin
if (NO_ERROR = Windows.WNetGetConnection(PChar(´´ +
Chr(65 + i) + ´:´),PChar(sNetPath),dwMaxNetPathLen ) )then
begin
sl.Add( Chr( 65 + i ) + ´: ´ + sNetPath );
end;
end;
Result := sl.Count;
end;
Desconecta uma unidade mapeada via programação
Function DesconectaRede(Letra:Pchar;Forcada:boolean):String;
// Letra = Letra atribuida a unidade
// Forcada = Força o cancelamento do mapeamento
begin
WNetCancelConnection2(Letra,0,Forcada);
Case GetLastError() of
1205: Result := ´Não foi possível abrir o perfil´;
1206: Result := ´Perfil do usuário não encontrado ou inválido´;
1208: Result := ´Ocorreu um Erro específico na rede´;
2138: Result := ´Rede não encontrada ou fora do ar´;
2250: Result := ´Mapeamento inválido ou não encontrado´;
2401: Result := ´Existem muitos arquivos abertos´;
else
Result := ´Unidade disconectada com sucesso´;
end;
end;
Mapea uma pasta via programação
function MapeaPasta(Server,Alias,senha:Pchar): String;
// Exemplo:
// MapeaPasta(´\ALPHAMG01Extra´,´E:´,´ ´)
var
err : DWord;
PServer, PSenha, PLetra : PChar;
Begin
PServer := Server;
PLetra := Alias;
PSenha := senha;
ERR := WNetAddConnection ( PServer , PSenha , PLetra );
case ERR of
ERROR_ACCESS_DENIED :
result := ´Acesso negado.´;
ERROR_ALREADY_ASSIGNED :
result := ´A letra do drive especificada já está conectada.´;
ERROR_BAD_DEV_TYPE :
result := ´O tipo de dispositivo e o tipo de recurso não são compatíveis.´;
ERROR_BAD_DEVICE :
result := ´Letra inválida.´;
ERROR_BAD_NET_NAME :
result := ´Nome do servidor não é válido ou não pode ser localizado.´;
ERROR_BAD_PROFILE :
result := ´Formato incorreto de parâmetros.´;
ERROR_CANNOT_OPEN_PROFILE :
result := ´Conexão permanente não disponível.´;
ERROR_DEVICE_ALREADY_REMEMBERED :
result := ´Uma entrada para o dispositivo especificado já está no perfil do usuário.´;
ERROR_EXTENDED_ERROR :
result := ´Erro de rede.´;
ERROR_INVALID_PASSWORD :
result := ´Senha especificada inválida.´;
ERROR_NO_NET_OR_BAD_PATH :
result := ´A operação não foi concluída porque a rede ´;
´não foi inicializada ou caminho é inválido.´;
ERROR_NO_NETWORK :
result := ´A rede não está presente.´;
else
result := ´A Conexão ´+ server+ ´ na unidade ´+ Alias+´ Foi efetuada corretamente´;
end;
end;
GOSTEI 0
Garoto Programa
05/08/2003
Prezados,
As funções passadas pelo Werlon funcionaram muito bem, so que a função que lista as conexões presentes ignora as conexões com as impressoras. Alguém tem alguma :idea: ideia?
Muito Obrigado Werlon pela sua ajuda.
Que Deus continue a nos abençoar!
As funções passadas pelo Werlon funcionaram muito bem, so que a função que lista as conexões presentes ignora as conexões com as impressoras. Alguém tem alguma :idea: ideia?
Muito Obrigado Werlon pela sua ajuda.
Que Deus continue a nos abençoar!
GOSTEI 0