1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
|
// ----------------------------------------------------------------------------
// Generated by InterfaceFactory [Wed May 07 00:55:56 2003]
//
// File : api_application.h
// Class : api_application
// class layer : Dispatchable Interface
// ----------------------------------------------------------------------------
#ifndef __API_APPLICATION_H
#define __API_APPLICATION_H
#include <bfc/dispatch.h>
#include <bfc/platform/guid.h>
#include <bfc/platform/platform.h>
#ifdef _WIN32
#include "ifc_messageprocessor.h"
#endif
// ----------------------------------------------------------------------------
enum
{
API_APPLICATION_SUCCESS = 0,
API_APPLICATION_FAILURE = 1,
};
enum
{
TRANSLATE_MODE_NORMAL = 0,
TRANSLATE_MODE_GLOBAL = 1,
TRANSLATE_MODE_CHILD = 2,
};
class NOVTABLE api_application: public Dispatchable
{
protected:
api_application() {}
~api_application() {}
public:
const wchar_t *main_getAppName(); // returns (e.g.) "Winamp"
const wchar_t *main_getVersionString(); // returns (e.g.) "Winamp 5.12"
const wchar_t *main_getVersionNumString(); // returns (e.g.) "5.12"
unsigned int main_getBuildNumber(); // returns (e.g.) 666
GUID main_getGUID();
#ifdef _WIN32
HANDLE main_getMainThreadHandle(); // This actually gives you a DuplicateHandle, so call CloseHandle() when you are done.
HINSTANCE main_gethInstance();
#endif // !_WIN32
const wchar_t *main_getCommandLine();
void main_shutdown( int deferred = TRUE );
void main_cancelShutdown();
int main_isShuttingDown();
const wchar_t *path_getAppPath();
const wchar_t *path_getUserSettingsPath();
// added for 5.58+ so gen_ff can fill @SKINSPATH@ in scripts correctly
const wchar_t *path_getSkinSettingsPath();
int app_getInitCount();
intptr_t app_messageLoopStep();
#ifdef _WIN32
void app_addMessageProcessor( ifc_messageprocessor *processor );
void app_removeMessageProcessor( ifc_messageprocessor *processor );
/* accelerators are 5.53+ */
void app_addAccelerators( HWND hwnd, HACCEL *phAccel, INT cAccel, UINT translateMode );
void app_removeAccelerators( HWND hwnd );
bool app_translateAccelerators( MSG *msg );
int app_getAccelerators( HWND hwnd, HACCEL *phAccel, INT cchAccelMax, BOOL bGlobal ); // phAccel == NULL && cchAccelMax == 0 -> returns accels count
/* register window as part of winamp global group (5.54+) */
void app_registerGlobalWindow( HWND hwnd );
void app_unregisterGlobalWindow( HWND hwnd );
/* 5.58 + */
bool DirectMouseWheel_RegisterSkipClass( ATOM klass );
bool DirectMouseWheel_UnregisterSkipClass( ATOM klass );
bool DirectMouseWheel_EnableConvertToMouseWheel( HWND hwnd, BOOL enable ); // !!! must be disabled before window destroyed !!!
/* 5.64 + */
BOOL DirectMouseWheel_ProcessDialogMessage( HWND hwnd, unsigned int uMsg, WPARAM wParam, LPARAM lParam, const int controls[], int controlslen );
/* 5.61 + */
void ActiveDialog_Register( HWND hwnd );
void ActiveDialog_Unregister( HWND hwnd );
HWND ActiveDialog_Get();
/* 5.64 + */
const wchar_t *getATFString(); // returns the current ATF formatting string
/* 5.66 + */
// used for dpi scaling so we're consistent in usage throughout the UI, etc
int getScaleX( int x );
int getScaleY( int y );
#endif // !_WIN32
/*
note: on windows, these two functions DON'T call Set/GetCurrentDirectory, Winamp maintains it's own path
because calling SetCurrentDirectory locks the folder
Added for 5.34
*/
const wchar_t *path_getWorkingPath(); // useful to call for populating lpstrInitialDir in GetOpenFileName
void path_setWorkingPath(const wchar_t *newPath); // useful to call for populating lpstrInitialDir in GetOpenFileName
/*
The following three function return you unique IDs you can use if you need
They are created anonymously, so information cannot be tracked back to a specific person
The main reason for their existence is that a few third party libraries require them
and some online media providers require this info for billing.
You can call this functions with a pointer to any 16 byte data structure cast to a GUID *
Added for 5.35
*/
// returns an ID unique to this computer, but not unique to the logged in user (two windows accts would share this ID)
int GetMachineID( GUID *id );
// returns an ID unique to this user. Another user logged in to the computer will have a different ID
// note that if Winamp was installed with "shared settings", the IDs of multiple users will probably be identical
// as we're just storing it in winamp.ini for now
int GetUserID( GUID *id );
// returns a unique ID for this session. Generated on the fly the first time someone calls this function
int GetSessionID( GUID *id );
/* 5.54 + */
size_t AllocateThreadStorage(); // returns an index, -1 for error
void *GetThreadStorage(size_t index);
void SetThreadStorage(size_t index, void *value);
protected:
enum
{
API_APPLICATION_MAIN_GETAPPNAME = 10,
API_APPLICATION_MAIN_GETVERSIONSTRING = 20,
API_APPLICATION_MAIN_GETVERSIONSTRING2 = 21,
API_APPLICATION_MAIN_GETBUILDNUMBER = 30,
API_APPLICATION_MAIN_GETGUID = 40,
API_APPLICATION_MAIN_GETMAINTHREADHANDLE = 50,
API_APPLICATION_MAIN_GETHINSTANCE = 60,
API_APPLICATION_MAIN_GETCOMMANDLINE = 70,
API_APPLICATION_MAIN_SHUTDOWN = 80,
API_APPLICATION_MAIN_CANCELSHUTDOWN = 90,
API_APPLICATION_MAIN_ISSHUTTINGDOWN = 100,
API_APPLICATION_PATH_GETAPPPATH = 110,
API_APPLICATION_PATH_GETUSERSETTINGSPATH = 120,
API_APPLICATION_APP_GETINITCOUNT = 130,
API_APPLICATION_APP_MESSAGELOOPSTEP = 140,
API_APPLICATION_APP_ADDMESSAGEPROCESSOR = 150,
API_APPLICATION_APP_REMOVEMESSAGEPROCESSOR = 160,
API_APPLICATION_APP_ADDMODELESSDIALOG = 170,
API_APPLICATION_APP_REMOVEMODELESSDIALOG = 180,
API_APPLICATION_PATH_GETWORKINGPATH = 190,
API_APPLICATION_PATH_SETWORKINGPATH = 200,
API_APPLICATION_GETMACHINEID = 210,
API_APPLICATION_GETUSERID = 220,
API_APPLICATION_GETSESSIONID = 230,
API_APPLICATION_APP_ADDACCELERATORS = 240,
API_APPLICATION_APP_REMOVEACCELERATORS = 250,
API_APPLICATION_APP_TRANSLATEACCELERATORS = 260,
API_APPLICATION_APP_GETACCELERATORS = 270,
API_APPLICATION_APP_REGISTERGLOBALWINDOW = 280,
API_APPLICATION_APP_UNREGISTERGLOBALWINDOW = 290,
API_APPLICATION_ALLOCATETHREADSTORAGE = 300,
API_APPLICATION_GETTHREADSTORAGE = 310,
API_APPLICATION_SETTHREADSTORAGE = 320,
API_APPLICATION_PATH_GETSKINSETTINGSPATH = 330,
API_APPLICATION_DIRECTMOUSEWHEEL_REGISTERSKIPCLASS = 340,
API_APPLICATION_DIRECTMOUSEWHEEL_UNREGISTERSKIPCLASS = 350,
API_APPLICATION_DIRECTMOUSEWHEEL_ENABLECONVERTTOMOUSEWHEEL = 360,
API_APPLICATION_DIRECTMOUSEWHEEL_PROCESSDIALOGMESSAGE = 365,
API_APPLICATION_ACTIVEDIALOG_REGISTER = 370,
API_APPLICATION_ACTIVEDIALOG_UNREGISTER = 380,
API_APPLICATION_ACTIVEDIALOG_GET = 390,
API_APPLICATION_GETATFSTRING = 400,
API_APPLICATION_GETSCALEX = 500,
API_APPLICATION_GETSCALEY = 510,
};
};
// ----------------------------------------------------------------------------
inline const wchar_t *api_application::main_getAppName()
{
const wchar_t *__retval = _call(API_APPLICATION_MAIN_GETAPPNAME, (const wchar_t *)0);
return __retval;
}
inline const wchar_t *api_application::main_getVersionString()
{
const wchar_t *__retval = _call(API_APPLICATION_MAIN_GETVERSIONSTRING, (const wchar_t *)0);
return __retval;
}
inline const wchar_t *api_application::main_getVersionNumString()
{
return _call(API_APPLICATION_MAIN_GETVERSIONSTRING2, (const wchar_t *)0);
}
inline unsigned int api_application::main_getBuildNumber()
{
return _call(API_APPLICATION_MAIN_GETBUILDNUMBER, 0);
}
inline GUID api_application::main_getGUID()
{
GUID __retval = _call(API_APPLICATION_MAIN_GETGUID, INVALID_GUID);
return __retval;
}
#ifdef _WIN32
inline HANDLE api_application::main_getMainThreadHandle()
{
HANDLE __retval = _call(API_APPLICATION_MAIN_GETMAINTHREADHANDLE, (HANDLE)NULL);
return __retval;
}
inline HINSTANCE api_application::main_gethInstance()
{
HINSTANCE __retval = _call(API_APPLICATION_MAIN_GETHINSTANCE, (HINSTANCE)NULL);
return __retval;
}
#endif
inline const wchar_t *api_application::main_getCommandLine()
{
const wchar_t *__retval = _call(API_APPLICATION_MAIN_GETCOMMANDLINE, (const wchar_t *)0);
return __retval;
}
inline void api_application::main_shutdown(int deferred)
{
_voidcall(API_APPLICATION_MAIN_SHUTDOWN, deferred);
}
inline void api_application::main_cancelShutdown()
{
_voidcall(API_APPLICATION_MAIN_CANCELSHUTDOWN);
}
inline int api_application::main_isShuttingDown()
{
int __retval = _call(API_APPLICATION_MAIN_ISSHUTTINGDOWN, (int)0);
return __retval;
}
inline const wchar_t *api_application::path_getAppPath()
{
const wchar_t *__retval = _call(API_APPLICATION_PATH_GETAPPPATH, (const wchar_t *)0);
return __retval;
}
inline const wchar_t *api_application::path_getUserSettingsPath()
{
return _call(API_APPLICATION_PATH_GETUSERSETTINGSPATH, (const wchar_t *)0);
}
inline const wchar_t *api_application::path_getSkinSettingsPath()
{
return _call(API_APPLICATION_PATH_GETSKINSETTINGSPATH, (const wchar_t *)0);
}
inline int api_application::app_getInitCount()
{
int __retval = _call(API_APPLICATION_APP_GETINITCOUNT, 0);
return __retval;
}
inline intptr_t api_application::app_messageLoopStep()
{
return _call(API_APPLICATION_APP_MESSAGELOOPSTEP, (intptr_t)1);
}
#ifdef _WIN32
inline void api_application::app_addMessageProcessor(ifc_messageprocessor *processor)
{
_voidcall(API_APPLICATION_APP_ADDMESSAGEPROCESSOR, processor);
}
inline void api_application::app_removeMessageProcessor(ifc_messageprocessor *processor)
{
_voidcall(API_APPLICATION_APP_REMOVEMESSAGEPROCESSOR, processor);
}
inline void api_application::app_addAccelerators(HWND hwnd, HACCEL *phAccel, INT cAccel, UINT translateMode)
{
_voidcall(API_APPLICATION_APP_ADDACCELERATORS, hwnd, phAccel, cAccel, translateMode);
}
inline void api_application::app_removeAccelerators(HWND hwnd)
{
_voidcall(API_APPLICATION_APP_REMOVEACCELERATORS, hwnd);
}
inline bool api_application::app_translateAccelerators(MSG *msg)
{
return _call(API_APPLICATION_APP_TRANSLATEACCELERATORS, (bool)false, msg);
}
inline int api_application::app_getAccelerators(HWND hwnd, HACCEL *phAccel, INT cchAccelMax, BOOL bGlobal)
{
return _call(API_APPLICATION_APP_GETACCELERATORS, (int)0, hwnd, phAccel, cchAccelMax, bGlobal);
}
inline void api_application::app_registerGlobalWindow(HWND hwnd)
{
_voidcall(API_APPLICATION_APP_REGISTERGLOBALWINDOW, hwnd);
}
inline void api_application::app_unregisterGlobalWindow(HWND hwnd)
{
_voidcall(API_APPLICATION_APP_UNREGISTERGLOBALWINDOW, hwnd);
}
inline bool api_application::DirectMouseWheel_RegisterSkipClass(ATOM klass)
{
return _call(API_APPLICATION_DIRECTMOUSEWHEEL_REGISTERSKIPCLASS, (bool)false, klass);
}
inline bool api_application::DirectMouseWheel_UnregisterSkipClass(ATOM klass)
{
return _call(API_APPLICATION_DIRECTMOUSEWHEEL_UNREGISTERSKIPCLASS, (bool)false, klass);
}
inline bool api_application::DirectMouseWheel_EnableConvertToMouseWheel(HWND hwnd, BOOL enable)
{
return _call(API_APPLICATION_DIRECTMOUSEWHEEL_ENABLECONVERTTOMOUSEWHEEL, (bool)false, hwnd, enable);
}
inline BOOL api_application::DirectMouseWheel_ProcessDialogMessage(HWND hwnd, unsigned int uMsg, WPARAM wParam, LPARAM lParam, const int controls[], int controlslen)
{
return _call(API_APPLICATION_DIRECTMOUSEWHEEL_PROCESSDIALOGMESSAGE, (BOOL)FALSE, hwnd, uMsg, wParam, lParam, controls, controlslen);
}
inline void api_application::ActiveDialog_Register(HWND hwnd)
{
_voidcall(API_APPLICATION_ACTIVEDIALOG_REGISTER, hwnd);
}
inline void api_application::ActiveDialog_Unregister(HWND hwnd)
{
_voidcall(API_APPLICATION_ACTIVEDIALOG_UNREGISTER, hwnd);
}
inline HWND api_application::ActiveDialog_Get()
{
return _call(API_APPLICATION_ACTIVEDIALOG_GET, (HWND)NULL);
}
inline const wchar_t *api_application::getATFString()
{
return _call(API_APPLICATION_GETATFSTRING, (wchar_t *)0);
}
inline int api_application::getScaleX(int x)
{
return _call(API_APPLICATION_GETSCALEX, (int)0, x);
}
inline int api_application::getScaleY(int y)
{
return _call(API_APPLICATION_GETSCALEY, (int)0, y);
}
#endif
inline const wchar_t *api_application::path_getWorkingPath()
{
return _call(API_APPLICATION_PATH_GETWORKINGPATH, (wchar_t *)0);
}
inline void api_application::path_setWorkingPath(const wchar_t *newPath)
{
_voidcall(API_APPLICATION_PATH_SETWORKINGPATH, newPath);
}
inline int api_application::GetMachineID(GUID *id)
{
return _call(API_APPLICATION_GETMACHINEID, (int)API_APPLICATION_FAILURE, id);
}
inline int api_application::GetUserID(GUID *id)
{
return _call(API_APPLICATION_GETUSERID, (int)API_APPLICATION_FAILURE, id);
}
inline int api_application::GetSessionID(GUID *id)
{
return _call(API_APPLICATION_GETSESSIONID, (int)API_APPLICATION_FAILURE, id);
}
inline size_t api_application::AllocateThreadStorage()
{
return _call(API_APPLICATION_ALLOCATETHREADSTORAGE, (size_t)-1);
}
inline void *api_application::GetThreadStorage(size_t index)
{
return _call(API_APPLICATION_GETTHREADSTORAGE, (void *)0, index);
}
inline void api_application::SetThreadStorage(size_t index, void *value)
{
_voidcall(API_APPLICATION_SETTHREADSTORAGE, index, value);
}
// ----------------------------------------------------------------------------
// {23B96771-09D7-46d3-9AE2-20DCEA6C86EA}
static const GUID applicationApiServiceGuid =
{
0x23b96771, 0x9d7, 0x46d3, { 0x9a, 0xe2, 0x20, 0xdc, 0xea, 0x6c, 0x86, 0xea }
};
extern api_application *applicationApi;
#endif // __API_APPLICATION_H
|