More cleanup; this will most likely be the last update
[tmpluginclone.git] / wallpaper.c
blob4e614968ee6aa10c7d5c0475533b2e44141fc382
1 #include <windows.h>
2 #include <defs.h>
4 #include <stdarg.h>
7 //-------------------------------------------------------------------------
8 // Function declarations
10 signed int tjsf_setwallpaper(int a1, int a2, int a3, int a4, int a5, signed int a6, int *a7);
11 // signed int tjsf_getwallpaper(int a1, int a2, int a3, int a4, int a5, int a6);
12 int sub_10001E40(void *this, int a2, int a3);
13 // int sub_10001F00(int a1, int a2, int a3, ...);
14 // int sub_10001FC0(int a1, int a2, ...);
15 // int sub_10002080(int a1, int a2, ...);
16 // int sub_10002140(int a1, int a2, ...);
18 //-------------------------------------------------------------------------
19 // Data declarations
21 IID rclsid = { 1963230976u, 61215u, 4560u, { 152u, 136u, 0u, 96u, 151u, 222u, 172u, 249u } }; // idb
22 //75048700-EF1F-11D0-9888-006097DEACF9: UserAssist
23 IID riid = { 4103138048u, 4672u, 4561u, { 152u, 136u, 0u, 96u, 151u, 222u, 172u, 249u } }; // idb
24 //F490EB00-1240-11D1-9888-006097DEACF9: IActiveDesktop
25 int dword_1000A038 = 3; // weak
26 wchar_t *off_1000A03C[3] = { L".bmp", L".png", L".jpg" }; // weak
27 BYTE a2[] = { 50u, 0u }; // idb
28 BYTE Data[] = { 49u, 0u }; // idb
29 char byte_1000D2B4 = '\0'; // weak
31 //----- (10001200) --------------------------------------------------------
32 signed int tjsf_setwallpaper(int this, int flag, int membername, int hint, int result, signed int numparams, int *param)
34 int v13; // esi
35 int v23; // rax
36 int v25; // rax
37 __int64 v38; // rax
38 uint8_t v39; // al
39 __int64 v44; // rax
40 uint8_t v45; // al
41 int v46; // ebp
42 int v48; // esi
43 wchar_t *v55; // edi
44 int *v57; // esi
45 int v63; // esi
46 int v70; // esi
47 int v73; // eax
48 const BYTE *v74; // eax
49 const BYTE *v75; // eax
50 void *v78; // eax
51 int v79; // esi
52 LPVOID ppv; // [esp+A8h] [ebp-44Ch]
53 char v83; // [esp+ACh] [ebp-448h]
54 char v84; // [esp+B0h] [ebp-444h]
55 HKEY phkResult; // [esp+B4h] [ebp-440h]
56 int v86; // [esp+B8h] [ebp-43Ch]
57 char v87; // [esp+BCh] [ebp-438h]
58 char v88; // [esp+C0h] [ebp-434h]
59 char v89; // [esp+C4h] [ebp-430h]
60 char v92; // [esp+D0h] [ebp-424h]
61 char v93; // [esp+DCh] [ebp-418h]
62 char v94; // [esp+E0h] [ebp-414h]
63 char v95; // [esp+E4h] [ebp-410h]
64 CHAR String; // [esp+E8h] [ebp-40Ch]
65 char v97; // [esp+E9h] [ebp-40Bh]
67 if ( membername )
68 return TJS_E_MEMBERNOTFOUND;
69 if ( !numparams )
70 return TJS_E_BADPARAMCOUNT;
71 ("tTJSVariant::tTJSVariant()")(&v92);
72 if ( ("tTJSVariantType tTJSVariant::Type()")(param[0]) == 1 )
74 v13 = ("iTJSDispatch2 * tTJSVariant::AsObjectNoAddRef() const")(param[0]);
75 if ( !FIND_AND_GET_MEMBER(L"storage", v13, &v92) )
77 ("void ::TVPThrowExceptionMessage(const tjs_char *)")(L"storage(設定する壁紙)が指定されていないよ。\n壁紙を消すときは「storage=\"\"」って指定してね。");
78 ("tTJSVariant::~ tTJSVariant()")(&v92);
79 return TJS_E_INVALIDPARAM;
81 if ( ("tTJSVariantType tTJSVariant::Type()")(&v92) != 2 )
83 ("void ::TVPThrowExceptionMessage(const tjs_char *)")(L"storageが文字列じゃないよ。");
84 ("tTJSVariant::~ tTJSVariant()")(&v92);
85 return TJS_E_INVALIDPARAM;
87 ("tTJSVariant::tTJSVariant()")(&v89);
88 if ( !FIND_AND_GET_MEMBER(L"tile", v13, &v89) )
89 goto LABEL_142;
90 v23 = ("tTVInteger tTJSVariant::AsInteger() const")(&v89);
91 v86 = 1;
92 if ( !v23 )
93 LABEL_142:
94 v86 = 0;
95 if ( !FIND_AND_GET_MEMBER(L"magnify", v13, &v89) )
96 goto LABEL_143;
97 v25 = ("tTVInteger tTJSVariant::AsInteger() const")(&v89);
98 ppv = (LPVOID)1;
99 if ( !v25 )
100 LABEL_143:
101 ppv = 0;
102 ("tTJSVariant::~ tTJSVariant()")(&v89);
104 else
106 if ( ("tTJSVariantType tTJSVariant::Type()")(param[0]) != 2 )
108 ("void ::TVPThrowExceptionMessage(const tjs_char *)")(L"storage");
109 ("tTJSVariant::~ tTJSVariant()")(&v92);
110 return TJS_E_INVALIDPARAM;
112 ("tTJSVariant & tTJSVariant::operator =(const tTJSVariant &)")(&v92, param[0]);
113 if ( numparams < 2 )
114 goto LABEL_144;
115 if ( ("tTJSVariantType tTJSVariant::Type()")(param[1]) != 4 )
116 goto LABEL_144;
117 LODWORD(v38) = ("tTVInteger tTJSVariant::AsInteger() const")(param[1]);
118 if ( v38 )
119 v39 = 1;
120 else
121 LABEL_144:
122 v39 = 0;
123 v86 = v39;
124 if ( numparams < 3 )
125 goto LABEL_145;
126 if ( ("tTJSVariantType tTJSVariant::Type()")(param[1]) != 4 )
127 goto LABEL_145;
128 LODWORD(v44) = ("tTVInteger tTJSVariant::AsInteger() const")(param[2]);
129 if ( v44 )
130 v45 = 1;
131 else
132 LABEL_145:
133 v45 = 0;
134 ppv = (LPVOID)v45;
136 String = byte_1000D2B4;
137 memset(&v97, 0, 0x3FCu);
138 v48 = ("tTJSVariantString * tTJSVariant::AsString() const")(&v92);
139 // Find wallpaper if extension
140 v46 = 0;
141 ("tTJSString::tTJSString(tTJSVariantString *)")(&v93, v48);
142 sub_10001FC0(v48, (int)&v88, &v93);
143 ("tTJSString::~ tTJSString()")(&v93);
144 if ( ("tjs_int tTJSString::length() const")(&v88) > 0 )
146 ("void tTJSString::ToLowerCase()")(&v88);
147 if ( dword_1000A038 - 1 >= 0 )
149 for (v46 = 0; i < dword_1000A038; v46 += 1)
151 if ( ("bool tTJSString::operator ==(const tjs_char *) const")(&v88, off_1000A03C[v46]) )
152 break;
156 v57 = (int *)("tTJSVariantString * tTJSVariant::AsString() const")(&v92);
157 ("tTJSString::tTJSString(tTJSVariantString *)")(&v94, v57);
158 sub_10002080((int)v57, (int)&v95, &v94);
159 ("tTJSString::~ tTJSString()")(&v94);
160 ("tTJSString::tTJSString(const tjs_char *)")(&v83, L"\0");
161 if ( v46 < dword_1000A038 )
163 v57 = (int *)&off_1000A03C[v46];
164 while ( 1 )
166 sub_10001E40(&v95, (int)&v87, *v57);
167 if ( ("bool ::TVPIsExistentStorage(const ttstr &)")(&v87) )
168 break;
169 ("tTJSString::~ tTJSString()")(&v87);
170 ++v46;
171 ++v57;
172 if ( v46 >= dword_1000A038 )
173 goto LABEL_116;
175 v63 = sub_10002140((int)v57, (int)&v84, &v87);
176 ("tTJSString & tTJSString::operator =(const tTJSString &)")(&v83, v63);
177 ("tTJSString::~ tTJSString()")(&v84);
178 ("void ::TVPGetLocalName(ttstr &)")(&v83);
179 v57 = (int *)("tjs_int tTJSString::GetNarrowStrLen() const")(&v83);
180 ("void tTJSString::ToNarrowStr(tjs_nchar *,tjs_int) const")(&v83, &String, v57);
181 ("tTJSString::~ tTJSString()")(&v87);
183 LABEL_116:
184 v70 = sub_10001F00((int)v57, (int)&v84, (int)L"search result: ", &v83);
185 ("void ::TVPAddLog(const ttstr &)")(v70);
186 ("tTJSString::~ tTJSString()")(&v84);
187 RegOpenKeyA(HKEY_CURRENT_USER, "Control Panel\\desktop\\", &phkResult);
188 v73 = lstrlenA(&String);
189 RegSetValueExA(phkResult, "Wallpaper", 0, 1u, (const BYTE *)&String, v73 + 1);
190 v74 = Data;
191 if ( !v86 )
192 v74 = (const BYTE *)"0";
193 RegSetValueExA(phkResult, "TileWallpaper", 0, 1u, v74, 4u);
194 v75 = ::flag;
195 if ( !ppv )
196 v75 = (const BYTE *)"0";
197 RegSetValueExA(phkResult, "WallpaperStyle", 0, 1u, v75, 4u);
198 RegCloseKey(phkResult);
199 SystemParametersInfoA(0x14u, 0, &String, 3u);
200 if ( v46 )
202 if ( ("bool tTJSString::operator !=(const tjs_char *) const")(&v83, L"\0") )
204 CoInitialize(0);
205 if ( CoCreateInstance(&rclsid, 0, 1u, &riid, &ppv) >= 0 )
207 *(_DWORD *)&v89 = 12;
208 if ( (*(int (__stdcall **)(LPVOID, char *, _DWORD))(*(_DWORD *)ppv + 44))(ppv, &v89, 0) >= 0 )
209 (*(void (__stdcall **)(LPVOID, signed int))(*(_DWORD *)ppv + 12))(ppv, 7);
210 (*(void (__stdcall **)(LPVOID))(*(_DWORD *)ppv + 8))(ppv);
211 } //IActiveDesktop->ApplyChanges()
212 CoUninitialize();
215 if ( result )
217 ("tTJSVariant & tTJSVariant::operator =(const tjs_char *)")(result, L"success");
219 v78 = (void *)sub_10001F00(result, (int)&ppv, (int)L"setwallpaper(", &v83);
220 v79 = sub_10001E40(v78, (int)&v84, (int)L") succeeded.");
221 ("void ::TVPAddLog(const ttstr &)")(v79);
222 ("tTJSString::~ tTJSString()")(&v84);
223 ("tTJSString::~ tTJSString()")(&ppv);
224 ("tTJSString::~ tTJSString()")(&v83);
225 ("tTJSString::~ tTJSString()")(&v95);
226 ("tTJSString::~ tTJSString()")(&v88);
227 ("tTJSVariant::~ tTJSVariant()")(&v92);
228 return TJS_S_OK;
231 //----- (10001C40) --------------------------------------------------------
232 signed int tjsf_getwallpaper(int a1, int this, int flag, int membername, int hint, int result)
234 HKEY phkResult; // [esp+0h] [ebp-408h]
235 DWORD cbData; // [esp+4h] [ebp-404h]
236 BYTE Data; // [esp+8h] [ebp-400h]
237 char v11; // [esp+9h] [ebp-3FFh]
239 if ( membername )
240 return TJS_E_MEMBERNOTFOUND;
241 if ( result )
243 Data = byte_1000D2B4;
244 memset(&v11, 0, 0x3FCu);
245 cbData = 1024;
246 RegOpenKeyA(HKEY_CURRENT_USER, "Control Panel\\desktop\\", &phkResult);
247 RegQueryValueExA(phkResult, "Wallpaper", 0, 0, &Data, &cbData);
248 RegCloseKey(phkResult);
249 ("tTJSVariant & tTJSVariant::operator =(const tjs_nchar *)")(result, &Data);
251 return TJS_S_OK;
254 //----- (10001E40) --------------------------------------------------------
255 int sub_10001E40(void *this, int a2, int a3)
257 void *v4; // esi
258 int v5; // esi
260 v4 = this;
261 v5 = ("tTJSString tTJSString::operator +(const tjs_char *) const")(&a3, v4, a3);
262 ("tTJSString::tTJSString(const tTJSString &)")(a2, v5);
263 ("tTJSString::~ tTJSString()")(&a3);
264 return a2;
267 //----- (10001F00) --------------------------------------------------------
268 int sub_10001F00(int a1, int a2, int a3, ...)
270 int v4; // esi
271 int v10; // [esp+1Ch] [ebp+Ch]
272 va_list va; // [esp+1Ch] [ebp+Ch]
273 va_list va1; // [esp+20h] [ebp+10h]
275 va_start(va1, a3);
276 va_start(va, a3);
277 v10 = va_arg(va1, _DWORD);
278 v4 = ("tTJSString ::operator +(const tjs_char *,const tTJSString &)")((int *)va, a3, v10, a1);
279 ("tTJSString::tTJSString(const tTJSString &)")(a3, v4);
280 ("tTJSString::~ tTJSString()")(va1, v8, 1);
281 return a3;
284 //----- (10001FC0) --------------------------------------------------------
285 int sub_10001FC0(int a1, int a2, ...)
287 int v3; // esi
288 int v6; // esi
289 int v11; // [esp+18h] [ebp+8h]
290 va_list va; // [esp+18h] [ebp+8h]
291 va_list va1; // [esp+1Ch] [ebp+Ch]
293 va_start(va1, a2);
294 va_start(va, a2);
295 v11 = va_arg(va1, _DWORD);
296 v3 = ("ttstr ::TVPExtractStorageExt(const ttstr &)")((int *)va, v11, a1);
297 v6 = v11;
298 ("tTJSString::tTJSString(const tTJSString &)")(v11, v3);
299 ("tTJSString::~ tTJSString()")(va1, 0, 1);
300 return v6;
303 //----- (10002080) --------------------------------------------------------
304 int sub_10002080(int a1, int a2, ...)
306 int v3; // esi
307 int v6; // esi
308 int v11; // [esp+18h] [ebp+8h]
309 va_list va; // [esp+18h] [ebp+8h]
310 va_list va1; // [esp+1Ch] [ebp+Ch]
312 va_start(va1, a2);
313 va_start(va, a2);
314 v11 = va_arg(va1, _DWORD);
315 v3 = ("ttstr ::TVPChopStorageExt(const ttstr &)")((int *)va, v11, a1);
316 v6 = v11;
317 ("tTJSString::tTJSString(const tTJSString &)")(v11, v3);
318 ("tTJSString::~ tTJSString()")(va1, 0, 1);
319 return v6;
322 //----- (10002140) --------------------------------------------------------
323 int sub_10002140(int a1, int a2, ...)
325 int v3; // esi
326 int v6; // esi
327 int v11; // [esp+18h] [ebp+8h]
328 va_list va; // [esp+18h] [ebp+8h]
329 va_list va1; // [esp+1Ch] [ebp+Ch]
331 va_start(va1, a2);
332 va_start(va, a2);
333 v11 = va_arg(va1, _DWORD);
334 v3 = ("ttstr ::TVPGetPlacedPath(const ttstr &)")((int *)va, v11, a1);
335 v6 = v11;
336 ("tTJSString::tTJSString(const tTJSString &)")(v11, v3);
337 ("tTJSString::~ tTJSString()")(va1, 0, 1);
338 return v6;