|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 27, 2004 14:47:07 Подскажите, пожалуйста, синтаксис rundll32.exe. Пытался добиться методом научного тыка: rundll32 user32.dll,MessageBox 0,Text,Header,16 Результат - мсгбоскс с заголовком 0,Text,Header,16, кнопками ОК+Отмена, тремя кубиками вместь ожидаемого текста. Кто-нибудь знает, как вывести нормальный мсгбокс(то есть с текстом Text и Header в заголовке)? |
|
|
Дата: Июн 27, 2004 16:41:51 Нельзя с помощью rundll32.exe передовать аргументы в функции WinAPI - передаётся командная строка. MSDN: Rundll command line The command line for Rundll is as follows: RUNDLL.EXE <dllname>,<entrypoint> <optional arguments> How Rundll Works Rundll performs the following steps: It parses the command line. It loads the specified DLL via LoadLibrary(). It obtains the address of the <entrypoint> function via GetProcAddress(). It calls the <entrypoint> function, passing the command line tail which is the <optional arguments>. When the <entrypoint> function returns, Rundll.exe unloads the DLL and exits Так что работают тока ф-ции, которым не надо аргументы: rundll32 user32.dll,LockWorkStation |
|
|
Дата: Июн 28, 2004 03:23:05 S_T_A_S_ С аргументами нормально работает. Я еще сто лет назад видел пример ярлыков, где через RunDLL делается LogOff/ReBoot/ShutDown машины, используя ExitWindowsEx с параметрами. |
|
|
Дата: Июн 28, 2004 03:45:09 в MSDN есть пример - там разделитель параметров - пробел, но вариант rundll32 user32,MessageBox 0 Text Header 16 у меня не прошел =(( |
|
|
Дата: Июн 28, 2004 04:13:04 jekyll Маленькая поправка: ты не забывай, что rundll не такая умная, как твой компилятор. Поэтому юзаем MessageBoxA. |
|
|
Дата: Июн 28, 2004 04:20:07 Toxic Да хоть MessageBoxExA - не работает. |
|
|
Дата: Июн 28, 2004 10:47:28 Toxic что rundll не такая умная Неправда. Например, rundll32.exe из w2ksp4 пытается найти целевую функцию в таком порядке W, А, и только потом без W и A. jekyll разделитель параметров - пробел Зачем гадать. Декомпилировать и разобраться - 1-2 часа. У меня (w2ksp4) получилось так. В целевую функцию передаются четыре параметра: 1) hWnd - дескриптор окна, его создает rundll32.exe; 2) hInstance - результат GetModuleHandleW(NULL), вызванный внутри rundll32.exe; 3) ptstrCmdLine – то, что осталось после разбора командной строки и вычленения из нее собственно <path>rundll32.exe, имени модуля содержащего целевую функцию и имени целевой функции; 4) nCmdShow - равное либо SW_SHOWDEFAULT либо STARTUPINFO.wShowWindow если установлен флаг STARTF_USESHOWWINDOW в STARTUPINFO.dwFlags полученной при помощи GetStartupInfoW внутри rundll32.exe. |
|
|
Дата: Июн 28, 2004 14:33:12 [ Toxic : С аргументами нормально работает. Я еще сто лет назад видел пример ярлыков, где через RunDLL делается LogOff/ReBoot/ShutDown машины, используя ExitWindowsEx с параметрами. ] MSDN: (практически повторение слов q_q) The Run DLL utility (Rundll32.exe) included in Windows enables you to call functions exported from a 32-bit DLL. These functions must have the following syntax: void CALLBACK EntryPoint( HWND hwnd, // handle to owner window HINSTANCE hinst, // instance handle for the DLL LPTSTR lpCmdLine, // string the DLL will parse int nCmdShow // show state ); На всякий случай - вдруг кому интересны упомянутые примеры ^^ : Завершение Windows 95/98: rundll32 user32.dll,ExitWindows, 1, -1 Windows 98/Me: rundll32 shell32.dll,SHExitWindowsEx 0x0 0x0 - выход из системы 0x1 - завершение системы 0x2 - перезагрузка Пример для 2K/XP я привёл раньше. |
|
|
Дата: Сен 3, 2004 09:08:54 а почему не работает такая конструкция: rundll32 user32,SystemParametersInfoA 32, 0, "c:\1.bmp", 3 ? Тоесть надо на рабочий стол положить картинку из файла. Если это делать например в Delphi, все работает, а как из коммандной строки? Как указатель обозначается в коммандной строке? |
|
|
Дата: Сен 3, 2004 09:29:31 vhl На delphi это выглядит также как в командной строке? |
|
|
Дата: Сен 3, 2004 14:09:39 Проблема в том что там один из аргументов строка. В нее засовывается весь хвост. А остальные аргументы видимо берутся со стека rundll - у меня сообщение содержит MZ. Видимо попал адрес экзешника или dll. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078 |