На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как запустить C:\Windows\System32\osk.exe x64 из под 32-битного приложения?
    Пререпробывал всякого коду разног ничто не запускает C:\Windows\System32\osk.exe ,
    из любой не системной директории пожалуйста а из системной низя.
    Сообщение отредактировано: Jiro -
      Выяснилось что для запуска C:\Windows\System32\osk.exe в win64 нужно иметь win64 приложение.
      А как из под win32 приложения запустить 64-ную версию osk ?
        Что значит "нельзя"? Заповеди запрещают, что ли?
        Откуда "выяснилось"?
        Как пробовал, какие коды ошибок возвращают функции?
        Кто так вопросы задает, ты программер или бабка с базара? Чесслово, фейспалм
          Fr0sT
          Я конечно же базарная бабка, но "нельзя" я не писал, это вы меня оклеветали :D
          А выяснилось методом тыка.
          Поскольку никаких ошибок не вылетало, я как-то не додумался посмотреть результат функции, гляну позже.

          Формат вопроса такой примитивный, потому что расчёт на то что кто-то с таким сталкивался и знает что по чем.
          Я вот к примеру не первый день семками на базаре торгую, но с проблемой запуска 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 как-то нехочется
          Сообщение отредактировано: Jiro -
            Цитата Jiro @
            Я конечно же базарная бабка, но "нельзя" я не писал, это вы меня оклеветали

            Цитата Jiro @
            низя


            Цитата Jiro @
            Посмотрел, код ошибки ERROR_PATH_NOT_FOUND , хотя из под x64 тот же путь работает ...

            На SysWOW напоролся? https://www.howtogeek.com/326509/whats-the-...ers-in-windows/ оно?
              Все просто, нужно отключить редирект на 32 битную папку
              ExpandedWrap disabled
                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 запускает
                Цитата ^D^ima @
                И да, невозможно запустить 32 битную osk версия из-за "Запрошенная операция требует повышения" т.е. ещё можно покапать в сторону UAC, возможно манифестом можно решить эту проблему. Только почему запускаются с пониженными правами непонянтно. Даже если запустить программно 32 битную cmd и там написать osk тоже будет ошибка, хотя та-же 32 битная cmd из проводника винды osk запускает

                use ShellExecute Luke :)
                  Цитата Rouse_ @
                  use ShellExecute Luke

                  так с ней и не запускает :)
                    Нукась покаж код, у меня вроде как запускало.
                      Как в 7 постеshellexecute
                        Смотри
                        Прикреплённый файлПрикреплённый файлqweqwe.gif (1,36 Мбайт, скачиваний: 553)
                          Да емое, ты просто shell execute голый выполни в 32 битной дельфи
                          Сообщение отредактировано: ^D^ima -
                            Ааа, 32 битной винды у меня нет :)
                            А чистый ShellExecute без отключения перенаправления тоже сработал
                            Сообщение отредактировано: Rouse_ -
                              32 бмтной дельфи на 64 битной системе. В метро неудобно писать
                                Ну, я это и сделал, из 32 битной дельфи на 64 битной винде вот такой код все запускает :)

                                ExpandedWrap disabled
                                  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.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0420 ]   [ 18 queries used ]   [ Generated: 16.04.24, 12:21 GMT ]