IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> ShellExecuteW in Shell32.dll for WIN64, можно ли заставить работать?
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Вопрос не очень обсуждаем. Несколько дней гуглил. Нашел решения для с++ и то не факт что рабочие. А для паскалей ((

Я застрял на ShellExecuteW но и другие функции Shell32.dll под WIN64 работают криво или ни как. Суть вопросв уже ясна: на автоматизированную пилораму рассчитанную на бревна 32м привезли 64 и говорят возьмете? ))
Ну за 2 посчитаете.
Ну у нас есть инт64 почему нет?
ну потому, что ИТН64 это один Х 2 бревна по 32, а 64 оно просто не может читать. В принципе.
И как?

ну, это совсем критично для функций которым надо указать hwnd
для ShellExecuteW оно и 0 сойдет. (зачем он там кстати?)
Приложение ТА оно запускает. Но оно приложение вылетает с критом при попытке использования.

А запускаю я бота для Линейдж ( можно смеяться )

Код
uses SysUtils,Classes;
//uses System; // недоступен
//uses ShellAPI; // недоступен

var
  Wch: WideChar;
  S:string;
  winH,h1,h2,i: int64;


const
WPath = 'C:\L2\L2W KOT\L2WalkerLL.lnk';   //<-- полный путь до l2.exe (например D:\Lineage\system\l2.exe)
//WPath = 'C:\L2\L2W KOT\L2Walker.exe';   //<-- полный путь до l2.exe (например D:\Lineage\system\l2.exe)
  
                      // hwnd тип недоступен
function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar;  nShowCmd: integer): integer; stdcall; external 'Shell32.dll';
function keybd_event(bVk, bScan: byte; dwFlags, dwExtraInfo: integer): integer; stdcall; external 'user32.dll';
function ShowWindow(hwnd:cardinal; action:integer):boolean; stdcall; external 'user32.dll';
function SetCursorPos(x, y : integer): boolean; stdcall; external 'user32.dll';
function mouse_event(dwFlags, dx, dy, dwData: byte; dwExtraInfo: integer): void; stdcall; external 'user32.dll';
function FindWindow(C1, C2: PChar): Longint; external 'FindWindowA@user32.dll stdcall';





begin

// winH:=ShellExecuteW(winH, 'open', PChar('C:\L2\L2WKOT\L2Walker.exe'), nil, PChar('C:\L2\L2W KOT\'), 1);
h1:=ShellExecuteW(winH, 'open', 'C:\L2\L2WKOT\L2WalkerLL.lnk', nil, nil, 1);
print('h1 '+ inttostr(h1));  // 2 // если путь ошибочен
                              // 42// программа запускается

print('winH '+ inttostr(winH));  // 0 // нну так и должно типа быть

                                      
end.
end.


L2Walker.exe запускается.
НО при попытке открыть данный процесс для патчинга (кто в курсе поймет) получаем сообщение
!! l2walker.exe (4330) cannot open process

Пробовал запускать и саму программу и ее ярлык с различными настройками. Ничего не меняется.
=================================
Мдя, тут не так, что бы Дельфи. Это скрипт движек Адреналина. Тип hwnd недоступен.
константы типа HWND_BOTTOM недоступны. Хотя это и не должно быть критично.

mouse_event и keybd_event из той же библиотеки работают.
FindWindow - вызывает ошибку доступа к памяти акцесс виолатион по адресу 0000000


Возможно есть более современные решения? Этим уже лет 10 как минимум.





 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 6:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name