Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.69.151] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Пререпробывал всякого коду разног ничто не запускает C:\Windows\System32\osk.exe ,
из любой не системной директории пожалуйста а из системной низя. |
Сообщ.
#2
,
|
|
|
Выяснилось что для запуска C:\Windows\System32\osk.exe в win64 нужно иметь win64 приложение.
А как из под win32 приложения запустить 64-ную версию osk ? |
Сообщ.
#3
,
|
|
|
Что значит "нельзя"? Заповеди запрещают, что ли?
Откуда "выяснилось"? Как пробовал, какие коды ошибок возвращают функции? Кто так вопросы задает, ты программер или бабка с базара? Чесслово, фейспалм |
Сообщ.
#4
,
|
|
|
Fr0sT
Я конечно же базарная бабка, но "нельзя" я не писал, это вы меня оклеветали А выяснилось методом тыка. Поскольку никаких ошибок не вылетало, я как-то не додумался посмотреть результат функции, гляну позже. Формат вопроса такой примитивный, потому что расчёт на то что кто-то с таким сталкивался и знает что по чем. Я вот к примеру не первый день семками на базаре торгую, но с проблемой запуска osk.exe(64bit) из под my.exe(32bit) сталкиваюсь первый раз. Добавлено Посмотрел, код ошибки ERROR_PATH_NOT_FOUND , хотя из под x64 тот же путь работает ... Добавлено если путь задавать как C:\Windows\WinSxS\amd64_microsoft-windows-osk_31bf3856ad364e35_10.0.17134.1_none_903d5fc3c319176b\osk.exe то запускается если C:\Windows\system32\osk.exe то нет. Но путь C:\Windows\WinSxS\amd64_microsoft-windows-osk_31bf3856ad364e35_10.0.17134.1_none_903d5fc3c319176b это скорее динамический путь чем статический, а искать osk.exe по всему каталогу Windows как-то нехочется |
Сообщ.
#5
,
|
|
|
Цитата Jiro @ Я конечно же базарная бабка, но "нельзя" я не писал, это вы меня оклеветали Цитата Jiro @ низя Цитата Jiro @ Посмотрел, код ошибки ERROR_PATH_NOT_FOUND , хотя из под x64 тот же путь работает ... На SysWOW напоролся? https://www.howtogeek.com/326509/whats-the-...ers-in-windows/ оно? |
Сообщ.
#6
,
|
|
|
Все просто, нужно отключить редирект на 32 битную папку
Function Wow64DisableWow64FsRedirection(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall; External 'Kernel32.dll' Name 'Wow64DisableWow64FsRedirection'; Var Wow64FsEnableRedirection: LongBool; begin if Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection) then ShellExecute(0,nil, 'osk.exe', nil, nil, SW_show); end; Добавлено И да, невозможно запустить 32 битную osk версия из-за "Запрошенная операция требует повышения" т.е. ещё можно покапать в сторону UAC, возможно манифестом можно решить эту проблему. Только почему запускаются с пониженными правами непонянтно. Даже если запустить программно 32 битную cmd и там написать osk тоже будет ошибка, хотя та-же 32 битная cmd из проводника винды osk запускает |
Сообщ.
#7
,
|
|
|
Цитата ^D^ima @ И да, невозможно запустить 32 битную osk версия из-за "Запрошенная операция требует повышения" т.е. ещё можно покапать в сторону UAC, возможно манифестом можно решить эту проблему. Только почему запускаются с пониженными правами непонянтно. Даже если запустить программно 32 битную cmd и там написать osk тоже будет ошибка, хотя та-же 32 битная cmd из проводника винды osk запускает use ShellExecute Luke |
Сообщ.
#8
,
|
|
|
Цитата Rouse_ @ use ShellExecute Luke так с ней и не запускает |
Сообщ.
#9
,
|
|
|
Нукась покаж код, у меня вроде как запускало.
|
Сообщ.
#10
,
|
|
|
Как в 7 постеshellexecute
|
Сообщ.
#11
,
|
|
|
Смотри
Прикреплённый файлqweqwe.gif (1,36 Мбайт, скачиваний: 554) |
Сообщ.
#12
,
|
|
|
Да емое, ты просто shell execute голый выполни в 32 битной дельфи
|
Сообщ.
#13
,
|
|
|
Ааа, 32 битной винды у меня нет
А чистый ShellExecute без отключения перенаправления тоже сработал |
Сообщ.
#14
,
|
|
|
32 бмтной дельфи на 64 битной системе. В метро неудобно писать
|
Сообщ.
#15
,
|
|
|
Ну, я это и сделал, из 32 битной дельфи на 64 битной винде вот такой код все запускает
program Project32; {$APPTYPE CONSOLE} {$R *.res} uses Windows, System.SysUtils, ShellAPI; var hRes: HINST; begin try hRes := ShellExecute(0,nil, 'osk.exe', nil, nil, SW_show); if hRes <= HINSTANCE_ERROR then RaiseLastOSError; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end. |