TRAYCTL.C
上传用户:chn_coc
上传日期:2007-12-20
资源大小:563k
文件大小:5k
源码类别:

P2P编程

开发平台:

Windows_Unix

  1. // Winamp general purpose plug-in mini-SDK
  2. // Copyright (C) 1997, Justin Frankel/Nullsoft
  3. #include <windows.h>
  4. #include <process.h>
  5. #include "gen.h"
  6. #include "resource.h"
  7. #include "sys.h"
  8. #include "channel.h"
  9. #include "servent.h"
  10. #include "servmgr.h"
  11. BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
  12. {
  13. return TRUE;
  14. }
  15. #define ENABLE_PREV 1
  16. #define ENABLE_PLAY 2
  17. #define ENABLE_STOP 4
  18. #define ENABLE_NEXT 8
  19. #define ENABLE_EJECT 16
  20. int config_enabled=0;
  21. HICON Icon;
  22. // from systray.c
  23. extern BOOL systray_add(HWND hwnd, UINT uID, HICON hIcon, LPSTR lpszTip);
  24. extern BOOL systray_del(HWND hwnd, UINT uID);
  25. BOOL CALLBACK ConfigProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
  26. void config();
  27. void quit();
  28. int init();
  29. void config_write();
  30. void config_read();
  31. char szAppName[] = "Nullsoft Tray Control";
  32. winampGeneralPurposePlugin plugin =
  33. {
  34. GPPHDR_VER,
  35. "",
  36. init,
  37. config,
  38. quit,
  39. };
  40. void main() {}
  41. void config()
  42. {
  43. DialogBox(plugin.hDllInstance,MAKEINTRESOURCE(IDD_DIALOG1),plugin.hwndParent,ConfigProc);
  44. }
  45. void quit()
  46. {
  47. config_write();
  48. config_enabled=0;
  49. systray_del(plugin.hwndParent,0);
  50. }
  51. void *lpWndProcOld;
  52. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  53. {
  54. if (message == WM_USER+27)
  55. {
  56. int which = LOWORD(wParam) - 1024,a;
  57. switch (LOWORD(lParam))
  58. {
  59. case WM_LBUTTONDOWN:
  60. config();
  61. SetForegroundWindow(plugin.hwndParent);    
  62. break;
  63. #if 0
  64. case WM_LBUTTONDOWN:
  65. switch (which)
  66. {
  67. case 0:
  68. if ((a=SendMessage(hwnd,WM_USER,0,104)) == 0) // not playing, let's 
  69.   // hit prev
  70. {
  71. SendMessage(hwnd,WM_COMMAND,40044,0);
  72. }
  73. else if (a != 3 && SendMessage(hwnd,WM_USER,0,105) > 2000) // restart
  74. {
  75. SendMessage(hwnd,WM_COMMAND,40045,0);
  76. } else { // prev
  77. SendMessage(hwnd,WM_COMMAND,40044,0);
  78. }
  79. return 0;
  80. case 1:
  81. if ((a=SendMessage(hwnd,WM_USER,0,104)) != 1) // not playing, let's 
  82.   // hit play
  83. {
  84. SendMessage(hwnd,WM_COMMAND,40045,0);
  85. }
  86. else { // prev
  87. SendMessage(hwnd,WM_COMMAND,40046,0);
  88. }
  89. return 0;
  90. case 2:
  91. if (GetKeyState(VK_SHIFT) & (1<<15))
  92. SendMessage(hwnd,WM_COMMAND,40147,0);
  93. else
  94. SendMessage(hwnd,WM_COMMAND,40047,0);
  95. return 0;
  96. case 3:
  97. SendMessage(hwnd,WM_COMMAND,40048,0);
  98. return 0;
  99. case 4:
  100. SetForegroundWindow(hwnd);
  101. if (GetKeyState(VK_CONTROL) & (1<<15))
  102. SendMessage(hwnd,WM_COMMAND,40185,0);
  103. else if (GetKeyState(VK_SHIFT) & (1<<15))
  104. SendMessage(hwnd,WM_COMMAND,40187,0);
  105. else
  106. SendMessage(hwnd,WM_COMMAND,40029,0);
  107. return 0;
  108. }
  109. return 0;
  110. #endif
  111. }
  112. }
  113. return CallWindowProc(lpWndProcOld,hwnd,message,wParam,lParam);
  114. }
  115. int init()
  116. {
  117. {
  118. static char c[512];
  119. char filename[512],*p;
  120. GetModuleFileName(plugin.hDllInstance,filename,sizeof(filename));
  121. p = filename+lstrlen(filename);
  122. while (p >= filename && *p != '\') p--;
  123. wsprintf((plugin.description=c),"%s Plug-In v0.1 (%s)",szAppName,p+1);
  124. }
  125. config_read();
  126. {
  127. Icon = LoadIcon(plugin.hDllInstance,MAKEINTRESOURCE(IDI_ICON6));
  128. }
  129. lpWndProcOld = (void *) GetWindowLong(plugin.hwndParent,GWL_WNDPROC);
  130. SetWindowLong(plugin.hwndParent,GWL_WNDPROC,WndProc);
  131. systray_add(plugin.hwndParent,0,Icon,"PeerCast");
  132. return 0;
  133. }
  134. BOOL CALLBACK ConfigProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
  135. {
  136. switch (uMsg)
  137. {
  138. case WM_INITDIALOG:
  139. {
  140. int i;
  141. for (i = 0; i < 5; i++)
  142. CheckDlgButton(hwndDlg,IDC_PREV+i,(config_enabled&(1<<i))?BST_CHECKED:BST_UNCHECKED);
  143. }
  144. return FALSE;
  145. case WM_COMMAND:
  146. switch (LOWORD(wParam))
  147. {
  148. case IDC_APPLY:
  149. case IDOK:
  150. config_enabled=0;
  151. {
  152. int i;
  153. for (i = 0; i < 5; i++)
  154. if (IsDlgButtonChecked(hwndDlg,IDC_PREV+i))
  155. config_enabled |= 1<<i;
  156. }
  157. case IDCANCEL:
  158. if (LOWORD(wParam) != IDC_APPLY) EndDialog(hwndDlg,0);
  159. return FALSE;
  160. }
  161. }
  162. return FALSE;
  163. }
  164. void config_read()
  165. {
  166. char ini_file[MAX_PATH], *p;
  167. GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file));
  168. p=ini_file+lstrlen(ini_file);
  169. while (p >= ini_file && *p != '\') p--;
  170. if (++p >= ini_file) *p = 0;
  171. lstrcat(ini_file,"plugin.ini");
  172. config_enabled = GetPrivateProfileInt(szAppName,"ButtonsEnabled",config_enabled,ini_file);
  173. }
  174. void config_write()
  175. {
  176. char ini_file[MAX_PATH], *p;
  177. char string[32];
  178. GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file));
  179. p=ini_file+lstrlen(ini_file);
  180. while (p >= ini_file && *p != '\') p--;
  181. if (++p >= ini_file) *p = 0;
  182. lstrcat(ini_file,"plugin.ini");
  183. wsprintf(string,"%d",config_enabled);
  184. WritePrivateProfileString(szAppName,"ButtonsEnabled",string,ini_file);
  185. }
  186. __declspec( dllexport ) winampGeneralPurposePlugin * winampGetGeneralPurposePlugin()
  187. {
  188. return &plugin;
  189. }