📄 unit1.cpp
字号:
);
//RegCloseKey(keyDevice);
if(result != ERROR_SUCCESS)return -1;
if(Name1[0] == 0x02)return 1;
else if(Name1[0] == 0x00)return 0;
else return -1;
}
else return -1;
}
//---------------------------------------------------------------------------
DWORD SetFIFOSize(bool tBuf, int size)
{
char Name1[100];
char namePort[10];
DWORD cbData=100;
if(Form1->keyDevice == NULL)return -1;
DWORD result;
if(Win32Platform == VER_PLATFORM_WIN32_NT)
{
if(tBuf)
{
if(size != 1 && size != 4 && size != 8 && size != 14)return -1;
}
else
{
if(size < 1 || size > 16)return -1;
}
char FIFOstr[10];
if(tBuf)
strcpy(FIFOstr,"RxFIFO");
else
strcpy(FIFOstr,"TxFIFO");
result=RegSetValueEx(
Form1->keyDevice, // handle of key to set value for
FIFOstr, // address of value to set
0, // reserved
REG_DWORD, // flag for value type
(unsigned char*)&size, // address of value data
sizeof(size) // size of value data
);
if(result != ERROR_SUCCESS)return -1;
else return 0;
}
else
if(Win32Platform == VER_PLATFORM_WIN32_WINDOWS)
{
if(tBuf)
{
if(size != 1 && size != 4 && size != 8 && size != 14)return -1;
}
else
{
if(size != 1 && size != 4 && size != 8 && size != 16)return -1;
}
DWORD td;
RegQueryValueEx(
Form1->keyDevice, // handle of key to query
"settings", // address of name of value to query
0, // reserved
&td, // address of buffer for value type
Name1, // address of data buffer
&cbData // address of data buffer size
);
if(tBuf)
switch(size)
{
case 1: Name1[3]=0x00;break; //RX
case 4: Name1[3]=0x40;break;
case 8: Name1[3]=0x80;break;
case 14: Name1[3]=0xc0;break;
}
else
switch(size)
{
case 1: Name1[1]=0x01;break; //TX
case 4: Name1[1]=0x06;break;
case 8: Name1[1]=0x0b;break;
case 16: Name1[1]=0x10;break;
}
result=RegSetValueEx(
Form1->keyDevice, // handle of key to set value for
"settings", // address of value to set
0, // reserved
td, // flag for value type
Name1, // address of value data
cbData // size of value data
);
if(result != 0)return -1;
else return 0;
}
else return -1;
}
//---------------------------------------------------------------------------
DWORD GetFIFOSize(bool tBuf) //true - Rx, false - Tx
{
char Name1[100];
DWORD cbData=100;
if(Form1->keyDevice == NULL)return -1;
DWORD result;
DWORD sFIFO;
DWORD size=4;
if(Win32Platform == VER_PLATFORM_WIN32_NT)
{
char FIFOstr[10];
if(tBuf)
strcpy(FIFOstr,"RxFIFO");
else
strcpy(FIFOstr,"TxFIFO");
DWORD res=RegQueryValueEx(
Form1->keyDevice, // handle of key to query
FIFOstr, // address of name of value to query
NULL, // reserved
NULL, // address of buffer for value type
(unsigned char*)&sFIFO, // address of data buffer
&size // address of data buffer size
);
/*
//RegCloseKey(keyDevice);
*/
if(res != ERROR_SUCCESS)return -1;
else return sFIFO;
}
else
if(Win32Platform == VER_PLATFORM_WIN32_WINDOWS)
{
DWORD td;
result=RegQueryValueEx(
Form1->keyDevice, // handle of key to query
"settings", // address of name of value to query
0, // reserved
&td, // address of buffer for value type
Name1, // address of data buffer
&cbData // address of data buffer size
);
if(result != ERROR_SUCCESS)return -1;
if(tBuf)
switch((unsigned int)Name1[3])
{
case 0x00: return 1;
case 0x40: return 4;
case 0x80: return 8;
case 0xc0: return 14;
default: return -1;
}
else
switch((unsigned int)Name1[1])
{
case 0x01: return 1;
case 0x06: return 4;
case 0x0b: return 8;
case 0x10: return 16;
default: return -1;
}
}
else return -1;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(CheckBox1->Checked)EnableFIFO(true);
else EnableFIFO(false);
int pos;
if(Win32Platform == VER_PLATFORM_WIN32_NT)
SetFIFOSize(false, TrackBar1->Position);
else
{
switch(TrackBar1->Position)
{
case 0: pos=1;break;
case 1: pos=4;break;
case 2: pos=8;break;
case 3: pos=16;break;
default: return;
}
SetFIFOSize(false, pos);
}
switch(TrackBar2->Position)
{
case 0: pos=1;break;
case 1: pos=4;break;
case 2: pos=8;break;
case 3: pos=14;break;
default: return;
}
SetFIFOSize(true, pos);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
keyDevice=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
if(keyDevice)
{
RegCloseKey(keyDevice);
keyDevice=0;
}
keyDevice=GetDeviceKey(Form1->ListBox1->Items->Strings[Form1->ListBox1->ItemIndex].c_str());
if(Form1->ListBox1->ItemIndex < 0)return;
TrackBar1->Enabled=false;
int pos=GetFIFOSize(false);
Label4->Caption=IntToStr(pos);
if(Win32Platform == VER_PLATFORM_WIN32_NT)
{
TrackBar1->Position=pos;
}
else
{
switch(pos)
{
case 1:pos=0; break;
case 4:pos=1; break;
case 8:pos=2; break;
case 16:pos=3;break;
}
TrackBar1->Position=pos;
}
pos=GetFIFOSize(true);
Label3->Caption=pos;
switch(pos)
{
case 1:pos=0; break;
case 4:pos=1; break;
case 8:pos=2; break;
case 14:pos=3;break;
}
TrackBar2->Position=pos;
TrackBar1->Enabled=true;
TrackBar2->Enabled=false;
TrackBar2->Enabled=true;
CheckBox1->Enabled=false;
int fe=IsFIFOEnable();
if(fe > 0)CheckBox1->Checked=true;
if(fe == 0)CheckBox1->Checked=false;
if(fe < 0)ShowMessage("Registry error");
CheckBox1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Win32Platform == VER_PLATFORM_WIN32_NT)
{
TrackBar1->Max=16;
TrackBar1->Min=1;
}
else
if(Win32Platform == VER_PLATFORM_WIN32_WINDOWS)
{
TrackBar1->Max=3;
TrackBar1->Min=0;
}
else
{
ShowMessage("OS version error");
}
HANDLE res;
char buf[20];
int i=0;
BOOL g;
res=BeginEnumeratePorts();
while(TRUE)
{
if(!EnumeratePortsNext(res,buf))break;
ListBox1->Items->Add(buf);
i++;
}
EndEnumeratePorts(res);
Button3->Enabled=false;
Button1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
if(keyDevice)
{
RegCloseKey(keyDevice);
keyDevice=0;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -