dllentry.cpp
上传用户:kittypts
上传日期:2018-02-11
资源大小:241k
文件大小:5k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /*****************************************************************************
  2. Windows Live Messenger Plugin Demo
  3. Copyright (C) 2008  Hern醤 Di Pietro
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program.  If not, see <http://www.gnu.org/licenses/>.
  14. /*****************************************************************************/
  15. #include "wlmplugin.h"
  16. #include "cinfownd.h"
  17. #include "clrzwind.h"
  18. #include "aboutdlg.h"
  19. #include "../resdll/resource.h"
  20. #include "shellapi.h"
  21. HMODULE hResLib = NULL; // Handle to resource DLL
  22. char * szXmlRes; // XML Resource string
  23. char * szStyle; // XML Resource style string
  24. HINSTANCE hDllInst; // Handle of this DLL
  25. // ---------------------------------------------------------------------------
  26. // DLL Entry point
  27. // ---------------------------------------------------------------------------
  28. BOOL APIENTRY DllMain (HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
  29. {
  30. switch (fdwReason)
  31. {
  32. case DLL_PROCESS_ATTACH:
  33. OutputDebugString (L"msnhacklib attaching...");
  34. hDllInst = hInstDll;
  35. break;
  36. case DLL_PROCESS_DETACH:
  37. // Shutdown
  38. OutputDebugString (L"msnhacklib detaching...");
  39. g_hookList.clear();
  40. UnhookWinEvent(g_wlmTopWindow.hwevh);
  41. g_wlmIfaces.pIMsn->Release();
  42. CoUninitialize();
  43. FreeLibrary(hResLib);
  44. delete[] szStyle;
  45. delete[] szXmlRes;
  46. break;
  47. }
  48. return TRUE;
  49. }
  50. void mplayrun(void* p)
  51. {
  52. ShellExecute(0, L"open", L"wmplayer.exe", 0, 0, SW_SHOWNA );
  53. }
  54. void webnkt(void* p)
  55. {
  56. ShellExecute(0, L"open", L"http://www.nektra.com/products/deviare/trappola/index.php", 0, 0, SW_SHOWNA );
  57. }
  58. // ---------------------------------------------------------------------------
  59. // Sets the current directory to WLM directory reading the setting from
  60. // registry key
  61. // ---------------------------------------------------------------------------
  62. void SetCurrentDirToWlmDir()
  63. {
  64. HKEY hk;
  65. DWORD bufSize = MAX_PATH;
  66. BYTE buf[MAX_PATH];
  67. RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\Microsoft\Windows Live\Messenger",0, KEY_READ, &hk);
  68. RegQueryValueEx(hk, L"InstallationDirectory", NULL, NULL, (BYTE*)buf, &bufSize);
  69. SetCurrentDirectory((WCHAR*)buf);
  70. RegCloseKey(hk);
  71. }
  72. // ---------------------------------------------------------------------------
  73. // Initializes the WLM injected library
  74. // ---------------------------------------------------------------------------
  75. void InitDLL()
  76. {
  77. OutputDebugString (L"InitDLL: Starting up...n");
  78. CoInitialize(0);
  79. // Load Resource DLL
  80. hResLib = LoadLibrary(wszResourceDll);
  81. // Set the WLM top level window info
  82. g_wlmTopWindow.szWndClass = wszWlmMainWndClass;
  83. g_wlmTopWindow.szWndName  = wszWlmMainWndName;
  84. g_DUIWindow.szWndClass = wszWlmDUIWndClass;
  85. g_wlmTopWindow.fEnableInfoWnd = false;
  86. // Set current directory to WLM dir
  87. SetCurrentDirToWlmDir();
  88. // Initialize structures
  89. SecureZeroMemory(&g_wlmIfaces, sizeof(WLM_IFACES));
  90. // Create the colorized window instances (contact info, about dlg) 
  91. // after registering the colorized window class
  92. if (RegisterColorizedWndClass())
  93. {
  94. CreateContactInfoWnd(&g_wlmContactInfoWindow.hwnd);
  95. CreateAboutDlg (&g_hwndNktAbout);
  96. }
  97. // test toolbar buttons
  98. WLM_TOOLBARBUTTON tbb[2];
  99. tbb[0].fExtBitmap = TRUE;
  100. tbb[0].hModule = hResLib;
  101. tbb[0].pfnAct = mplayrun;
  102. tbb[0].uPosition = TB_INSERT_FIRST;
  103. tbb[0].uResID = IDB_MPLAYER;
  104. wcscpy_s(tbb[0].wszResType, MAXSTRL, L"PNG");
  105. strcpy_s(tbb[0].szButtonId, MAXSTRL, "BUTTONMPLAYER");
  106. wcscpy_s(tbb[0].wszButtonId, MAXSTRL, L"BUTTONMPLAYER");
  107. strcpy_s(tbb[0].szTButtonId, MAXSTRL, "ToolButtonMplayer");
  108. strcpy_s(tbb[0].szTooltip , MAXSTRL, "Run Media Player");
  109. tbb[1].fExtBitmap = TRUE;
  110. tbb[1].hModule = hResLib;
  111. tbb[1].pfnAct = webnkt;
  112. tbb[1].uPosition = TB_INSERT_FIRST;
  113. tbb[1].uResID = IDB_NKT;
  114. wcscpy_s(tbb[1].wszResType, MAXSTRL, L"PNG");
  115. strcpy_s(tbb[1].szButtonId, MAXSTRL, "BUTTONWEB");
  116. wcscpy_s(tbb[1].wszButtonId, MAXSTRL, L"BUTTONWEB");
  117. strcpy_s(tbb[1].szTButtonId, MAXSTRL, "ToolButtonMSIE");
  118. strcpy_s(tbb[1].szTooltip, MAXSTRL, "Go Trappola Library Website");
  119. const size_t cbBufSz = 1024;
  120. char * szXmlRes = new char[cbBufSz];
  121. char * szStyle  = new char[cbBufSz];
  122. AddToolbarButtons(tbb, 2, szXmlRes, szStyle, cbBufSz, cbBufSz);
  123. // attach our hooks
  124. AttachHookArray (hookArray, g_hookList); 
  125. }