VNCviewerApp32.cpp
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:5k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. //  Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
  2. //
  3. //  This file is part of the VNC system.
  4. //
  5. //  The VNC system is free software; you can redistribute it and/or modify
  6. //  it under the terms of the GNU General Public License as published by
  7. //  the Free Software Foundation; either version 2 of the License, or
  8. //  (at your option) any later version.
  9. //
  10. //  This program is distributed in the hope that it will be useful,
  11. //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. //  GNU General Public License for more details.
  14. //
  15. //  You should have received a copy of the GNU General Public License
  16. //  along with this program; if not, write to the Free Software
  17. //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  18. //  USA.
  19. //
  20. // If the source code for the VNC system is not available from the place 
  21. // whence you received this file, check http://www.orl.co.uk/vnc or contact
  22. // the authors on vnc@orl.co.uk for information on obtaining it.
  23. #include "VNCviewerApp32.h"
  24. #include "vncviewer.h"
  25. #include "Exception.h"
  26. // --------------------------------------------------------------------------
  27. VNCviewerApp32::VNCviewerApp32(HINSTANCE hInstance, PSTR szCmdLine) :
  28. VNCviewerApp(hInstance, szCmdLine)
  29. {
  30. m_pdaemon = NULL;
  31. m_pflasher = NULL;
  32. // Load a requested keyboard layout
  33. if (m_options.m_kbdSpecified) {
  34. HKL hkl = LoadKeyboardLayout(  m_options.m_kbdname, 
  35. KLF_ACTIVATE | KLF_REPLACELANG | KLF_REORDER  );
  36. if (hkl == NULL) {
  37. MessageBox(NULL, _T("Error loading specified keyboard layout"), 
  38. _T("VNC info"), MB_OK | MB_ICONSTOP);
  39. exit(1);
  40. }
  41. }
  42. // Start listening daemons if requested
  43. if (m_options.m_listening) {
  44. log.Print(3, _T("In listening mode - staring daemonsn"));
  45. try {
  46. m_pflasher = new Flasher(FLASH_PORT_OFFSET);
  47. m_pdaemon = new Daemon(INCOMING_PORT_OFFSET);
  48. } catch (WarningException &e) {
  49. char msg[1024];
  50. sprintf(msg, "Error creating listening daemon:nr(%s)nr%s",
  51. e.m_info, "Perhaps another VNCviewer is already running?");
  52. MessageBox(NULL, msg, "VNCviewer error", MB_OK | MB_ICONSTOP);
  53. exit(1);
  54. }
  55. RegisterSounds();
  56. }
  57. // These should maintain a list of connections.
  58. void VNCviewerApp32::NewConnection() {
  59. ClientConnection *pcc = new ClientConnection(this);
  60. try {
  61. pcc->Run();
  62. } catch (Exception &e) {
  63. e.Report();
  64. delete pcc;
  65. }
  66. void VNCviewerApp32::NewConnection(TCHAR *host, int port) {
  67. ClientConnection *pcc = new ClientConnection(this, host,port);
  68. try {
  69. pcc->Run();
  70. } catch (Exception &e) {
  71. e.Report();
  72. delete pcc;
  73. }
  74. void VNCviewerApp32::NewConnection(SOCKET sock) {
  75. ClientConnection *pcc = new ClientConnection(this, sock);
  76. try {
  77. pcc->Run();
  78. } catch (Exception &e) {
  79. e.Report();
  80. delete pcc;
  81. }
  82. // Register the Bell sound event
  83. const char* BELL_APPL_KEY_NAME  = "AppEvents\Schemes\Apps\VNCviewer";
  84. const char* BELL_LABEL = "VNCviewerBell";
  85. void VNCviewerApp32::RegisterSounds() {
  86. HKEY hBellKey;
  87. char keybuf[256];
  88. sprintf(keybuf, "AppEvents\EventLabels\%s", BELL_LABEL);
  89. // First create a label for it
  90. if ( RegCreateKey(HKEY_CURRENT_USER, keybuf, &hBellKey)  == ERROR_SUCCESS ) {
  91. RegSetValue(hBellKey, NULL, REG_SZ, "Bell", 0);
  92. RegCloseKey(hBellKey);
  93. // Then put the detail in the app-specific area
  94. if ( RegCreateKey(HKEY_CURRENT_USER, BELL_APPL_KEY_NAME, &hBellKey)  == ERROR_SUCCESS ) {
  95. sprintf(keybuf, "%s\%s", BELL_APPL_KEY_NAME, BELL_LABEL);
  96. RegCreateKey(HKEY_CURRENT_USER, keybuf, &hBellKey);
  97. RegSetValue(hBellKey, NULL, REG_SZ, "Bell", 0);
  98. RegCloseKey(hBellKey);
  99. sprintf(keybuf, "%s\%s\.current", BELL_APPL_KEY_NAME, BELL_LABEL);
  100. if (RegOpenKey(HKEY_CURRENT_USER, keybuf, &hBellKey) != ERROR_SUCCESS) {
  101. RegCreateKey(HKEY_CURRENT_USER, keybuf, &hBellKey);
  102. RegSetValue(hBellKey, NULL, REG_SZ, "ding.wav", 0);
  103. }
  104. RegCloseKey(hBellKey);
  105. sprintf(keybuf, "%s\%s\.default", BELL_APPL_KEY_NAME, BELL_LABEL);
  106. if (RegOpenKey(HKEY_CURRENT_USER, keybuf, &hBellKey) != ERROR_SUCCESS) {
  107. RegCreateKey(HKEY_CURRENT_USER, keybuf, &hBellKey);
  108. RegSetValue(hBellKey, NULL, REG_SZ, "ding.wav", 0);
  109. }
  110. RegCloseKey(hBellKey);
  111. }
  112. }
  113. VNCviewerApp32::~VNCviewerApp32() {
  114. // We don't need to clean up pcc if the thread has been joined.
  115. if (m_pdaemon != NULL) delete m_pdaemon;
  116. if (m_pflasher != NULL) delete m_pflasher;
  117. }