void VBoxSeamlessEnable() { Assert(ghSeamlessKmNotifyEvent); VBoxDispIfSeamlesCreate(&gCtx.pEnv->dispIf, &gVBoxDispIfSeamless, ghSeamlessKmNotifyEvent); VBoxSeamlessInstallHook(); }
void VBoxSeamlessEnable(void) { PVBOXSEAMLESSCONTEXT pCtx = &g_Ctx; /** @todo r=andy Use instance data via service lookup (add void *pInstance). */ AssertPtr(pCtx); Assert(g_hSeamlessKmNotifyEvent); VBoxDispIfSeamlessCreate(&pCtx->pEnv->dispIf, &gVBoxDispIfSeamless, g_hSeamlessKmNotifyEvent); VBoxSeamlessInstallHook(); }
/** * Window procedure for our tool window */ static LRESULT CALLBACK vboxToolWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: { Log(("VBoxTray: Tool window created\n")); int rc = vboxTrayRegisterGlobalMessages(&s_vboxGlobalMessageTable[0]); if (RT_FAILURE(rc)) Log(("VBoxTray: Error registering global window messages, rc=%Rrc\n", rc)); return 0; } case WM_CLOSE: return 0; case WM_DESTROY: Log(("VBoxTray: Tool window destroyed\n")); KillTimer(ghwndToolWindow, TIMERID_VBOXTRAY_CHECK_HOSTVERSION); return 0; case WM_TIMER: switch (wParam) { case TIMERID_VBOXTRAY_CHECK_HOSTVERSION: if (RT_SUCCESS(VBoxCheckHostVersion())) { /* After successful run we don't need to check again. */ KillTimer(ghwndToolWindow, TIMERID_VBOXTRAY_CHECK_HOSTVERSION); } return 0; default: break; } break; /* Make sure other timers get processed the usual way! */ case WM_VBOXTRAY_TRAY_ICON: switch (lParam) { case WM_LBUTTONDBLCLK: break; case WM_RBUTTONDOWN: break; } return 0; case WM_VBOX_INSTALL_SEAMLESS_HOOK: VBoxSeamlessInstallHook(); return 0; case WM_VBOX_REMOVE_SEAMLESS_HOOK: VBoxSeamlessRemoveHook(); return 0; case WM_VBOX_SEAMLESS_UPDATE: VBoxSeamlessCheckWindows(); return 0; case WM_VBOXTRAY_VM_RESTORED: VBoxRestoreSession(); return 0; case WM_VBOXTRAY_VRDP_CHECK: VBoxRestoreCheckVRDP(); return 0; default: /* Handle all globally registered window messages. */ if (vboxTrayHandleGlobalMessages(&s_vboxGlobalMessageTable[0], uMsg, wParam, lParam)) { return 0; /* We handled the message. @todo Add return value!*/ } break; /* We did not handle the message, dispatch to DefWndProc. */ } /* Only if message was *not* handled by our switch above, dispatch * to DefWindowProc. */ return DefWindowProc(hWnd, uMsg, wParam, lParam); }