Как программно сменить имя устройства в Windows Mobile
Имя устройства в Windows Mobile хранится в реестре. Это параметр Name ключа HKEY_LOCAL_MACHINE\Ident. Имя устройства используется для отображения устройства при синхронизации с настольным компьютером и, например, при обзоре Wi-Fi или Bluetooth устройств.
В этом посте я расскажу как получить и изменить имя устройства с помощью Native API и с помощью .NET Compact Framework.
На имена устройств накладываются определенные ограничения:
- имя должно содержать от 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 CommentNo comments yet.
Comments RSS Feed TrackBack URL