Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 17:30   #1
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию SaveToFile в 32 битном приложении на 64 битной ОС.

Delphi XE3
32 bit Приложение
ОС х64 Windows 8
При сохранении Битмапа
Код:
Image.Picture.Bitmap.SaveToFile('C:/Windows/System32/oobe/OEMLogo.bmp');
сохранение происходит в:
Код:
C:\Windows\SysWOW64\oobe\
а надо в:
Код:
C:\Windows\System32\oobe\
Как создавая 32-битное Приложении, и работая в 64-битной ОС, правильно задавать путь для сохранения?

П.С. с реестром понятно, используя ключи: KEY_WOW64_32KEY, KEY_WOW64_64KEY, а тут я честно говоря в неведении.
XerSon вне форума Ответить с цитированием
Старый 27.12.2012, 00:15   #2
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Ребят, что реально не кто не сталкивался?
XerSon вне форума Ответить с цитированием
Старый 27.12.2012, 00:40   #3
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Вас спасет Wow64DisableWow64FsRedirection
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 27.12.2012, 15:33   #4
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Вас спасет Wow64DisableWow64FsRedirection
Видать не спасет, нет такой функции в модуле Windows.
XerSon вне форума Ответить с цитированием
Старый 27.12.2012, 16:02   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Спасло же Выложи сам код, а то ты его наверно допилил. Может кому ещё пригодится.
FaTaL вне форума Ответить с цитированием
Старый 27.12.2012, 16:47   #6
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Спасло же Выложи сам код, а то ты его наверно допилил. Может кому ещё пригодится.
Без тебе не спасло бы.

Пришлось грузить две функции из Kernel32.dll

Wow64EnableWow64FsRedirection
Wow64DisableWow64FsRedirection

Код:
procedure ExtWow64DisableWow64FsRedirection;
var
  dll : Hwnd;
  func : procedure ; stdcall;
begin
  dll := LoadLibrary('Kernel32.dll');
  @func := GetProcAddress(dll, 'Wow64DisableWow64FsRedirection');
  func;
  FreeLibrary(dll);
end;

procedure ExtWow64EnableWow64FsRedirection;
var
  dll : Hwnd;
  func : procedure ; stdcall;
begin
  dll := LoadLibrary('Kernel32.dll');
  @func := GetProcAddress(dll, 'Wow64EnableWow64FsRedirection');
  func;
  FreeLibrary(dll);
end;
Всем Огромное Спасибо!
XerSon вне форума Ответить с цитированием
Старый 27.12.2012, 17:43   #7
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

После выключения перенаправления лучше возвращать функцией Wow64RevertWow64FsRedirection.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 27.12.2012, 19:16   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

и данный код работает хотите сказать?
ох навылетает же он потом

прототипы и пример смотрим.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.12.2012, 19:28   #9
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
и данный код работает хотите сказать?
ох навылетает же он потом

прототипы и пример смотрим.
Работает

Код:
procedure TOEMfrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
// После выключения перенаправления лучше возвращать функцией
ExtWow64RevertWow64FsRedirection;  // так пашет
end;

procedure TOEMfrm.FormCreate(Sender: TObject);
begin
// Отключаем перенаправление
ExtWow64DisableWow64FsRedirection; // так пашет
end;
32 битное приложение, одинаково пишет в 32 и 64 битной ОС!
XerSon вне форума Ответить с цитированием
Старый 27.12.2012, 19:38   #10
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

У меня так работает:
Код:
var
  dll : Hwnd;
  OldValue : Pointer;
  Wow64Disable : function (v: Pointer): integer; stdcall;
  Wow64Enable : function (v: Pointer): integer; stdcall;
  sl : TStringList;
begin
  OldValue := nil;
  dll := LoadLibrary('Kernel32.dll');
  @Wow64Disable := GetProcAddress(dll, 'Wow64DisableWow64FsRedirection');
  @Wow64Enable := GetProcAddress(dll, 'Wow64RevertWow64FsRedirection');
  Wow64Disable(@OldValue);
  sl := TStringList.Create;
  sl.SaveToFile('C:\Windows\System32\oobe\WOW64.TXT');
  Wow64Enable(OldValue);
  sl.SaveToFile('C:\Windows\System32\oobe\WOW64NOT.TXT');
  sl.Free;
  FreeLibrary(dll);
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование на Си в 64 битной системе MrBrain Общие вопросы C/C++ 3 13.12.2011 10:22
Как записать верхнее и нижнее слова в 32-битном числе в Delphi? red-eye Помощь студентам 4 07.12.2011 20:47
Чайник с 64 битной системой Руслан Сабиров Свободное общение 5 28.10.2011 14:18
DirectDraw. Проблема с рисованием в 8-битном режиме EnergyStar Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 27.08.2011 18:44
RC6 на 32 битной платформе. Ghost of Night Общие вопросы Delphi 0 02.07.2011 01:14