fix 1
This commit is contained in:
parent
bf873ce0c8
commit
434814a085
13
OTP/Form1.Designer.cs
generated
13
OTP/Form1.Designer.cs
generated
@ -38,6 +38,7 @@
|
||||
button4 = new System.Windows.Forms.Button();
|
||||
button5 = new System.Windows.Forms.Button();
|
||||
progressBar1 = new System.Windows.Forms.ProgressBar();
|
||||
label3 = new System.Windows.Forms.Label();
|
||||
SuspendLayout();
|
||||
//
|
||||
// listBox1
|
||||
@ -139,15 +140,26 @@
|
||||
// progressBar1
|
||||
//
|
||||
progressBar1.Location = new System.Drawing.Point(640, 165);
|
||||
progressBar1.Maximum = 30;
|
||||
progressBar1.Name = "progressBar1";
|
||||
progressBar1.Size = new System.Drawing.Size(230, 51);
|
||||
progressBar1.TabIndex = 10;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
label3.AutoSize = true;
|
||||
label3.Font = new System.Drawing.Font("Segoe UI", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||
label3.Location = new System.Drawing.Point(702, 219);
|
||||
label3.Name = "label3";
|
||||
label3.Size = new System.Drawing.Size(0, 45);
|
||||
label3.TabIndex = 11;
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
ClientSize = new System.Drawing.Size(904, 508);
|
||||
Controls.Add(label3);
|
||||
Controls.Add(progressBar1);
|
||||
Controls.Add(button5);
|
||||
Controls.Add(button4);
|
||||
@ -180,6 +192,7 @@
|
||||
private System.Windows.Forms.Button button4;
|
||||
private System.Windows.Forms.Button button5;
|
||||
private System.Windows.Forms.ProgressBar progressBar1;
|
||||
private System.Windows.Forms.Label label3;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,8 +42,8 @@ namespace OTP
|
||||
private void Timer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
int remainingSeconds = totp.RemainingSeconds();
|
||||
circularProgressBar1.Text = remainingSeconds.ToString();
|
||||
circularProgressBar1.Value = remainingSeconds;
|
||||
label3.Text = remainingSeconds.ToString();
|
||||
progressBar1.Value = remainingSeconds;
|
||||
if (remainingSeconds == 30)
|
||||
{
|
||||
GenerateAndDisplayTotp();
|
||||
@ -208,8 +208,8 @@ namespace OTP
|
||||
label1.Text = "TOTP Code";
|
||||
button1.Enabled = false;
|
||||
button2.Enabled = false;
|
||||
circularProgressBar1.Text = "time";
|
||||
circularProgressBar1.Value = 30;
|
||||
label3.Text = "time";
|
||||
progressBar1.Value = 30;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -18,7 +18,7 @@
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
|
13
OTP/Form3.Designer.cs
generated
13
OTP/Form3.Designer.cs
generated
@ -44,6 +44,7 @@
|
||||
groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
button7 = new System.Windows.Forms.Button();
|
||||
pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
button8 = new System.Windows.Forms.Button();
|
||||
groupBox1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||
SuspendLayout();
|
||||
@ -182,6 +183,7 @@
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
groupBox1.Controls.Add(button8);
|
||||
groupBox1.Controls.Add(button7);
|
||||
groupBox1.Controls.Add(pictureBox1);
|
||||
groupBox1.Controls.Add(label4);
|
||||
@ -221,6 +223,16 @@
|
||||
pictureBox1.TabIndex = 14;
|
||||
pictureBox1.TabStop = false;
|
||||
//
|
||||
// button8
|
||||
//
|
||||
button8.Location = new System.Drawing.Point(427, 0);
|
||||
button8.Name = "button8";
|
||||
button8.Size = new System.Drawing.Size(101, 23);
|
||||
button8.TabIndex = 15;
|
||||
button8.Text = "Stop Camera";
|
||||
button8.UseVisualStyleBackColor = true;
|
||||
button8.Click += button8_Click;
|
||||
//
|
||||
// Form3
|
||||
//
|
||||
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
@ -272,5 +284,6 @@
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Button button7;
|
||||
private System.Windows.Forms.Button button8;
|
||||
}
|
||||
}
|
232
OTP/Form3.cs
232
OTP/Form3.cs
@ -1,7 +1,12 @@
|
||||
using ScreenCapturerNS;
|
||||
using FlashCap;
|
||||
using FlashCap.Utilities;
|
||||
using ScreenCapturerNS;
|
||||
using System;
|
||||
using System.Data.SQLite;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using ZXing;
|
||||
//using AForge.Video;
|
||||
@ -14,16 +19,20 @@ namespace OTP
|
||||
private string connectionString = "Data Source=key.db;Version=3;";
|
||||
private bool isCapturing = false; // 添加标识截图状态的成员变量
|
||||
private bool isLocalfile = false;
|
||||
private FilterInfoCollection videoDevices; // 声明用于存储摄像头设备信息的变量
|
||||
private VideoCaptureDevice camera; // 声明用于摄像头捕获的变量
|
||||
//private FilterInfoCollection videoDevices; // 声明用于存储摄像头设备信息的变量
|
||||
//private VideoCaptureDevice camera; // 声明用于摄像头捕获的变量
|
||||
private bool isCameraRunning = false; // 用于标识摄像头的运行状态
|
||||
private bool isScanningPaused = false;
|
||||
private Bitmap previousBitmap = null;
|
||||
//private Bitmap previousBitmap = null;
|
||||
private SynchronizationContext synchContext;
|
||||
|
||||
// Constructed capture device.
|
||||
private CaptureDevice captureDevice;
|
||||
|
||||
public Form3()
|
||||
{
|
||||
InitializeComponent();
|
||||
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
|
||||
//videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
|
||||
|
||||
}
|
||||
|
||||
@ -72,31 +81,6 @@ namespace OTP
|
||||
MessageBox.Show($"An error occurred: {ex.Message}");
|
||||
}
|
||||
}
|
||||
//这里摆烂,自用的怎么会犯操作上的错误,主要是遇到bug不想修,先晾着
|
||||
//private void deactivateButton(int btn)
|
||||
//{
|
||||
// if (btn == 3)
|
||||
// {
|
||||
// button1.Enabled = false;
|
||||
// button4.Enabled = false;
|
||||
// button5.Enabled = false;
|
||||
// button6.Enabled = false;
|
||||
// }
|
||||
//}
|
||||
//private void activeButton()
|
||||
//{
|
||||
// for (int i = 1; i <= 6; i++)
|
||||
// {
|
||||
// string buttonName = "button" + i;
|
||||
// Control[] controls = this.Controls.Find(buttonName, true);
|
||||
|
||||
// if (controls.Length > 0 && controls[0] is Button)
|
||||
// {
|
||||
// Button button = (Button)controls[0];
|
||||
// button.Enabled = true;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (isCapturing)
|
||||
@ -134,7 +118,7 @@ namespace OTP
|
||||
private void ScanQRCode(Bitmap bitmap)
|
||||
{
|
||||
// 创建二维码读取器实例
|
||||
BarcodeReader barcodeReader = new BarcodeReader();
|
||||
var barcodeReader = new ZXing.Windows.Compatibility.BarcodeReader();
|
||||
|
||||
// 尝试解码二维码
|
||||
Result result = barcodeReader.Decode(bitmap);
|
||||
@ -212,73 +196,146 @@ namespace OTP
|
||||
}
|
||||
}
|
||||
|
||||
private void button5_Click(object sender, EventArgs e)
|
||||
private async void button5_Click(object sender, EventArgs e)
|
||||
{
|
||||
isScanningPaused = false;
|
||||
button7.Text = "Pause";
|
||||
if (isCameraRunning)
|
||||
this.synchContext = SynchronizationContext.Current;
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// Initialize and start capture device
|
||||
|
||||
// Capture device enumeration:
|
||||
var devices = new CaptureDevices();
|
||||
|
||||
var descriptors = devices.EnumerateDescriptors().
|
||||
// You could filter by device type and characteristics.
|
||||
//Where(d => d.DeviceType == DeviceTypes.DirectShow). // Only DirectShow device.
|
||||
Where(d => d.Characteristics.Length >= 1). // One or more valid video characteristics.
|
||||
ToArray();
|
||||
|
||||
// Use first device.
|
||||
var descriptor0 = descriptors.ElementAtOrDefault(0);
|
||||
|
||||
if (descriptor0 != null)
|
||||
{
|
||||
StopCamera(); // 停止摄像头
|
||||
#if false
|
||||
// Request video characteristics strictly:
|
||||
// Will raise exception when parameters are not accepted.
|
||||
var characteristics = new VideoCharacteristics(
|
||||
PixelFormats.JPEG, 1920, 1080, 60);
|
||||
#else
|
||||
// Or, you could choice from device descriptor:
|
||||
// Hint: Show up video characteristics into ComboBox and like.
|
||||
var characteristics = descriptor0.Characteristics.
|
||||
FirstOrDefault(c => c.PixelFormat != PixelFormats.Unknown);
|
||||
#endif
|
||||
if (characteristics != null)
|
||||
{
|
||||
// Open capture device:
|
||||
this.captureDevice = await descriptor0.OpenAsync(
|
||||
characteristics,
|
||||
this.OnPixelBufferArrived);
|
||||
|
||||
// Start capturing.
|
||||
await this.captureDevice.StartAsync();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
}
|
||||
private void OnPixelBufferArrived(PixelBufferScope bufferScope)
|
||||
{
|
||||
////////////////////////////////////////////////
|
||||
// Pixel buffer has arrived.
|
||||
// NOTE: Perhaps this thread context is NOT UI thread.
|
||||
#if false
|
||||
// Get image data binary:
|
||||
byte[] image = bufferScope.Buffer.ExtractImage();
|
||||
#else
|
||||
// Or, refer image data binary directly.
|
||||
// (Advanced manipulation, see README.)
|
||||
ArraySegment<byte> image = bufferScope.Buffer.ReferImage();
|
||||
#endif
|
||||
// Convert to Stream (using FlashCap.Utilities)
|
||||
using (var stream = image.AsStream())
|
||||
{
|
||||
StartCamera(); // 启动摄像头
|
||||
// Decode image data to a bitmap:
|
||||
var bitmap = Image.FromStream(stream);
|
||||
|
||||
// `bitmap` is copied, so we can release pixel buffer now.
|
||||
bufferScope.ReleaseNow();
|
||||
|
||||
// Switch to UI thread.
|
||||
// HACK: Here is using `SynchronizationContext.Post()` instead of `Control.Invoke()`.
|
||||
// Because in sensitive states when the form is closing,
|
||||
// `Control.Invoke()` can fail with exception.
|
||||
this.synchContext.Post(_ =>
|
||||
{
|
||||
// HACK: on .NET Core, will be leaked (or delayed GC?)
|
||||
// So we could release manually before updates.
|
||||
var oldImage = this.BackgroundImage;
|
||||
if (oldImage != null)
|
||||
{
|
||||
//this.BackgroundImage = null;
|
||||
oldImage.Dispose();
|
||||
}
|
||||
|
||||
// Update a bitmap.
|
||||
pictureBox1.Image = bitmap;
|
||||
}, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void StartCamera()
|
||||
{
|
||||
if (!isCameraRunning) // 添加条件检查摄像头是否已经在运行
|
||||
{
|
||||
if (videoDevices != null && videoDevices.Count > 0)
|
||||
{
|
||||
if (camera == null)
|
||||
{
|
||||
camera = new VideoCaptureDevice(videoDevices[0].MonikerString);
|
||||
}
|
||||
camera.NewFrame += Camera_NewFrame; // 注册摄像头捕获图像的事件
|
||||
camera.Start(); // 启动摄像头
|
||||
isCameraRunning = true; // 设置摄像头运行状态为 true
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("No camera device found.");
|
||||
}
|
||||
}
|
||||
//if (!isCameraRunning) // 添加条件检查摄像头是否已经在运行
|
||||
//{
|
||||
// if (videoDevices != null && videoDevices.Count > 0)
|
||||
// {
|
||||
// if (camera == null)
|
||||
// {
|
||||
// camera = new VideoCaptureDevice(videoDevices[0].MonikerString);
|
||||
// }
|
||||
// camera.NewFrame += Camera_NewFrame; // 注册摄像头捕获图像的事件
|
||||
// camera.Start(); // 启动摄像头
|
||||
// isCameraRunning = true; // 设置摄像头运行状态为 true
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// MessageBox.Show("No camera device found.");
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
private void StopCamera()
|
||||
{
|
||||
if (camera != null && camera.IsRunning)
|
||||
{
|
||||
camera.SignalToStop();
|
||||
camera.WaitForStop();
|
||||
camera.NewFrame -= Camera_NewFrame; // 取消注册摄像头捕获图像的事件
|
||||
camera = null; // 将摄像头对象置为null,以便下次重新创建
|
||||
isCameraRunning = false; // 设置摄像头运行状态为 false
|
||||
isScanningPaused = false;
|
||||
button7.Text = "Pause";
|
||||
}
|
||||
//if (camera != null && camera.IsRunning)
|
||||
//{
|
||||
// camera.SignalToStop();
|
||||
// camera.WaitForStop();
|
||||
// camera.NewFrame -= Camera_NewFrame; // 取消注册摄像头捕获图像的事件
|
||||
// camera = null; // 将摄像头对象置为null,以便下次重新创建
|
||||
// isCameraRunning = false; // 设置摄像头运行状态为 false
|
||||
// isScanningPaused = false;
|
||||
// button7.Text = "Pause";
|
||||
//}
|
||||
}
|
||||
|
||||
private void Camera_NewFrame(object sender, NewFrameEventArgs eventArgs)
|
||||
{
|
||||
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
|
||||
if (!isScanningPaused)
|
||||
{
|
||||
if (previousBitmap != null)
|
||||
{
|
||||
previousBitmap.Dispose();
|
||||
}
|
||||
pictureBox1.Image = bitmap;
|
||||
previousBitmap = bitmap;
|
||||
}
|
||||
else
|
||||
{
|
||||
ScanQRCode(bitmap);
|
||||
bitmap.Dispose();
|
||||
}
|
||||
}
|
||||
//private void Camera_NewFrame(object sender, NewFrameEventArgs eventArgs)
|
||||
//{
|
||||
// //Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
|
||||
// //if (!isScanningPaused)
|
||||
// //{
|
||||
// // if (previousBitmap != null)
|
||||
// // {
|
||||
// // previousBitmap.Dispose();
|
||||
// // }
|
||||
// // pictureBox1.Image = bitmap;
|
||||
// // previousBitmap = bitmap;
|
||||
// //}
|
||||
// //else
|
||||
// //{
|
||||
// // ScanQRCode(bitmap);
|
||||
// // bitmap.Dispose();
|
||||
// //}
|
||||
//}
|
||||
|
||||
private void button7_Click(object sender, EventArgs e)
|
||||
{
|
||||
@ -312,5 +369,12 @@ namespace OTP
|
||||
MessageBox.Show("Clipboard content is not a valid OTP link.");
|
||||
}
|
||||
}
|
||||
|
||||
private void button8_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Discard capture device.
|
||||
this.captureDevice?.Dispose();
|
||||
this.captureDevice = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
|
@ -67,5 +67,6 @@
|
||||
<PackageReference Include="EntityFramework" Version="6.4.4" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
|
||||
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.12" />
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user