Имя устройства в Windows Mobile хранится в реестре. Это параметр Name ключа HKEY_LOCAL_MACHINE\Ident. Имя устройства используется для отображения устройства при синхронизации с настольным компьютером и, например, при обзоре Wi-Fi или Bluetooth устройств.

В этом посте я расскажу как получить и изменить имя устройства с помощью Native API и с помощью .NET Compact Framework.

Change Mobile Device Name

На имена устройств накладываются определенные ограничения:

  • имя должно содержать от 1 до 15 символов.
  • Первый символ должен быть из диапазона ‘a’-‘z’ или ‘A’-‘Z.’
  • Остальные символы ‘a’-‘z’, ‘A’-‘Z’, ‘0’-‘9’, или ‘-.’

Более подробно об именовании мобильных устройств можно узнать в MSDN.

А вот и примеры:

Native API (C++)

int _tmain(int argc, _TCHAR* argv[])
{
	HKEY hKey = NULL;
	DWORD dataSize(0);
	BYTE * data = NULL;
	do
	{
		if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Ident"), 0,  KEY_READ, &hKey)
			!= ERROR_SUCCESS) break;
		
		if(RegQueryValueEx(hKey, _T("Name"), NULL, NULL, NULL, &dataSize)
			!= ERROR_SUCCESS) break;

		int allocatedSize = max((int)(dataSize+1), (int)256);
		data = new BYTE[allocatedSize];
		ZeroMemory(data, allocatedSize);
		if(RegQueryValueEx(hKey, _T("Name"), NULL, NULL, data, &dataSize)
			!= ERROR_SUCCESS) break;
		MessageBox(0, (LPCTSTR)data, _T("Device Name"), MB_OK);
#if defined _UNICODE
		wsprintf((LPTSTR)data, _T("SampleName"));
#else
		sprintf((LPTSTR)data, _T("SampleName"));
#endif
		if(RegSetValueEx(hKey, _T("Name"), NULL, REG_SZ, data, 
#if defined _UNICODE
			wcslen((wchar_t*)data)*sizeof(wchar_t)
#else
			strlen((char*)data)
#endif
			)
			!= ERROR_SUCCESS) break;
	}
	while(false);
	if(data) delete [] data;
	if(hKey) RegCloseKey(hKey);
	return 0;
}

Указанный выше способ работает как для ANSI так и для UNICODE-сборки проекта.

wxWidgets (wxWinCE)

bool MobileDeviceNameMainFrame::SetDeviceName(const wxString & newDeviceName)
{
	do
	{
		if(newDeviceName.IsEmpty())
		{
			wxLogError(_("Device name can't be empty"));
			break;
		}
		wxRegKey key(wxRegKey::HKLM, wxT("Ident"));
		if(!key.Open())
		{
			wxLogError(_("Unable to open registry key"));
			break;
		}
		key.SetValue(wxT("Name"), newDeviceName);
		key.Close();
		return true;
	}
	while(false);
	return false;
}

wxString MobileDeviceNameMainFrame::GetDeviceName()
{
	do 
	{
		wxRegKey key(wxRegKey::HKLM, wxT("Ident"));
		if(!key.Open())
		{
			wxLogError(_("Unable to open registry key"));
			break;
		}
		wxString result;
		if(!key.QueryValue(wxT("Name"), result)) break;
		return result;
	} 
	while (false);
	return wxEmptyString;
}

.NET Compact Framework

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", true))
            {
                deviceNameTextCtrl.Text = key.GetValue("Name").ToString();
            }
        }

        private void btnChangeDeviceName_Click(object sender, EventArgs e)
        {
            using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", true))
            {
                key.SetValue("Name", deviceNameTextCtrl.Text);
            }
        }
    }

Скачать исходный код к статье.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

M.

Mobile Application Blocks new Community Drop (05-21-2009) доступен для скачивания

На CodePlex доступна новая версия библиотеки Mobile Application Blocks.

Из нововведений:

  • Поддержка SQL Server CE 3.5 SP1
  • Утилита ConfigSectionEncrypt для шифровки конфигов
  • Проекты для .NET CF 3.5 и 2.0
  • Улучшения в ContainerModel Block
В.

Видео-урок: Работа с SQLite в Windows Mobile

Новый скринкаст о том как собрать минимальное приложение для Windows Mobile, работающее с базой данных SQLite.

Из видео можно узнать:

  • Как создать минимальное приложение для Windows Mobile с wxWinCE.
  • Собрать библиотеку SQLite3 для Windows Mobile 5.
  • Собрать библиотеку-обертку wxSQLite3 для работы с базами данных SQLite.
  • Создать базу данных SQLite.
  • Создать таблицы в базе данных SQLite.
  • Сделать выборку данных из таблицы.
  • Обработать исключения, возникающие при ошибках доступа к базам SQLite.