Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
<#
.SYNOPSIS
Извлечение строки из dll
.DESCRIPTION
Извлечение из библиотеки (dll) ресурса, строки, по её номеру
.PARAMETER Library
Файл библиотеки
.PARAMETER Line
Номер строки
.OUTPUTS
[string] строка извлеченная из библиотеки или ничего
.NOTES
Автор:          iNNOKENTIY21
.EXAMPLE
ExtractStringFromDLL.ps1 (Get-Item 'C:\Windows\system32\AJRouter.dll') 2
--------
Извлечение строки номер 2 из ресурса 'C:\Windows\system32\AJRouter.dll'
.EXAMPLE
ExtractStringFromDLL.ps1 (Get-Item ([System.Environment]::ExpandEnvironmentVariables("%WINDIR%\system32\AJRouter.dll"))) 2
--------
Извлечение строки номер 2 из ресурса 'C:\Windows\system32\AJRouter.dll', с извлечением пути из переменной "%WINDIR%
.LINK
https://stackoverflow.com/questions/41968416/how-to-extract-string-resource-from-dll
#>
 
param (
    # Файл библиотеки (dll)
    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [System.IO.FileInfo]
    $Library,
 
    # Номер строки
    [Parameter(Mandatory)]
    [int]
    $Line
)
 
if (!('GetStringFromLibrary' -as [type])) {
    Add-Type -TypeDefinition @'
using System;
using System.Text;
using System.Runtime.InteropServices;
 
public class GetStringFromLibrary
{
    [System.Flags]
    enum LoadLibraryFlags : uint
    {
        None = 0,
        DONT_RESOLVE_DLL_REFERENCES         = 0x00000001,
        LOAD_IGNORE_CODE_AUTHZ_LEVEL        = 0x00000010,
        LOAD_LIBRARY_AS_DATAFILE            = 0x00000002,
        LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE  = 0x00000040,
        LOAD_LIBRARY_AS_IMAGE_RESOURCE      = 0x00000020,
        LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200,
        LOAD_LIBRARY_SEARCH_DEFAULT_DIRS    = 0x00001000,
        LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR    = 0x00000100,
        LOAD_LIBRARY_SEARCH_SYSTEM32        = 0x00000800,
        LOAD_LIBRARY_SEARCH_USER_DIRS       = 0x00000400,
        LOAD_WITH_ALTERED_SEARCH_PATH       = 0x00000008
    }
 
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr LoadLibraryEx(
        string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags);
 
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern int LoadString(
        IntPtr hInstance, int ID, StringBuilder lpBuffer, int nBufferMax);
 
    [DllImport("kernel32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool FreeLibrary(IntPtr hModule);
 
    public static string ExtractStringFromDLL(string file, int number)
    {
        IntPtr lib = LoadLibraryEx(
            file, IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE);
        StringBuilder result = new StringBuilder(2048);
        LoadString(lib, number, result, result.Capacity);
        FreeLibrary(lib);
        return result.ToString();
    }
}
'@
}
 
[GetStringFromLibrary]::ExtractStringFromDLL($Library.FullName, $Line)

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 15:54 17-12-2019
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru