Добро пожаловать, здесь я программирую бессмысленно и беспощадно
Вызов функций из DLL через командную строку
Запись от nekit270 размещена 30.10.2023 в 22:08
Стандартные DLL винды (kernel32.dll, user32.dll, shell32.dll и другие) содержат огромное количество полезных (или просто интересных) функций. В поставку винды входит замечательная утилита rundll32 , которая открывает двери в мир WinAPI. Вернее, приоткрывает, потому что имеет она очень серьезный недостаток - она умеет вызывать функции только с определенной сигнатурой, а именно:Код:
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
Но проблема в том, что большинство (если не все) функции WinAPI имеют другую сигнатуру, и при вызове через rundll32 либо не будут работать вообще, либо будут работать некорректно, либо, в лучшем случае, что-нибудь функция сделает, но настроить это не получится. Вот отличный пример: я хочу показать окно сообщения, используя функцию MessageBoxA. Я использую следующую команду:
У меня выполнение этой команды выдало вот такое окно: Но что, если я хочу вызывать функции нормально (а желательно еще и получать результат)? Тут есть три варианта:
Варианты идут в порядке увеличения сложности и универсальности, а поскольку я не ищу легких путей, то был выбран третий вариант В итоге получилась маленькая утилита, вполне сносно выполняющая свои функции. Ссылка на GitHub (бинарь, исходники, доки) Документация есть на GitHub, но кратко приведу ее здесь:
Название функции чувствительно к регистру. Обратите внимание, что если функция имеет две версии - например MessageBoxA и MessageBoxW , то нужно указать, какую именно использовать.Вместо названия может использоваться порядковый номер (ординал) функции с префиксом "#". Тип возврата (как и аргументов) может быть:
Аргументы передаются в формате тип:значение. Пример:
На этом все, в следующей статье расскажу про некоторые полезные (и просто интересные) функции, которые находятся в стандартных библиотеках винды. |
Всего комментариев 2
Комментарии
-
пардон. немного не в тему. пощелкал по bcwd. Интересно. Вы не планируете про него рассказать?
Запись от sqltd1 размещена 31.10.2023 в 17:18 -
Планирую, но только после написания документации к нему, которая сейчас находится в зачаточном состоянии (у меня плохая привычка - сначала делать все и сразу, а написание документации откладывать)
После статьи о функциях из DLL планирую написать несколько про wesh (он тоже на github есть), и параллельно писать доки к bcwd.Запись от nekit270 размещена 31.10.2023 в 17:55