PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 25 → Obtendo dados de uma unidade de disco USB
Obtendo dados de uma unidade de disco USB
Iniciado por Boller, 09,may. 2023 00:02 - 6 respuestas
Miembro registrado
4.521 mensajes
Publicado el 09,mayo 2023 - 00:02
Crie uma procedure que retorne os dados de um USB em um array

Para retornar as informações de um dispositivo USB em um array em vez de uma tabela, podemos criar uma procedure que recebe o caminho da unidade USB como parâmetro e retorna um array com as informações solicitadas.

Segue abaixo um exemplo de como implementar isso em WLanguage:

//##############################
// Obtendo informações de um dispositivo USB em um array
//##############################

// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] ObterInformacoesUSB (<usbPath> is string)
//
// Parameters:
// usbPath (ANSI string):
// Example:
// <Specify a usage example>
//
// info: <specify the role of info>
PROCEDURE ObterInformacoesUSB(usbPath is string)

// Obtém as informações sobre o dispositivo USB
info_usb is string

info_usb += "usbPath: "+ usbPath +";"+CR
info_usb += "fdVolumeName: " + fDriveInfo(usbPath,fdVolumeName) +";"+CR
info_usb += "fdSerialNumber: " + fDriveInfo(usbPath,fdSerialNumber) +";"+CR
info_usb += "fdDriveType: " + fDriveInfo(usbPath,fdDriveType) +";"+CR
info_usb += "fdTotalSpace: " + fDriveInfo(usbPath,fdTotalSpace) +";"+CR
info_usb += "fdFreeSpace: " + fDriveInfo(usbPath,fdFreeSpace) +";"+CR
info_usb += "fdFileNameSize: " + fDriveInfo(usbPath,fdFileNameSize) +";"+CR
info_usb += "fdSectorSize: " + fDriveInfo(usbPath,fdSectorSize) +";"+CR
info_usb += "fdNbSectorPerCluster: "+ fDriveInfo(usbPath,fdNbSectorPerCluster) +";"+CR
info_usb += "fdNbCluster: " + fDriveInfo(usbPath,fdNbCluster) +";"+CR

Info(info_usb)

RESULT info_usb


Nessa procedure, recebemos o caminho do dispositivo USB como um parâmetro (usbPath) e retornamos um array de strings (info) contendo as informações solicitadas. Cada elemento do array contém uma informação diferente, seguindo a ordem da tabela do exemplo anterior.

Para utilizar essa procedure, basta chamá-la com o caminho da unidade USB desejada e armazenar o resultado em uma variável.

No exemplo acima, chamamos a procedure ObterInformacoesUSB com o caminho da unidade USB "F:" e armazenamos as informações retornadas em uma variável chamada infos. Em seguida, exibimos essas informações na saída Trace.

Caso tenha alguma dúvida, por favor, pergunte.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensaje modificado, 09,mayo 2023 - 00:23
Miembro registrado
4.521 mensajes
Publicado el 09,mayo 2023 - 00:03
// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] ObterInformacoesUSB (<usbPath> is string)
//
// Parameters:
// usbPath (ANSI string):
// Example:
// <Specify a usage example>
//
// info: <specify the role of info>
PROCEDURE ObterInformacoesUSB(usbPath is string)

// Obtém as informações sobre o dispositivo USB
info_usb is string

info_usb += "usbPath: "+ usbPath +";"+CR
info_usb += "fdVolumeName: " + fDriveInfo(usbPath,fdVolumeName) +";"+CR
info_usb += "fdSerialNumber: " + fDriveInfo(usbPath,fdSerialNumber) +";"+CR
info_usb += "fdDriveType: " + fDriveInfo(usbPath,fdDriveType) +";"+CR
info_usb += "fdTotalSpace: " + fDriveInfo(usbPath,fdTotalSpace) +";"+CR
info_usb += "fdFreeSpace: " + fDriveInfo(usbPath,fdFreeSpace) +";"+CR
info_usb += "fdFileNameSize: " + fDriveInfo(usbPath,fdFileNameSize) +";"+CR
info_usb += "fdSectorSize: " + fDriveInfo(usbPath,fdSectorSize) +";"+CR
info_usb += "fdNbSectorPerCluster: "+ fDriveInfo(usbPath,fdNbSectorPerCluster) +";"+CR
info_usb += "fdNbCluster: " + fDriveInfo(usbPath,fdNbCluster) +";"+CR

Info(info_usb)

RESULT info_usb


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensaje modificado, 09,mayo 2023 - 00:22
Miembro registrado
4.521 mensajes
Publicado el 09,mayo 2023 - 17:56
Como alterar via c# o nome do volume do pendrive


ChatGPT
Para alterar o nome do volume de um pen drive (ou qualquer outra unidade de armazenamento externa) usando C#, você pode usar a classe ManagementObject do namespace System.Management. Primeiro, certifique-se de adicionar a referência System.Management.dll ao seu projeto e importar o namespace:

csharp
Copy code
using System.Management;
Em seguida, você pode usar o código abaixo para alterar o nome do volume do pen drive:

csharp
Copy code
using System;
using System.Management;

namespace ChangeVolumeLabel
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("Digite a letra da unidade do pen drive (exemplo: E):");
string driveLetter = Console.ReadLine().ToUpper();

Console.WriteLine("Digite o novo nome do volume:");
string newVolumeLabel = Console.ReadLine();

ChangeVolumeLabel(driveLetter, newVolumeLabel);
Console.WriteLine("O nome do volume foi alterado com sucesso!");
}
catch (Exception ex)
{
Console.WriteLine("Erro: " + ex.Message);
}

Console.ReadKey();
}

private static void ChangeVolumeLabel(string driveLetter, string newVolumeLabel)
{
if (string.IsNullOrEmpty(driveLetter) || driveLetter.Length != 1)
throw new ArgumentException("A letra da unidade é inválida.");

if (string.IsNullOrEmpty(newVolumeLabel))
throw new ArgumentException("O nome do volume não pode ser vazio.");

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT * FROM Win32_Volume WHERE DriveLetter = '{driveLetter}:'"))
{
using (ManagementObjectCollection moc = searcher.Get())
{
if (moc.Count == 0)
throw new ArgumentException("A unidade especificada não foi encontrada.");

foreach (ManagementObject mo in moc)
{
mo.InvokeMethod("SetLabel", new object[] { newVolumeLabel });
break;
}
}
}
}
}
}
Este programa pede ao usuário a letra da unidade do pen drive e o novo nome do volume, e então altera o nome do volume usando a função ChangeVolumeLabel. Certifique-se de executar o aplicativo como administrador para garantir que ele tenha as permissões necessárias para fazer a alteração.




User
E se for fazer com WLanguage


ChatGPT
WLanguage é a linguagem de programação usada na plataforma de desenvolvimento WINDEV, WEBDEV e WINDEV Mobile da PC SOFT. Para alterar o nome do volume de um pen drive usando WLanguage, você pode utilizar a função WLanguage.SetVolumeLabel (função fictícia, não existe na linguagem WLanguage).

Infelizmente, não há uma função nativa do WLanguage para alterar o nome do volume de uma unidade diretamente. No entanto, você pode criar uma função personalizada usando a chamada de API do Windows SetVolumeLabel.

Primeiro, declare a função SetVolumeLabel da API do Windows no seu código WLanguage:

pascal
Copy code
IMPORT "kernel32" SetVolumeLabelA PROCEDURE(lpRootPathName, lpVolumeName: AnsiString) BOOL
Em seguida, crie uma função WLanguage chamada ChangeVolumeLabel que recebe a letra da unidade e o novo nome do volume como parâmetros e usa a função SetVolumeLabel importada para realizar a alteração:

pascal
Copy code
PROCEDURE ChangeVolumeLabel(driveLetter, newVolumeLabel: string)
Local
sRootPath: string
BEGIN
IF Left(driveLetter, 1) <> "\" THEN
sRootPath = driveLetter + ":\"
ELSE
sRootPath = driveLetter
END
IF SetVolumeLabelA(sRootPath, newVolumeLabel) = False THEN
Error("Erro ao alterar o nome do volume.")
END
END
Agora você pode usar a função ChangeVolumeLabel em seu aplicativo WLanguage para alterar o nome do volume de um pen drive:

pascal
Copy code
PROCEDURE Main()
Local
sDriveLetter, sNewVolumeLabel: string
BEGIN
Info("Digite a letra da unidade do pen drive (exemplo: E):")
sDriveLetter = StringEdit("", 1)
Info("Digite o novo nome do volume:")
sNewVolumeLabel = StringEdit("", 32)

ChangeVolumeLabel(sDriveLetter, sNewVolumeLabel)
Info("O nome do volume foi alterado com sucesso!")
END
Lembre-se de que este exemplo é para fins ilustrativos e pode não funcionar corretamente sem ajustes específicos no contexto de seu projeto WLanguage. Além disso, é importante destacar que a linguagem WLanguage está sujeita às limitações e particularidades da plataforma PC SOFT.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.521 mensajes
Publicado el 09,mayo 2023 - 17:59
Qual a api do Windows que permite alterar o nome do volume de uma unidade de disco


ChatGPT
A API do Windows que permite alterar o nome do volume de uma unidade de disco é chamada SetVolumeLabel. Essa função está disponível nas versões ANSI e Unicode, chamadas SetVolumeLabelA e SetVolumeLabelW, respectivamente. Ambas estão localizadas na biblioteca kernel32.dll.

Aqui está a declaração da função SetVolumeLabel em C/C++:

c
Copy code
BOOL WINAPI SetVolumeLabelA(
_In_ LPCSTR lpRootPathName,
_In_ LPCSTR lpVolumeName
);

BOOL WINAPI SetVolumeLabelW(
_In_ LPCWSTR lpRootPathName,
_In_ LPCWSTR lpVolumeName
);
Para usar essa função em C/C++, inclua o cabeçalho <Windows.h> e chame a função SetVolumeLabel com o caminho da raiz da unidade e o novo nome do volume:

c
Copy code
#include <Windows.h>
#include <stdio.h>

int main()
{
const char* driveLetter = "E:\\";
const char* newVolumeLabel = "MyNewVolume";

if (SetVolumeLabelA(driveLetter, newVolumeLabel))
{
printf("O nome do volume foi alterado com sucesso!\n");
}
else
{
printf("Erro ao alterar o nome do volume. Código do erro: %lu\n", GetLastError());
}

return 0;
}
Lembre-se de que você precisa executar o aplicativo como administrador para garantir que ele tenha as permissões necessárias para alterar o nome do volume.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.521 mensajes
Publicado el 09,mayo 2023 - 18:02
Qual api do windows lista as unidades de disco de um computador com Windows


ChatGPT
A API do Windows para listar unidades de disco em um computador com Windows é chamada GetLogicalDriveStrings. Essa função retorna uma lista de strings que representam as unidades de disco no sistema. Ela está localizada na biblioteca kernel32.dll.

Aqui está a declaração da função GetLogicalDriveStrings em C/C++:

c
Copy code
DWORD WINAPI GetLogicalDriveStringsA(
_In_ DWORD nBufferLength,
_Out_ LPSTR lpBuffer
);

DWORD WINAPI GetLogicalDriveStringsW(
_In_ DWORD nBufferLength,
_Out_ LPWSTR lpBuffer
);
Para usar essa função em C/C++, inclua o cabeçalho <Windows.h> e chame a função GetLogicalDriveStrings com um buffer apropriado para armazenar a lista de unidades:

c
Copy code
#include <Windows.h>
#include <stdio.h>

int main()
{
const DWORD bufferSize = 256;
char buffer[bufferSize];
DWORD result = GetLogicalDriveStringsA(bufferSize, buffer);

if (result > 0 && result <= bufferSize)
{
printf("Unidades de disco:\n");
char* drive = buffer;

while (*drive)
{
printf("%s\n", drive);
drive += strlen(drive) + 1;
}
}
else
{
printf("Erro ao listar unidades de disco. Código do erro: %lu\n", GetLastError());
}

return 0;
}
Esse exemplo lista as unidades de disco no sistema e imprime suas letras na tela. Observe que a função GetLogicalDriveStrings retorna uma lista de strings terminadas por NULL e é seguida por outro caractere NULL para indicar o final da lista.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.521 mensajes
Publicado el 09,mayo 2023 - 22:37
Para obter o nome de um USB ou hd via c#


ChatGPT
Para obter o nome ou rótulo de um dispositivo USB ou HD no Windows usando C#, você pode usar a classe DriveInfo disponível no namespace System.IO. A classe DriveInfo fornece informações sobre as unidades de disco em seu sistema.

Aqui está um exemplo de como listar os dispositivos USB e HD conectados e obter seus nomes (rótulos) usando C#:

csharp
Copy code
using System;
using System.IO;

class Program
{
static void Main()
{
// Obtém todas as unidades disponíveis no sistema
DriveInfo[] drives = DriveInfo.GetDrives();

// Percorre cada unidade
foreach (DriveInfo drive in drives)
{
// Verifica se a unidade está pronta para ser usada (montada e acessível)
if (drive.IsReady)
{
Console.WriteLine("Unidade: {0}", drive.Name);
Console.WriteLine("Rótulo da unidade: {0}", drive.VolumeLabel);
}
}
}
}
Este código irá listar todas as unidades disponíveis no sistema, incluindo unidades USB e HD. Para cada unidade, ele exibirá a letra da unidade (como "C:" ou "D:") e o rótulo (nome) da unidade.

Lembre-se de que este exemplo irá listar todas as unidades, incluindo unidades ópticas (CD/DVD) e unidades de rede, se houver. Se você deseja filtrar apenas por dispositivos USB e HD, pode verificar o tipo de unidade usando a propriedade DriveType da classe DriveInfo.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.521 mensajes
Publicado el 10,mayo 2023 - 15:02
CONSEGUI MUDAR O NOME DA UNIDADE DE DISCO

:)

// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] AlterarNomeVolumeDisco (<UnidadeDisco> is string, <NomeVolumeDisco> is string, <debug> is boolean)
//
// Parameters:
// UnidadeDisco (ANSI string):
// NomeVolumeDisco (ANSI string): <specify the role of NomeVolumeDisco>
// debug (boolean): <specify the role of debug>
// Example:
// <Specify a usage example>
//
PROCEDURE AlterarNomeVolumeDisco(UnidadeDisco is string, NomeVolumeDisco is string, debug is boolean)

IF Length(NomeVolumeDisco) > 11 THEN
IF debug = True
Info("Nome do Volume acima de 11 caracteres")
END
RETURN False
END

IF Length(UnidadeDisco) > 2 OR Middle(UnidadeDisco,2,1) <> ":" THEN
IF debug = True
Info("Erro ao informar a Unidade de Disco fora do padrão")
END
RETURN False
ELSE
FunctionReturn is boolean = False // C type:BOOL

UnidadeDisco = Upper(NoSpace(UnidadeDisco))

NomeVolumeDisco = Upper(NoSpace(NomeVolumeDisco))

FunctionReturn = API("KERNEL32","SetVolumeLabelA",UnidadeDisco,NomeVolumeDisco)

IF debug = True
Info("Unidade de Disco "+UnidadeDisco+", alterado o nome para: "+NomeVolumeDisco)
END

RETURN True
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/