Feb
15

Как программно сменить имя устройства в Windows Mobile

Имя устройства в 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);
            }
        }
    }

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

Еще интересные посты о программировании для мобильных устройств:

No Comments

Make A Comment

No comments yet.

Comments RSS Feed   TrackBack URL

Leave a comment

Please leave these two fields as-is:
ייצור מטבחים ; Ноутбук Samsung R560 BS02 - ремонт ноутбуков asus. Как я построил дом из бруса. ; создание корпоративного сайта , продвижение.

top