JwaWindows.RESTOREPOINTINFO как правильно получить текст и записать в Windows

yemets63
Дата: 07.08.2019 18:52:20
Delphi XE10
делаю точку восстановления Windows, пишу Discription
для этого беру тип JwaWindows.RESTOREPOINTINFO

typedef struct _RESTOREPTINFO {
  DWORD dwEventType;
  DWORD dwRestorePtType;
  INT64 llSequenceNumber;
  TCHAR szDescription[MAX_DESC];
} RESTOREPOINTINFO, *PRESTOREPOINTINFO;


у него два предложенных варианта кодовых страниц, которых я знаю
RESTOREPOINTINFOW (Unicode) and RESTOREPOINTINFOA (ANSI)

как правильно в Delphi записать Description , чтобы он правильно отображался в Windows

я делаю вот так

var
  restorePoint: JwaWindows.RESTOREPOINTINFO;
...
begin
...
   move(mDescr, restorePoint.szDescription, length(mDescr) * 2);
...


на вхоже mDescr как русские так и латиница, на выходе szDescription непонятно из какой кодовой стрницы

надо писать конвертатор или что то попробовать можно, я перепробовал ряд стандартных функций из инета, результат положительный не получил.

кто что скажет? в JwaWindows. UTF8 - не нашел_ да его в Windows и не запишешь.
_Vasilisk_
Дата: 07.08.2019 19:12:20
var
  restorePoint: JwaWindows.RESTOREPOINTINFO;
  LDesc: string;
...
begin
...
   move(LDesc[1], restorePoint.szDescription, (length(mDescr) + 1) * SizeOf(LDesc[1]));
...

Или
StrPCopy(restorePoint.szDescription, LDesc)
alekcvp
Дата: 07.08.2019 19:23:57
_Vasilisk_
   move(LDesc[1], restorePoint.szDescription, (length(mDescr) + 1) * SizeOf(LDesc[1]));

А если вдруг mDescr = '' ?..
_Vasilisk_
Дата: 07.08.2019 19:27:42
alekcvp
А если вдруг mDescr = '' ?..
Да
_Vasilisk_
Дата: 07.08.2019 19:32:59
alekcvp
А если вдруг mDescr = '' ?..
А еще оно может быть больше MAX_DESC
Zelius
Дата: 07.08.2019 19:37:45
yemets63,

  move(LDesc^, @restorePoint.szDescription[0], (length(mDescr) + 1) * SizeOf(LDesc[1]));

?
yemets63
Дата: 07.08.2019 21:34:53
спасибо, утром проверю, много часов работал, глаза не видят, голова не понимает. спать спать спать.
X-Cite
Дата: 07.08.2019 21:38:49
Если LDesc это string, то надо так
Move(PChar(LDesc)^,.....)


и не SizeOf(LDesc[1]) а лучше StringElementSize(LDesc)
yemets63
Дата: 08.08.2019 10:04:47
_Vasilisk_,

СПАСИБО.

для меня лучшее решение,

StrPCopy(restorePoint.szDescription, LDesc)


проверил много раз, работает, разные тексты, и даже русский
_Vasilisk_
Дата: 08.08.2019 14:31:09
yemets63
для меня лучшее решение,
Только смотри, чтобы длина строки не вылезла за MAX_DESC