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