Który program zastąpi mi HyperTerminal pod MS Vista?

Oct 06, 2009 25 Replies

Coś mu też ten "RTS on TX" też nie działa... Po wybraniu na siłę COM1 jestem w stanie wysłać znaki ale nie odbieram.

Zbych pisze:

Oj niebezpieczne podejście. A nie da się najpierw zapytać systemu, jakiej długości bufor jest potrzebny?

Zresztą ta funkcja działa podobno tylko od Windows 2000 w górę:

formatting link
Ja w swoich programach stosuję sposób listowania urządzeń używany np. w systemowym Menedżerze urządzeń i działa to poprawnie począwszy od systemu Windows 95 OSR2 aż po 64-bitowy Windows 7. Używam do tego funkcji: SetupDiGetClassDevs, SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty, SetupDiDestroyDeviceInfoList. Dodatkowo odczytuję adres bazowy portu LPT przy pomocy zestawu: CM_Get_DevNode_Status, CM_Get_First_Log_Conf, CM_Get_Next_Res_Des, CM_Get_Res_Des_Data, CM_Free_Log_Conf_Handle.

No ale koniec takich szczegółów bo robi się lekko NTG.

Adam Dybkowski pisze:

Podejście jest bezpieczne, bo podajesz jak długi masz bufor. System nie pomaże ci pamięci. A co do sprawdzenia jak długi bufor jest potrzebny, to w msdn nie znalazłem żadnych podpowiedzi.

A to mi wcale nie przeszkadza. Jak ktoś lubi pracować na systemie sprzed 10 lat to już nie mój problem.

Możesz wkleić przykładowy kod listujący porty?

Dlaczego NTG? Porty komputera są jak najbardziej w temacie grupy :-).

Zbych pisze:

Pierwszy z brzegu przykład (nie z ISP Programmera):

void enum_ports_nt(void) { GUID lptcom = {0x4d36e978, 0xe325, 0x11ce, {0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18}}; HDEVINFO h; BOOLEAN res; char dev_name[256]; SP_DEVINFO_DATA devinfo_data; DWORD i;

h = SetupDiGetClassDevs(&lptcom, NULL, 0, DIGCF_PRESENT | DIGCF_PROFILE); if (h == INVALID_HANDLE_VALUE) { err("SetupDiGetClassDevs"); return; }

i = 0; do { devinfo_data.cbSize = sizeof(SP_DEVINFO_DATA); res = SetupDiEnumDeviceInfo(h, i, &devinfo_data); if (res) { if (SetupDiGetDeviceRegistryProperty(h, &devinfo_data, SPDRP_FRIENDLYNAME, NULL, dev_name, sizeof(dev_name), NULL)) printf("%s\n", dev_name); //print_io_information(&devinfo_data.DevInst, 0); i++; } } while (res);

SetupDiDestroyDeviceInfoList(h); }

void err(const char *fun) { LPVOID buf; DWORD errcode = GetLastError();

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL); printf("Blad %d w funkcji %s(): %s\n", errcode, fun, buf); LocalFree(buf); }

Pocięło linie na kawałki ale da się zrozumieć po skopiowaniu do edytora. Sorry reszta grupy za nieprzydatnego dla większości elektroników posta.

Skad Ci to przyszlo do glowy??

Co prawda ja z lenistwa .net uzywam, ale dobrze miec takie male snippety, wiec to jest uzyteczne (no bo jakie urzadzenie teraz nie gada z komputerem? Jeszcze troche i multiwibratory beda z PIcami/Atmelkami).

Skopiowane do prywatnej kolekcji ;-)

A taki prosty (od razu pisze że nie sprawdzony bo nie mam żadnego kompa z Vistą pod ręką) pomysł - skopiować Hyperterminal z jakiegoś kompa z XP'ekiem, może zadziała pod Vistą?

pozdrawiam

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required