📄 btdialp.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 + -