⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btdialp.cxx

📁 Windows CE操作系统中适用的蓝牙驱动程序
💻 CXX
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/**************************************************************************/
/*  OutlookPlug.cpp                                                       */
/*  This file contains utilities to beam Contacts to another OBEX server  */
/*      it hooks into the 'Tools' menu in Contacts                        */
/**************************************************************************/
#include <windows.h>
#include "addrmapi.h"
#include "pegmapi.h"

#include "resource.h"

typedef enum tagPIMTYPE {
	PT_CALENDAR = 0,
	PT_TASKS,
	PT_CONTACT
} PIMTYPE;

#define PHONE_NUM	8

#define MAX_PHONE		32
#define MAX_PHONE_TYPE	12

struct PhoneInfo {
	WCHAR szPhone[MAX_PHONE];
	WCHAR szPhoneType[12];
};

//globals
HINSTANCE ghInst;

BOOL WINAPI DllMain(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved) {
    if(DLL_PROCESS_ATTACH == dwReason)
        ghInst = (HINSTANCE)hinstDLL;

    return TRUE;
}

static BOOL CALLBACK WhichDlg (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	switch (uMsg) {
	case WM_INITDIALOG:
		{
			PhoneInfo *pPhones = (PhoneInfo *)lParam;
			HWND hWndItemList = GetDlgItem (hWnd, IDC_PHONELIST);
			for (int i = 0 ; i < PHONE_NUM ; ++i) {
				if (pPhones[i].szPhone[0] == '\0')
					break;

				WCHAR sz[256];
				wcscpy (sz, pPhones[i].szPhone);
				wcscat (sz, L" ");
				wcscat (sz, pPhones[i].szPhoneType);

				SendMessage (hWndItemList, LB_ADDSTRING, 0, (LPARAM)sz);
			}
		}

		return 0;

	case WM_COMMAND:
		{
			int wID = LOWORD(wParam);
			switch (wID)
			{
			case IDOK:
				{
					HWND hWndItemList   = GetDlgItem (hWnd, IDC_PHONELIST);

					int iNdx = SendMessage (hWndItemList, LB_GETCURSEL, 0, 0);
					if (iNdx < 0) {
						MessageBox (hWnd, L"Nothing selected", L"Error", MB_OK | MB_TOPMOST);
						return FALSE;
					}

					EndDialog (hWnd, iNdx);
				}
				return 0;

			case IDCANCEL:
				EndDialog (hWnd, -1);
				return 0;
			}
		}
		break;
	}

	return 0;
}

void CePimCommand(HWND hWnd, PIMTYPE ptData, UINT uDataCount, HANDLE *rghData, void *pReserved) {
	if (uDataCount != 1)
		return;

	CEOID oid = *(CEOID *)rghData;

	CEOID db_out = 0;

	HANDLE hdb = CeOpenDatabase (&db_out, L"Contacts Database", 0, 0, NULL);
	if (hdb == INVALID_HANDLE_VALUE)
		return;

	DWORD dwIndex = 0;

	if (! CeSeekDatabase (hdb, CEDB_SEEK_CEOID, (DWORD)oid, &dwIndex))
		return;

	unsigned char *lpBuff = NULL;
	DWORD cBuff = 0;

	CEPROPID aPropID[PHONE_NUM] = {
		PR_HOME_TELEPHONE_NUMBER_W,
		PR_HOME2_TELEPHONE_NUMBER_W,
		PR_BUSINESS_TELEPHONE_NUMBER_W,
		PR_CALLBACK_TELEPHONE_NUMBER_W,
		PR_CAR_TELEPHONE_NUMBER_W,
		PR_MOBILE_TELEPHONE_NUMBER_W,
		PR_RADIO_TELEPHONE_NUMBER_W,
		PR_PRIMARY_TELEPHONE_NUMBER_W };

	WORD dwPropIDs = PHONE_NUM;

	if (! CeReadRecordProps (hdb, CEDB_ALLOWREALLOC, &dwPropIDs, aPropID, &lpBuff, &cBuff))
		return;

	PhoneInfo numbers[PHONE_NUM];

	memset (numbers, 0, sizeof(numbers));
	CEPROPVAL *ppv = (CEPROPVAL *)lpBuff;

	int iPhoneCnt = 0;

	for (int i = 0 ; (i < dwPropIDs) && (iPhoneCnt < PHONE_NUM); ++i, ++ppv) {
		if (ppv->wFlags & CEDB_PROPNOTFOUND)
			continue;

		switch (ppv->propid) {
		case PR_HOME_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"h");
			break;
		case PR_HOME2_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"h2");
			break;
		case PR_BUSINESS_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"w");
			break;
		case PR_CALLBACK_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"c/back");
			break;
		case PR_CAR_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"car");
			break;
		case PR_MOBILE_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"m");
			break;
		case PR_RADIO_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"radio");
			break;
		case PR_PRIMARY_TELEPHONE_NUMBER_W:
			wcscpy (numbers[iPhoneCnt].szPhoneType, L"prim.");
			break;
		default:
			continue;
		}

		if (wcslen (ppv->val.lpwstr) >= MAX_PHONE)
			continue;

		wcscpy (numbers[iPhoneCnt].szPhone, ppv->val.lpwstr);
		++iPhoneCnt;
	}

	if (iPhoneCnt < PHONE_NUM) {
		numbers[iPhoneCnt].szPhone[0] = '\0';
		numbers[iPhoneCnt].szPhoneType[0] = '\0';
	}

	int ndx = DialogBoxParam (ghInst, MAKEINTRESOURCE (IDD_DIALOG1), NULL, WhichDlg, (LPARAM)numbers);

	if ((ndx >= 0) && (ndx < iPhoneCnt)) {
		PROCESS_INFORMATION pi;
		STARTUPINFO		si;

		memset (&pi, 0, sizeof(pi));
		memset (&si, 0, sizeof(si));
		si.cb = sizeof(si);

		DWORD bCP = CreateProcess (L"btdialer.exe", numbers[ndx].szPhone, NULL, NULL, FALSE, 0, NULL,
					NULL, &si, &pi);

		if (bCP) {
			CloseHandle (pi.hThread);
			CloseHandle (pi.hProcess);
		}
	}

	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -