Что нового

Сохранить файл атласов из текущего визуального стиля

musicstashall

Знающий
Сообщения
322
Репутация
7
Всем доброго.
Хочу сохранить ресурс из DLL-ки в файл. В частности, это PNG и тип данных нестандартный. Загружаю этот ресурс в память, а сохранить не знаю как:
Код:
Local $hInstance = _WinAPI_LoadLibraryEx("C:\Users\music\Desktop\Autumn Dreams\Autumn Dreams.msstyles", $LOAD_LIBRARY_AS_DATAFILE)
Local $hResource = _WinAPI_FindResource($hInstance, 'STREAM', 1157)
Local $iSize = _WinAPI_SizeOfResource($hInstance, $hResource)
Local $hData = _WinAPI_LoadResource($hInstance, $hResource)
Local $pData = _WinAPI_LockResource($hData)
ConsoleWrite('$hInstance: ' & $hInstance & ', $hResource: ' & $hResource & ', $iSize: ' & $iSize & ', $hData: ' & $hData & ', $pData: ' & $pData & @CR)


Это библиотека ресурсов визуального стиля, мне нужно сохранить изображение из «папки» STREAM под индексом 1157. Плиз хэлп...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Re: Сохранить ресурс в файл из DLL

В справке по функции _WinAPI_LockResource() есть пример сохранения в jpg.
Я взял этот пример и сохранил в png ресурс 'STREAM', 971 из стандартной для Win7 aero.msstyles
Просто добавил к вашему скрипту код из примера
Код:
Local $hFile = FileOpen("test.png", 2 + 16)
Local $tData = DllStructCreate('byte[' & $iSize & ']', $pData)
FileWrite($hFile, DllStructGetData($tData, 1))
FileClose($hFile)
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Re: Сохранить ресурс в файл из DLL

Ух-ты! Креативно.


Добавлено:
Сообщение автоматически объединено:

Дружище, а что, получается, что подобным образом можно создавать в памяти структуры и сохранять их в DLL??
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Re: Сохранить ресурс в файл из DLL

Теперь вопрос посложнее. Сохранили мы файл атласов, теперь надо получить его разметку $TMT_ATLASRECT, $TMT_SIZINGMARGINS, $TMT_CONTENTMARGINS. Должно получиться что-то подобное этому:
# Rects
# 8002 = TMT_ATLASRECT
1;0;8002=180,756,201,778
2;0;8002=65,680,127,724
3;0;8002=127,768,158,856
4;0;8002=127,856,158,944
5;0;8002=127,944,158,1032
6;0;8002=127,1032,158,1120
7;0;8002=65,1004,116,1092
8;0;8002=65,916,116,1004
9;0;8002=65,828,116,916
10;0;8002=65,1092,115,1180
11;0;8002=217,680,230,736
12;0;8002=201,1368,214,1424
13;0;8002=180,1004,197,1072
14;0;8002=802,590,823,670
15;0;8002=148,1288,158,1344
16;0;8002=148,1232,158,1288
17;0;8002=148,1176,158,1232
18;0;8002=148,1120,158,1176
19;0;8002=201,680,217,736
20;0;8002=180,1302,196,1358
21;0;8002=180,868,197,936
22;0;8002=158,1236,179,1316
23;0;8002=201,1088,215,1144
24;0;8002=201,976,215,1032
25;0;8002=96,1320,113,1388
26;0;8002=127,1200,148,1280
27;0;8002=201,1200,215,1256
28;0;8002=201,1144,215,1200
29;0;8002=96,1388,113,1456
30;0;8002=127,1360,148,1440
31;0;8002=217,940,228,1040
32;0;8002=180,1228,196,1302
33;0;8002=217,840,228,940
34;0;8002=802,516,824,590
35;0;8002=65,1444,82,1460
36;0;8002=201,796,216,856
37;0;8002=201,736,216,796
38;0;8002=217,1128,228,1172
39;0;8002=217,1084,228,1128
40;0;8002=217,788,230,840
41;0;8002=201,856,216,916
42;0;8002=82,1450,91,1456
43;0;8002=813,670,822,676
44;0;8002=180,1184,197,1228
45;0;8002=65,788,117,828
46;0;8002=0,0,827,76
47;0;8002=65,724,124,756
48;0;8002=65,756,124,788
49;0;8002=117,798,124,806
50;0;8002=82,1444,93,1450
51;0;8002=802,670,813,676
52;0;8002=180,680,201,734
53;0;8002=180,778,201,800
54;0;8002=117,812,122,818
55;0;8002=117,806,122,812
56;0;8002=180,1140,197,1184
57;0;8002=117,788,124,798
58;0;8002=158,680,180,1076
59;0;8002=0,680,65,1460
60;0;8002=158,1396,179,1450
61;0;8002=180,734,201,756
62;0;8002=0,76,802,680
64;0;8002=201,1312,214,1368
65;0;8002=96,1252,113,1320
66;0;8002=127,1280,148,1360
67;0;8002=802,76,827,164
68;0;8002=148,1344,158,1400
69;0;8002=96,1180,113,1252
70;0;8002=158,1076,179,1156
71;0;8002=802,428,827,516
72;0;8002=180,1358,196,1414
73;0;8002=180,800,197,868
74;0;8002=158,1156,179,1236
75;0;8002=802,340,827,428
76;0;8002=201,1256,215,1312
77;0;8002=180,936,197,1004
78;0;8002=158,1316,179,1396
79;0;8002=802,252,827,340
80;0;8002=201,1032,215,1088
81;0;8002=180,1072,197,1140
82;0;8002=127,1120,148,1200
83;0;8002=802,164,827,252
84;0;8002=180,1414,191,1458
85;0;8002=217,1040,228,1084
86;0;8002=217,736,230,788
87;0;8002=201,916,216,976
88;0;8002=127,680,158,768
89;0;8002=65,1356,96,1444
90;0;8002=65,1268,96,1356
91;0;8002=65,1180,96,1268

# Margins
# 3601 = TMT_SIZINGMARGINS
# 3602 = TMT_CONTENTMARGINS
1;0;3601=0,0,3,6
2;0;3601=30,29,0,0
3;0;3601=8,8,0,8
3;0;3602=0,0,2,9
4;0;3601=8,8,0,8
4;0;3602=0,0,2,9
5;0;3601=10,10,0,8
5;0;3602=0,4294967287,2,9
6;0;3601=10,10,0,8
6;0;3602=0,4294967287,2,9
7;0;3601=10,10,0,8
7;0;3602=1,2,2,9
8;0;3601=10,10,0,8
8;0;3602=1,2,2,9
9;0;3601=10,10,0,8
9;0;3602=2,2,2,9
10;0;3601=10,10,0,8
10;0;3602=2,2,2,9
31;0;3601=6,2,147,0
32;0;3601=0,0,17,17
33;0;3601=2,6,147,0
34;0;3601=0,0,17,17
35;0;3601=5,5,2,3
36;0;3601=2,2,2,2
36;0;3602=5,5,5,5
37;0;3601=2,2,2,2
37;0;3602=5,5,5,5
42;0;3601=3,2,0,0
43;0;3601=2,3,0,0
44;0;3601=5,5,2,1
44;0;3602=5,0,0,0
45;0;3601=24,24,17,17
45;0;3602=17,17,8,10
46;0;3601=0,0,6,2
46;0;3602=9,0,0,0
47;0;3601=28,28,0,0
47;0;3602=9,0,0,0
48;0;3601=28,28,0,0
48;0;3602=9,0,0,0
49;0;3601=6,6,1,2
50;0;3601=6,2,0,0
51;0;3601=6,2,0,0
52;0;3601=8,8,8,1
52;0;3602=8,0,0,0
53;0;3601=8,8,1,4
54;0;3601=2,0,0,0
55;0;3601=2,0,0,0
56;0;3601=0,0,2,2
56;0;3602=1,0,0,0
57;0;3601=2,2,1,2
60;0;3601=2,2,2,1
60;0;3602=0,0,0,0
61;0;3601=2,2,2,2
62;0;3601=0,0,802,604
88;0;3601=8,8,0,8
88;0;3602=0,0,2,9
89;0;3601=8,8,0,8
89;0;3602=0,0,2,9
90;0;3601=10,10,0,8
90;0;3602=0,4294967287,2,9
91;0;3601=10,10,0,8
91;0;3602=0,4294967287,2,9

То ли я нашел: GetThemeStream
Пробую что-то, сам не понимаю:
Код:
#include <WinAPITheme.au3>	
#include <APIThemeConstants.au3>
Local $hTheme = _WinAPI_OpenThemeData (0, 'DWMWINDOW'), $rect
For $i = 1 To 91
	$rect = _WinAPI_GetThemeRect($hTheme, $i, 0, $TMT_ATLASRECT)
	ConsoleWrite(DllStructGetData($rect, 1) &',' & DllStructGetData($rect, 2) &',' & DllStructGetData($rect, 3) &',' & DllStructGetData($rect, 4) & @CR) 
Next

Вроде бы получаю какие-то похожие данные, но не знаю, то это или не то. И это из текущей темы получаем, а надо бы еще из файла.
Или лучше создать отдельную тему по данным .msstyles? Так то у меня много планов по нему ;)



Добавлено:
Сообщение автоматически объединено:

Разобрался с первой секцией TMT_ATLASRECT
Код:
Local $hTheme = _WinAPI_OpenThemeData (0, 'DWMWINDOW')
Local $rect = _WinAPI_GetThemeRect($hTheme, 0, 0, $TMT_ATLASRECT), $rect, $string
ConsoleWrite('# Rects' & @CR & '# 8002 = TMT_ATLASRECT' & @CR)
For $i = 1 To 99
	$rect = _WinAPI_GetThemeRect($hTheme, $i, 0, $TMT_ATLASRECT)
	$string = DllStructGetData($rect, 1) &',' & DllStructGetData($rect, 2) &',' & DllStructGetData($rect, 3) &',' & DllStructGetData($rect, 4)	
	ConsoleWrite($i & ';0;' & $TMT_ATLASRECT & '=' & $string & @CR) 
Next
ConsoleWrite('# Margins' & @CR & '# 3601 = TMT_SIZINGMARGINS' & @CR & '# 3602 = TMT_CONTENTMARGINS' & @CR)


А вот с двумя другими не получается:

Код:
ConsoleWrite('# Margins' & @CR & '# 3601 = TMT_SIZINGMARGINS' & @CR & '# 3602 = TMT_CONTENTMARGINS' & @CR)
For $i = 1 To 99
	$rect = _WinAPI_GetThemeRect($hTheme, $i, 0, $TMT_SIZINGMARGINS)
	$string = DllStructGetData($rect, 1) &',' & DllStructGetData($rect, 2) &',' & DllStructGetData($rect, 3) &',' & DllStructGetData($rect, 4)
	ConsoleWrite($i & ';0;' & $TMT_SIZINGMARGINS & '=' & $string & @CR) 
	$rect = _WinAPI_GetThemeRect($hTheme, $i, 0, $TMT_CONTENTMARGINS)
	$string = DllStructGetData($rect, 1) &',' & DllStructGetData($rect, 2) &',' & DllStructGetData($rect, 3) &',' & DllStructGetData($rect, 4)
	ConsoleWrite($i & ';0;' & $TMT_CONTENTMARGINS & '=' & $string & @CR) 
Next


Вот оригинал, как бы:
# Rects
# 8002 = TMT_ATLASRECT
1;0;8002=336,604,420,628
2;0;8002=65,918,127,962
3;0;8002=285,1286,319,1378
4;0;8002=285,1194,319,1286
5;0;8002=285,1102,319,1194
6;0;8002=285,1010,319,1102
7;0;8002=285,918,319,1010
8;0;8002=285,826,319,918
9;0;8002=285,734,319,826
10;0;8002=285,642,319,734
11;0;8002=65,1154,114,1230
12;0;8002=65,1078,114,1154
13;0;8002=65,1002,114,1078
14;0;8002=127,794,176,870
15;0;8002=127,870,164,946
16;0;8002=127,946,164,1022
17;0;8002=176,1174,213,1250
18;0;8002=176,794,213,870
19;0;8002=213,1250,249,1326
20;0;8002=213,1174,249,1250
21;0;8002=213,1098,249,1174
22;0;8002=249,794,285,870
23;0;8002=176,718,213,794
24;0;8002=176,642,213,718
25;0;8002=176,1022,213,1098
26;0;8002=176,1250,213,1326
27;0;8002=213,1022,249,1098
28;0;8002=213,946,249,1022
29;0;8002=213,870,249,946
30;0;8002=213,794,249,870
31;0;8002=252,628,264,642
32;0;8002=353,1002,369,1076
33;0;8002=288,628,300,642
34;0;8002=319,1130,341,1204
35;0;8002=252,604,336,628
36;0;8002=353,1136,368,1196
37;0;8002=353,1076,368,1136
38;0;8002=353,858,375,930
39;0;8002=353,786,375,858
40;0;8002=353,714,375,786
41;0;8002=319,1204,341,1276
42;0;8002=276,628,288,642
43;0;8002=264,628,276,642
44;0;8002=84,604,168,642
45;0;8002=65,962,117,1002
46;0;8002=0,604,84,642
47;0;8002=628,604,687,636
48;0;8002=168,604,252,642
49;0;8002=420,604,504,628
50;0;8002=65,642,127,688
51;0;8002=65,826,127,872
52;0;8002=65,780,127,826
53;0;8002=65,688,127,734
54;0;8002=300,628,305,638
55;0;8002=305,628,310,638
56;0;8002=65,734,127,780
57;0;8002=504,604,566,628
58;0;8002=319,734,341,1130
59;0;8002=0,642,65,1422
60;0;8002=65,872,127,918
61;0;8002=566,604,628,628
62;0;8002=0,0,802,604
63;0;8002=319,642,353,734
64;0;8002=127,642,176,718
65;0;8002=127,718,176,794
66;0;8002=65,1306,114,1382
67;0;8002=65,1230,114,1306
68;0;8002=176,870,213,946
69;0;8002=127,1326,164,1402
70;0;8002=176,946,213,1022
71;0;8002=176,1098,213,1174
72;0;8002=213,642,249,718
73;0;8002=176,1326,212,1402
74;0;8002=249,946,285,1022
75;0;8002=249,870,285,946
76;0;8002=127,1022,164,1098
77;0;8002=127,1098,164,1174
78;0;8002=127,1174,164,1250
79;0;8002=127,1250,164,1326
80;0;8002=213,718,249,794
81;0;8002=249,718,285,794
82;0;8002=249,642,285,718
83;0;8002=213,1326,249,1402
84;0;8002=319,1276,341,1348
85;0;8002=319,1348,341,1420
86;0;8002=353,642,375,714
87;0;8002=353,930,375,1002
88;0;8002=249,1114,283,1206
89;0;8002=249,1206,283,1298
90;0;8002=249,1298,283,1390
91;0;8002=249,1022,283,1114
92;0;8002=319,642,353,734
93;0;8002=319,642,353,734
94;0;8002=319,642,353,734
95;0;8002=319,642,353,734
96;0;8002=319,642,353,734
97;0;8002=319,642,353,734
98;0;8002=319,642,353,734
99;0;8002=319,642,353,734

# Margins
# 3601 = TMT_SIZINGMARGINS
# 3602 = TMT_CONTENTMARGINS
1;0;3601=41,41,0,11
1;0;3602=0,4294967294,11,4294967291
2;0;3601=30,29,0,0
2;0;3602=0,4294967294,11,4294967291
3;0;3601=2,0,21,0
3;0;3602=15,0,3,0
4;0;3601=2,0,21,0
4;0;3602=15,0,3,0
5;0;3601=0,36,20,0
5;0;3602=32,4294967279,3,0
6;0;3601=0,36,20,0
6;0;3602=32,4294967279,3,0
7;0;3601=2,0,21,0
7;0;3602=4294967294,6,5,2
8;0;3601=2,0,21,0
8;0;3602=4294967294,6,5,2
9;0;3601=2,0,21,0
9;0;3602=4294967294,4294967294,5,4
10;0;3601=2,0,21,0
10;0;3602=4294967294,4294967294,5,4
11;0;3601=0,36,20,0
11;0;3602=0,4294967294,11,4294967291
12;0;3601=0,36,20,0
12;0;3602=0,4294967294,11,4294967291
13;0;3601=0,36,20,0
13;0;3602=0,4294967294,11,4294967291
14;0;3601=0,36,20,0
14;0;3602=0,4294967294,11,4294967291
15;0;3601=0,36,20,0
15;0;3602=0,4294967294,11,4294967291
16;0;3601=0,36,20,0
16;0;3602=0,4294967294,11,4294967291
17;0;3601=0,36,20,0
17;0;3602=0,4294967294,11,4294967291
18;0;3601=0,36,20,0
18;0;3602=0,4294967294,11,4294967291
19;0;3601=0,36,20,0
19;0;3602=0,4294967294,11,4294967291
20;0;3601=0,36,20,0
20;0;3602=0,4294967294,11,4294967291
21;0;3601=0,36,20,0
21;0;3602=0,4294967294,11,4294967291
22;0;3601=0,36,20,0
22;0;3602=0,4294967294,11,4294967291
23;0;3601=0,36,20,0
23;0;3602=0,4294967294,11,4294967291
24;0;3601=0,36,20,0
24;0;3602=0,4294967294,11,4294967291
25;0;3601=0,36,20,0
25;0;3602=0,4294967294,11,4294967291
26;0;3601=0,36,20,0
26;0;3602=0,4294967294,11,4294967291
27;0;3601=0,36,20,0
27;0;3602=0,4294967294,11,4294967291
28;0;3601=0,36,20,0
28;0;3602=0,4294967294,11,4294967291
29;0;3601=0,36,20,0
29;0;3602=0,4294967294,11,4294967291
30;0;3601=0,36,20,0
30;0;3602=0,4294967294,11,4294967291
31;0;3601=11,0,1,1
31;0;3602=0,4294967294,11,4294967291
32;0;3601=0,0,17,17
32;0;3602=0,4294967294,11,4294967291
33;0;3601=0,11,1,1
33;0;3602=0,4294967294,11,4294967291
34;0;3601=0,0,17,17
34;0;3602=0,4294967294,11,4294967291
35;0;3601=41,41,0,11
35;0;3602=0,4294967294,11,4294967291
36;0;3601=4,4,4,4
36;0;3602=4294967291,2,0,0
37;0;3601=4,4,4,4
37;0;3602=4294967291,2,0,0
38;0;3601=0,36,20,0
38;0;3602=0,4294967294,11,4294967291
39;0;3601=0,36,20,0
39;0;3602=0,4294967294,11,4294967291
40;0;3601=0,36,20,0
40;0;3602=0,4294967294,11,4294967291
41;0;3601=0,36,20,0
41;0;3602=0,4294967294,11,4294967291
42;0;3601=11,0,1,1
42;0;3602=0,4294967294,11,4294967291
43;0;3601=0,11,1,1
43;0;3602=0,4294967294,11,4294967291
44;0;3601=41,41,16,0
44;0;3602=14,0,1,0
45;0;3601=24,25,17,18
45;0;3602=17,17,8,10
46;0;3601=41,41,16,0
46;0;3602=14,0,1,0
47;0;3601=28,28,0,0
47;0;3602=0,4294967294,11,4294967291
48;0;3601=41,41,16,0
48;0;3602=14,0,1,0
49;0;3601=41,41,0,11
49;0;3602=0,4294967294,11,4294967291
50;0;3601=4,0,0,0
50;0;3602=0,4294967294,11,4294967291
51;0;3601=0,4,0,0
51;0;3602=0,4294967294,11,4294967291
52;0;3601=30,30,24,0
52;0;3602=9,0,0,0
53;0;3601=0,0,1,1
53;0;3602=0,4294967294,11,4294967291
54;0;3601=4,0,0,0
54;0;3602=0,4294967294,11,4294967291
55;0;3601=0,4,0,0
55;0;3602=0,4294967294,11,4294967291
56;0;3601=30,30,24,0
56;0;3602=7,0,0,0
57;0;3601=30,30,0,11
57;0;3602=0,4294967294,11,4294967291
58;0;3601=0,36,20,0
58;0;3602=0,4294967294,11,4294967291
59;0;3601=0,36,20,0
59;0;3602=0,4294967294,11,4294967291
60;0;3601=30,30,24,0
60;0;3602=9,0,0,0
61;0;3601=30,30,0,11
61;0;3602=0,4294967294,11,4294967291
62;0;3601=0,36,20,0
62;0;3602=0,4294967294,11,4294967291
63;0;3601=0,36,20,0
63;0;3602=0,4294967294,11,4294967291
64;0;3601=0,36,20,0
64;0;3602=0,4294967294,11,4294967291
65;0;3601=0,36,20,0
65;0;3602=0,4294967294,11,4294967291
66;0;3601=0,36,20,0
66;0;3602=0,4294967294,11,4294967291
67;0;3601=0,36,20,0
67;0;3602=0,4294967294,11,4294967291
68;0;3601=0,36,20,0
68;0;3602=0,4294967294,11,4294967291
69;0;3601=0,36,20,0
69;0;3602=0,4294967294,11,4294967291
70;0;3601=0,36,20,0
70;0;3602=0,4294967294,11,4294967291
71;0;3601=0,36,20,0
71;0;3602=0,4294967294,11,4294967291
72;0;3601=0,36,20,0
72;0;3602=0,4294967294,11,4294967291
73;0;3601=0,36,20,0
73;0;3602=0,4294967294,11,4294967291
74;0;3601=0,36,20,0
74;0;3602=0,4294967294,11,4294967291
75;0;3601=0,36,20,0
75;0;3602=0,4294967294,11,4294967291
76;0;3601=0,36,20,0
76;0;3602=0,4294967294,11,4294967291
77;0;3601=0,36,20,0
77;0;3602=0,4294967294,11,4294967291
78;0;3601=0,36,20,0
78;0;3602=0,4294967294,11,4294967291
79;0;3601=0,36,20,0
79;0;3602=0,4294967294,11,4294967291
80;0;3601=0,36,20,0
80;0;3602=0,4294967294,11,4294967291
81;0;3601=0,36,20,0
81;0;3602=0,4294967294,11,4294967291
82;0;3601=0,36,20,0
82;0;3602=0,4294967294,11,4294967291
83;0;3601=0,36,20,0
83;0;3602=0,4294967294,11,4294967291
84;0;3601=0,36,20,0
84;0;3602=0,4294967294,11,4294967291
85;0;3601=0,36,20,0
85;0;3602=0,4294967294,11,4294967291
86;0;3601=0,36,20,0
86;0;3602=0,4294967294,11,4294967291
87;0;3601=0,36,20,0
87;0;3602=0,4294967294,11,4294967291
88;0;3601=2,0,21,0
88;0;3602=15,0,3,0
89;0;3601=2,0,21,0
89;0;3602=15,0,3,0
90;0;3601=0,36,20,0
90;0;3602=32,4294967279,3,0
91;0;3601=0,36,20,0
91;0;3602=32,4294967279,3,0
92;0;3601=0,36,20,0
92;0;3602=0,4294967294,11,4294967291
93;0;3601=0,36,20,0
93;0;3602=0,4294967294,11,4294967291
94;0;3601=0,36,20,0
94;0;3602=0,4294967294,11,4294967291
95;0;3601=0,36,20,0
95;0;3602=0,4294967294,11,4294967291
96;0;3601=0,36,20,0
96;0;3602=0,4294967294,11,4294967291
97;0;3601=0,36,20,0
97;0;3602=0,4294967294,11,4294967291
98;0;3601=0,36,20,0
98;0;3602=0,4294967294,11,4294967291
99;0;3601=0,36,20,0
99;0;3602=0,4294967294,11,4294967291

Например, в оригинале значение: 1;0;3602=0,4294967294,11,4294967291
А у меня: 1;0;3602=0,-2,11,-5
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Re: Сохранить ресурс в файл из DLL

musicstashall [?]
Теперь вопрос посложнее
Это конкурс или собеседование? ;D

Например, в оригинале значение: 1;0;3602=0,4294967294,11,4294967291
А у меня: 1;0;3602=0,-2,11,-5
Это разный тип данных - со знаком и без
Код:
$t = DllStructCreate("long") ; со знаком
DllStructSetData($t, 1, 4294967291)
ConsoleWrite(DllStructGetData($t, 1) & @CRLF) ; -5
DllStructSetData($t, 1, -5)
ConsoleWrite(DllStructGetData($t, 1) & @CRLF) ; -5

$t = DllStructCreate("ulong") ; без знака
DllStructSetData($t, 1, 4294967291)
ConsoleWrite(DllStructGetData($t, 1) & @CRLF) ; 4294967291
DllStructSetData($t, 1, -5)
ConsoleWrite(DllStructGetData($t, 1) & @CRLF) ; 4294967291

Функция _WinAPI_GetThemeRect() использует $tagRECT, которая описана через long. Поэтому, здесь два варианта.
1. Описать собственную структуру через ulong
Код:
Const $tagRECT_UL = "ulong Left;ulong Top;ulong Right;ulong Bottom"
и переписать функцию _WinAPI_GetThemeRect: заменить $tagRECT на $tagRECT_UL.

2. Конвертировать результат оригинальной функции из long в ulong
Код:
; результат работы _WinAPI_GetThemeRect
$tRECT = DllStructCreate("long Left;long Top;long Right;long Bottom")
$tRECT.Left = 0
$tRECT.Top = -2
$tRECT.Right = 11
$tRECT.Bottom = -5
ConsoleWrite($tRECT.Left &","& $tRECT.Top &","& $tRECT.Right &","& $tRECT.Bottom & @CRLF) ; 0,-2,11,-5

; конвертация
$tagRECT_UL = "ulong Left;ulong Top;ulong Right;ulong Bottom"
$tUL = DllStructCreate($tagRECT_UL, DllStructGetPtr($tRECT))
ConsoleWrite($tUL.Left &","& $tUL.Top &","& $tUL.Right &","& $tUL.Bottom & @CRLF) ; 0,4294967294,11,4294967291
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Re: Сохранить ресурс в файл из DLL

Вонана што :laugh:

Благодарю
 
Верх