Usando Dll Nativa e Using
Aprendendo a usar nativamente o Windows
Tag: C#.NET, Windows 7, Visual Studio 2010
Muitas pessoas precisam acessar funções nativas do sistema operacional Windows, para isso é necessário fazer alguns importes acima do método. Mas antes de começar a mostrar, é necessário usar algumas classes do Framework.NET. (Code 1)
using System; using System.Globalization; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Security.Principal; using System.Text; |
Junto desses using’s descritos acima, existe uma maneira nova de criando variável local que assume os dados da classe. Primeiro se coloca o nome igualando ao a classe que deseja usar. (Code 2)
using SysComTypes = System.Runtime.InteropServices.ComTypes; |
Note que a classe de System.Runtime.InteropServices.ComTypes foi atribuÃda para a variável SysComTypes. Essa variável pode ser usada dentro da classe em qualquer lugar. É uma maneira interessante para uso de variáveis locais.
Passando agora para a parte de importação nativa do sistema operacional, você precisa colocar no mÃnimo três linhas de código para cada importação, dependendo do método. Em exemplo, para verificar se o login do usuário precisa do código abaixo. (Code 3)
// // advapi32.dll // [DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, LogOnType dwLogonType, LogOnProvider dwLogonProvider, out IntPtr phToken); [DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool LogonUser(string lpszUsername, string lpszDomain, IntPtr lpszPassword, LogOnType dwLogonType, LogOnProvider dwLogonProvider, out IntPtr phToken); |
A dll nativa é a advapi32 do Windows. Existem outras interfaces disponÃveis dessa dll, porém não é muito usado.
Para a dll kernel32 existem outros métodos especÃficos como pegar a informação do HD local, verificar o status da thread, encontrar arquivo, pegar a memória da máquina e muito mais. Veja alguns exemplos abaixo. (Code 4)
// // kernel32.dll // [DllImport("kernel32", BestFitMapping = false, CharSet = CharSet.Unicode, SetLastError = true, ThrowOnUnmappableChar = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetVolumeInformation(string lpRootPathName, StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, out int lpVolumeSerialNumber, out int lpMaximumComponentLength, out int lpFileSystemFlags, StringBuilder lpFileSystemNameBuffer, int nFileSystemNameSize); [DllImport("kernel32", SetLastError = true)] internal static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); [DllImport("kernel32", BestFitMapping = false, CharSet = CharSet.Auto, SetLastError = true, ThrowOnUnmappableChar = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool FindNextFile(SafeFindFileHandle hndFindFile, [In, Out] FindData lpFindFileData); [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] internal static extern void GlobalMemoryStatus(NativeMemoryStatus lpBuffer); [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GlobalMemoryStatusEx(NativeMemoryStatusEx lpBuffer); |
Bom, o objetivo foi mostrar apenas como colocar a chamada de funções ou métodos nativos do sistema operacional. Em um próximo artigo, posso mostrar como usar esses métodos especÃficos.
Além dessas dlls, existem outras como oleaut32, setupapi, shell32, shlwapi e ole32.dll. Todas essas existem métodos próprios para uso na linguagem C#.NET ou qualquer outra do framework .NET.
Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.
Subscribe ecode10.com
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.
Log In