VOID CALLBACK WinEventProc(HWINEVENTHOOK hWinEventHook,
				DWORD event,
				HWND hwnd,
				LONG idObject,
				LONG idChild,
				DWORD dwEventThread,
				DWORD dwmsEventTime)
{
	IAccessible* pAcc = NULL;
	VARIANT varChild;
	HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &pAcc, &varChild);
	if ((hr == S_OK) && (pAcc != NULL)) {
		BSTR bstrName, bstrValue;
		
		pAcc->get_accValue(varChild, &bstrValue);
		pAcc->get_accName(varChild, &bstrName);

		char className[50];
		GetClassNameA(hwnd, className, 50);

		if ((strcmp(className, "Chrome_WidgetWin_1") == 0) && (wcscmp(bstrName, L"Address and search bar") == 0)) {
			SendMessage(ghWnd, WM_UPDATECAREPOS, NULL, (WPARAM)(bstrValue));//LPCWSTR
			printf("URL change: %ls\n", bstrValue);
		}
		pAcc->Release();
	}

	return;
}
void CALLBACK WinEventFunc(HWINEVENTHOOK hook, DWORD dwEvent, HWND hwnd,
                           LONG idObject, LONG idChild,
                           DWORD dwEventThread, DWORD dwmsEventTime) {
  IAccessible* acc = nullptr;
  VARIANT var_child;
  HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &acc,
                                         &var_child);

  if (hr == S_OK && acc != nullptr) {
    BSTR name;
    acc->get_accName(var_child, &name);

    switch (dwEvent) {
      case EVENT_SYSTEM_FOREGROUND:
      case EVENT_SYSTEM_ALERT:
      case EVENT_OBJECT_FOCUS:
      case EVENT_OBJECT_SELECTION:
      case EVENT_OBJECT_VALUECHANGE:
        break;
    }

    SysFreeString(name);
    acc->Release();
  }
}