Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.63.87] |
|
Сообщ.
#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 Мбайт, скачиваний: 555) |
Сообщ.
#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. |
Сообщ.
#16
,
|
|
|
Добавлено
Цитата ^D^ima @ Все просто, нужно отключить редирект на 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 запускает Wow вот это работает, большое Збазибо. Что-то давно слышал про какие-то редиректы, но в живую первый раз столкнулся. Добавлено Цитата Rouse_ @ А чистый ShellExecute без отключения перенаправления тоже сработал Интересно как это, у меня не сработал при тех-же условиях. Добавлено Цитата Fr0sT @ На SysWOW напоролся? https://www.howtogeek.com/326509/whats-the-...ers-in-windows/ оно? В SysWow увы оска нету, в винде 64 нету 32 битного оска совсем. |
Сообщ.
#17
,
|
|
|
Цитата Jiro @ В SysWow увы оска нету, в винде 64 нету 32 битного оска совсем. Забавно, в 7 винде и 8 есть а в 10 выпелили. Но у меня 7 винда, и именно 32 битная osk не запускалась |
Сообщ.
#18
,
|
|
|
Jiro
Ты глянь таск менеджером на всякий случай когда ты обычным методом запускаешь, что за osk пытается запуститься? Прикреплённый файлosk.png (38,64 Кбайт, скачиваний: 397) |
Сообщ.
#19
,
|
|
|
Ну на Win10_x64 запускается из C:\Windows\System32, как бы других осков вообще нету, ну кроме там одного который в спец папке (видимо после обновления прилетел)
А вот в Win7_x64 32-битный osk не запускается, вместо него запускается 64-битный и тоже из C:\Windows\System32, даже если указать путь C:\Windows\SysWOW64\osk.exe всё равно запускается 64-битный, пробовал по разному и разными утилитами. Даже если скопировать C:\Windows\SysWOW64\osk.exe на диск D: и запустить D:\osk.exe то запускается C:\Windows\System32\osk.exe. Такие вот приколы )) Win7 кстати пропатчена по последнему писку MS. |