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