WIP: global hotkey

This commit is contained in:
Ray 2021-10-30 03:21:45 +01:00
parent 8c89ff6def
commit fe6a14c4ad
7 changed files with 341 additions and 53 deletions

7
MainForm.Designer.cs generated
View File

@ -230,6 +230,7 @@ namespace RandomFileRunner
this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12))); this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12)));
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.optionsToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
this.optionsToolStripMenuItem.Text = "&Options"; this.optionsToolStripMenuItem.Text = "&Options";
this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
// //
// helpToolStripMenuItem1 // helpToolStripMenuItem1
// //
@ -342,8 +343,8 @@ namespace RandomFileRunner
this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10); this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox1.Name = "textBox1"; this.textBox1.Name = "textBox1";
this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage"))); this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage")));
this.textBox1.Padding = new System.Windows.Forms.Padding(10, 9, 9, 8); this.textBox1.Padding = new System.Windows.Forms.Padding(10, 9, 9, 9);
this.textBox1.Size = new System.Drawing.Size(318, 33); this.textBox1.Size = new System.Drawing.Size(318, 34);
this.textBox1.SubmitButton = null; this.textBox1.SubmitButton = null;
this.textBox1.TabIndex = 44; this.textBox1.TabIndex = 44;
this.textBox1.UseSystemPasswordChar = false; this.textBox1.UseSystemPasswordChar = false;
@ -451,7 +452,7 @@ namespace RandomFileRunner
this.Controls.Add(this.pictureBox1); this.Controls.Add(this.pictureBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "MainForm"; this.Name = "MainForm";
this.Text = "222"; this.Text = "Random File Runner";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.menuStrip1.ResumeLayout(false); this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout(); this.menuStrip1.PerformLayout();

View File

@ -2,9 +2,11 @@
using RyzStudio.Windows.Forms; using RyzStudio.Windows.Forms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
@ -12,6 +14,21 @@ namespace RandomFileRunner
{ {
public partial class MainForm : Form public partial class MainForm : Form
{ {
[DllImport("user32.dll")]
protected static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
[DllImport("user32.dll")]
protected static extern bool UnregisterHotKey(IntPtr hWnd, int id);
//protected const int MOD_NONE = 0x0000;
//protected const int MOD_ALT = 0x1;
//protected const int MOD_CONTROL = 0x2;
//protected const int MOD_SHIFT = 0x4;
//protected const int MOD_WIN = 0x8;
protected const int WM_HOTKEY = 0x312;
protected const int WM_QUERYENDSESSION = 0x0011;
protected readonly Random randy; protected readonly Random randy;
protected OptionsForm optionsForm = null; protected OptionsForm optionsForm = null;
@ -32,15 +49,47 @@ namespace RandomFileRunner
randy = new Random(); randy = new Random();
} }
protected override void OnFormClosing(FormClosingEventArgs e) protected override void OnClosing(CancelEventArgs e)
{ {
base.OnClosing(e);
if (this.IsBusy) if (this.IsBusy)
{ {
e.Cancel = true; e.Cancel = true;
return; return;
} }
base.OnFormClosing(e); if (this.CurrentSession.ClosePrevOnNext) CloseCurrentProcess(currentProcess);
if (this.CurrentSession.NextHotKey != null)
{
if (this.CurrentSession.NextHotKey.KeyCode != Keys.None)
{
//#if !DEBUG
UnregisterHotKey((IntPtr)Handle, 1);
//#endif
}
}
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_HOTKEY:
if (m.WParam.ToInt32() == 1) button5_MouseClick(null, null);
break;
//case WM_QUERYENDSESSION:
// requestExit = true;
// //this.Close();
// Application.Exit();
// break;
default: break;
}
base.WndProc(ref m);
} }
@ -63,20 +112,9 @@ namespace RandomFileRunner
} }
} }
public AppSession CurrentSession { get; set; } = new AppSession(); public AppSession CurrentSession { get; set; } = new AppSession();
protected void AddSearchItem(string line)
{
memoBox1.Text = memoBox1.Text.Trim();
// above line-break
if (!string.IsNullOrWhiteSpace(memoBox1.Text)) memoBox1.Text += Environment.NewLine;
memoBox1.Text += line + Environment.NewLine;
}
protected bool SearchDirecory_OnFound(string file, ulong searchCount, int searchQueue) protected bool SearchDirecory_OnFound(string file, ulong searchCount, int searchQueue)
{ {
if (!string.IsNullOrWhiteSpace(file)) if (!string.IsNullOrWhiteSpace(file))
@ -91,6 +129,29 @@ namespace RandomFileRunner
} }
/// <summary>
/// Options
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.IsBusy)
{
return;
}
if (optionsForm == null) optionsForm = new OptionsForm(this.CurrentSession);
if (optionsForm.ShowDialog() == DialogResult.OK)
{
this.CurrentSession = optionsForm.Session;
InvalidateHotKey();
//this.TopMost = this.CurrentSession.AlwaysOnTop;
}
}
/// <summary> /// <summary>
/// Search /// Search
/// </summary> /// </summary>
@ -135,7 +196,7 @@ namespace RandomFileRunner
if (Directory.Exists(item)) if (Directory.Exists(item))
{ {
SmartDirectory.GetFiles(item, textBox1.Text, SearchDirecory_OnFound); SmartDirectory.GetFiles(item, textBox1.Text, this.CurrentSession.SearchTopDirectoryOnly, SearchDirecory_OnFound);
ThreadControl.SetText(label2, foundFiles.Count.ToString()); ThreadControl.SetText(label2, foundFiles.Count.ToString());
@ -232,9 +293,49 @@ namespace RandomFileRunner
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void button5_MouseClick(object sender, MouseEventArgs e) private async void button5_MouseClick(object sender, MouseEventArgs e)
{ {
await Task.Run(() =>
{
if (this.IsBusy) return;
//this.IsBusy = true;
if (this.CurrentSession == null) this.CurrentSession = new AppSession();
if (this.CurrentSession.ClosePrevOnNext) CloseCurrentProcess(currentProcess);
string filename = null;
// retry 8 times
for (int i = 0; i < this.CurrentSession.RetryOnError; i++)
{
filename = foundFiles[randy.Next(0, (foundFiles.Count - 1))];
if (File.Exists(filename))
{
continue;
}
filename = null;
}
if (!string.IsNullOrWhiteSpace(filename))
{
ProcessStartInfo psi = new ProcessStartInfo(filename);
psi.UseShellExecute = true;
try
{
currentProcess = Process.Start(psi);
}
catch (Exception)
{
// do nothing
}
}
//this.IsBusy = false;
});
} }
/// <summary> /// <summary>
@ -248,5 +349,68 @@ namespace RandomFileRunner
} }
protected void AddSearchItem(string line)
{
memoBox1.Text = memoBox1.Text.Trim();
// above line-break
if (!string.IsNullOrWhiteSpace(memoBox1.Text)) memoBox1.Text += Environment.NewLine;
memoBox1.Text += line + Environment.NewLine;
}
private void CloseCurrentProcess(Process p)
{
if (p == null) return;
try
{
p.CloseMainWindow();
//p.Close();
}
catch (Exception)
{
// do nothing
}
}
private void InvalidateHotKey()
{
//#if !DEBUG
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() =>
{
UnregisterHotKey((IntPtr)Handle, 1);
}));
}
else
{
UnregisterHotKey((IntPtr)Handle, 1);
}
//#endif
if (this.CurrentSession.NextHotKey != null)
{
if (this.CurrentSession.NextHotKey.KeyCode != Keys.None)
{
//#if !DEBUG
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() =>
{
RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.NextHotKey.ModifierCode, this.CurrentSession.NextHotKey.Key);
}));
}
else
{
RegisterHotKey((IntPtr)Handle, 1, this.CurrentSession.NextHotKey.ModifierCode, this.CurrentSession.NextHotKey.Key);
}
//#endif
}
}
}
} }
} }

View File

@ -19,12 +19,9 @@
public bool ClosePrevOnNext { get; set; } = false; public bool ClosePrevOnNext { get; set; } = false;
public HotKeyOptions NextHotKey { get; set; } = null; public int RetryOnError { get; set; } = 8;
public HotKeyOptions NextHotKey { get; set; } = new HotKeyOptions();
public bool AlwaysOnTop { get; set; } = false;
public int NoFrames { get; set; } = 3;
} }
} }

View File

@ -12,6 +12,11 @@ namespace RandomFileRunner
private System.Windows.Forms.Label label8; private System.Windows.Forms.Label label8;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator1;
private TNumericPickerBox pickerBox2; private TNumericPickerBox pickerBox2;
private TKeyCodeTextBox textBox1;
private TYesNoPickerBox pickerBox3;
private Label label1;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator3;
private Label label2;
private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2; private RyzStudio.Windows.Forms.THorizontalSeparator tHorizontalSeparator2;
@ -24,6 +29,8 @@ namespace RandomFileRunner
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionsForm));
RyzStudio.Windows.ThemedForms.TKeyCodeTextBox.Results results1 = new RyzStudio.Windows.ThemedForms.TKeyCodeTextBox.Results();
this.button1 = new RyzStudio.Windows.ThemedForms.TButton(); this.button1 = new RyzStudio.Windows.ThemedForms.TButton();
this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox(); this.pickerBox1 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
this.label6 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label();
@ -31,6 +38,11 @@ namespace RandomFileRunner
this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator(); this.tHorizontalSeparator1 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator(); this.tHorizontalSeparator2 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TNumericPickerBox(); this.pickerBox2 = new RyzStudio.Windows.ThemedForms.TNumericPickerBox();
this.textBox1 = new RyzStudio.Windows.ThemedForms.TKeyCodeTextBox();
this.pickerBox3 = new RyzStudio.Windows.ThemedForms.TYesNoPickerBox();
this.label1 = new System.Windows.Forms.Label();
this.tHorizontalSeparator3 = new RyzStudio.Windows.Forms.THorizontalSeparator();
this.label2 = new System.Windows.Forms.Label();
this.SuspendLayout(); this.SuspendLayout();
// //
// button1 // button1
@ -42,7 +54,7 @@ namespace RandomFileRunner
this.button1.IsSelected = false; this.button1.IsSelected = false;
this.button1.LabelText = "&Save"; this.button1.LabelText = "&Save";
this.button1.Location = new System.Drawing.Point(241, 469); this.button1.Location = new System.Drawing.Point(241, 469);
this.button1.Margin = new System.Windows.Forms.Padding(10); this.button1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10);
this.button1.Name = "button1"; this.button1.Name = "button1";
this.button1.OverImage = null; this.button1.OverImage = null;
this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3); this.button1.Padding = new System.Windows.Forms.Padding(4, 4, 3, 3);
@ -73,9 +85,9 @@ namespace RandomFileRunner
this.label6.Margin = new System.Windows.Forms.Padding(0); this.label6.Margin = new System.Windows.Forms.Padding(0);
this.label6.Name = "label6"; this.label6.Name = "label6";
this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); this.label6.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label6.Size = new System.Drawing.Size(117, 34); this.label6.Size = new System.Drawing.Size(81, 34);
this.label6.TabIndex = 182; this.label6.TabIndex = 182;
this.label6.Text = "Generate No. Frames"; this.label6.Text = "Retry On Error";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// label8 // label8
@ -87,9 +99,9 @@ namespace RandomFileRunner
this.label8.Margin = new System.Windows.Forms.Padding(0); this.label8.Margin = new System.Windows.Forms.Padding(0);
this.label8.Name = "label8"; this.label8.Name = "label8";
this.label8.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10); this.label8.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label8.Size = new System.Drawing.Size(89, 34); this.label8.Size = new System.Drawing.Size(143, 34);
this.label8.TabIndex = 186; this.label8.TabIndex = 186;
this.label8.Text = "Always-On-Top"; this.label8.Text = "Search Top Directory Only";
this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// tHorizontalSeparator1 // tHorizontalSeparator1
@ -100,7 +112,7 @@ namespace RandomFileRunner
this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.tHorizontalSeparator1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent; this.tHorizontalSeparator1.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437); this.tHorizontalSeparator1.Location = new System.Drawing.Point(10, 437);
this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.tHorizontalSeparator1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2); this.tHorizontalSeparator1.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22); this.tHorizontalSeparator1.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator1.Name = "tHorizontalSeparator1"; this.tHorizontalSeparator1.Name = "tHorizontalSeparator1";
@ -116,7 +128,7 @@ namespace RandomFileRunner
this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.tHorizontalSeparator2.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent; this.tHorizontalSeparator2.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator2.Location = new System.Drawing.Point(10, 59); this.tHorizontalSeparator2.Location = new System.Drawing.Point(10, 59);
this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(10, 0, 10, 0); this.tHorizontalSeparator2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2); this.tHorizontalSeparator2.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22); this.tHorizontalSeparator2.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator2.Name = "tHorizontalSeparator2"; this.tHorizontalSeparator2.Name = "tHorizontalSeparator2";
@ -138,11 +150,95 @@ namespace RandomFileRunner
this.pickerBox2.TabIndex = 193; this.pickerBox2.TabIndex = 193;
this.pickerBox2.Value = 0; this.pickerBox2.Value = 0;
// //
// textBox1
//
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.BackColor = System.Drawing.Color.Transparent;
this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.textBox1.HighlightImage = ((System.Drawing.Image)(resources.GetObject("textBox1.HighlightImage")));
results1.IsAlt = false;
results1.IsCtrl = false;
results1.IsShift = false;
results1.Key = System.Windows.Forms.Keys.None;
this.textBox1.KeyCodeResults = results1;
this.textBox1.Location = new System.Drawing.Point(241, 197);
this.textBox1.Margin = new System.Windows.Forms.Padding(10, 0, 0, 10);
this.textBox1.Name = "textBox1";
this.textBox1.NormalImage = ((System.Drawing.Image)(resources.GetObject("textBox1.NormalImage")));
this.textBox1.Padding = new System.Windows.Forms.Padding(10, 9, 9, 9);
this.textBox1.Size = new System.Drawing.Size(128, 34);
this.textBox1.SubmitButton = null;
this.textBox1.TabIndex = 194;
this.textBox1.UseSystemPasswordChar = false;
//
// pickerBox3
//
this.pickerBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pickerBox3.BackColor = System.Drawing.Color.Transparent;
this.pickerBox3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.pickerBox3.Location = new System.Drawing.Point(285, 127);
this.pickerBox3.Margin = new System.Windows.Forms.Padding(10, 4, 10, 4);
this.pickerBox3.Name = "pickerBox3";
this.pickerBox3.Padding = new System.Windows.Forms.Padding(10, 6, 7, 5);
this.pickerBox3.Size = new System.Drawing.Size(84, 34);
this.pickerBox3.SubmitButton = null;
this.pickerBox3.TabIndex = 195;
this.pickerBox3.Value = true;
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
this.label1.Location = new System.Drawing.Point(10, 127);
this.label1.Margin = new System.Windows.Forms.Padding(0);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label1.Size = new System.Drawing.Size(169, 34);
this.label1.TabIndex = 196;
this.label1.Text = "Close Current Process On Next";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tHorizontalSeparator3
//
this.tHorizontalSeparator3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tHorizontalSeparator3.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator3.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.tHorizontalSeparator3.BackColor = System.Drawing.Color.Transparent;
this.tHorizontalSeparator3.Location = new System.Drawing.Point(10, 165);
this.tHorizontalSeparator3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 10);
this.tHorizontalSeparator3.MaximumSize = new System.Drawing.Size(4920, 2);
this.tHorizontalSeparator3.MinimumSize = new System.Drawing.Size(0, 22);
this.tHorizontalSeparator3.Name = "tHorizontalSeparator3";
this.tHorizontalSeparator3.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10);
this.tHorizontalSeparator3.Size = new System.Drawing.Size(364, 22);
this.tHorizontalSeparator3.TabIndex = 197;
//
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.ForeColor = System.Drawing.SystemColors.ControlText;
this.label2.Location = new System.Drawing.Point(10, 197);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Padding = new System.Windows.Forms.Padding(0, 9, 0, 10);
this.label2.Size = new System.Drawing.Size(81, 34);
this.label2.TabIndex = 198;
this.label2.Text = "Retry On Error";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// OptionsForm // OptionsForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 521); this.ClientSize = new System.Drawing.Size(384, 521);
this.Controls.Add(this.label2);
this.Controls.Add(this.tHorizontalSeparator3);
this.Controls.Add(this.label1);
this.Controls.Add(this.pickerBox3);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.pickerBox2); this.Controls.Add(this.pickerBox2);
this.Controls.Add(this.tHorizontalSeparator2); this.Controls.Add(this.tHorizontalSeparator2);
this.Controls.Add(this.tHorizontalSeparator1); this.Controls.Add(this.tHorizontalSeparator1);
@ -164,8 +260,10 @@ namespace RandomFileRunner
this.DialogResult = System.Windows.Forms.DialogResult.None; this.DialogResult = System.Windows.Forms.DialogResult.None;
pickerBox1.Value = this.Session.AlwaysOnTop; pickerBox1.Value = this.Session.SearchTopDirectoryOnly;
pickerBox2.Clear(1, 20, this.Session.NoFrames); pickerBox2.Clear(0, 20, this.Session.RetryOnError);
pickerBox3.Value = this.Session.ClosePrevOnNext;
if (this.Session.NextHotKey != null) textBox1.UpdateKeyCode(this.Session.NextHotKey.IsCtrl, this.Session.NextHotKey.IsAlt, this.Session.NextHotKey.IsShift, this.Session.NextHotKey.KeyCode);
} }
@ -176,8 +274,13 @@ namespace RandomFileRunner
{ {
if (this.Session == null) this.Session = new AppSession(); if (this.Session == null) this.Session = new AppSession();
this.Session.AlwaysOnTop = pickerBox1.Value; this.Session.SearchTopDirectoryOnly = pickerBox1.Value;
this.Session.NoFrames = pickerBox2.Value; this.Session.RetryOnError = pickerBox2.Value;
this.Session.ClosePrevOnNext = pickerBox3.Value;
this.Session.NextHotKey.IsCtrl = textBox1.KeyCodeResults.IsCtrl;
this.Session.NextHotKey.IsAlt = textBox1.KeyCodeResults.IsAlt;
this.Session.NextHotKey.IsShift = textBox1.KeyCodeResults.IsShift;
this.Session.NextHotKey.Key = textBox1.KeyCodeResults.KeyCode;
this.DialogResult = DialogResult.OK; this.DialogResult = DialogResult.OK;
this.Close(); this.Close();

View File

@ -57,4 +57,24 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="textBox1.HighlightImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAClSURBVDhP7dI/
DgFBGIbxSVTKjcRx3MLqXYCOjkocQcMF3MAZOIKaE5AthOexf2QnbJQKb/JLJvO9XzLFhCgtbHDBveB5
DWcfM8ANC0wKnr1LUUsbHXSxxBlJxDtnduy6E04on/Utd0IPOxwxxBT9iHfO7Nh155kV9vmxMXbsVvkv
vvIji4f82Bg7tcUxrpih/NyxOeyMUMVPu0WGd39TzuzQDeEB5/ZKvTSyulEAAAAASUVORK5CYII=
</value>
</data>
<data name="textBox1.NormalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADTSURBVDhP7ZI7
CsJQEEUfWFmK4HLchdpnA9ppp5W4BBtdQNyBC0ilRf6VdVyBwUL03JdXxC/YWThwmDcz94YJjKmH7/uN
OI7XaZqekiS5Cr1hpZmTPQemAeILeU4eC/dWr+9kVQRB0MzzvB2GYQfBAsExiqJWHfU0k0ZaeQyNAuxa
X1CYLMu6/MOW4kD2YAK9B9TznGYrj12XVZY0drb4ENJI68q/sR4/YoS9K9+GNHdGLmIEJV+cku1xP4Jh
Ri7JQ2erDp3mBs7w6jaFZht74MaYGwmLbkeRGexGAAAAAElFTkSuQmCC
</value>
</data>
</root> </root>

View File

@ -2,16 +2,13 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace RandomFileRunner.IO namespace RandomFileRunner.IO
{ {
public class SmartDirectory public class SmartDirectory
{ {
public static List<string> GetFiles(string path, string pattern) public static List<string> GetFiles(string path, string pattern, bool searchTopOnly)
{ {
List<string> fileList = new List<string>(); List<string> fileList = new List<string>();
List<string> directoryList = new List<string>(); List<string> directoryList = new List<string>();
@ -43,6 +40,8 @@ namespace RandomFileRunner.IO
continue; continue;
} }
if (!searchTopOnly)
{
foreach (string item in searchDirList) foreach (string item in searchDirList)
{ {
if (!IsDirectoryAccessible(item)) if (!IsDirectoryAccessible(item))
@ -52,6 +51,7 @@ namespace RandomFileRunner.IO
directoryList.Add(item); directoryList.Add(item);
} }
}
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
{ {
@ -73,7 +73,7 @@ namespace RandomFileRunner.IO
return fileList; return fileList;
} }
public static void GetFiles(string path, string pattern, Func<string, ulong, int, bool> callback) public static void GetFiles(string path, string pattern, bool searchTopOnly, Func<string, ulong, int, bool> callback)
{ {
List<string> directoryList = new List<string>(); List<string> directoryList = new List<string>();
ulong searchCount = 0; ulong searchCount = 0;
@ -108,6 +108,8 @@ namespace RandomFileRunner.IO
continue; continue;
} }
if (!searchTopOnly)
{
foreach (string item in searchDirList) foreach (string item in searchDirList)
{ {
if (!IsDirectoryAccessible(item)) if (!IsDirectoryAccessible(item))
@ -120,6 +122,7 @@ namespace RandomFileRunner.IO
callback(null, searchCount, directoryList.Count); callback(null, searchCount, directoryList.Count);
} }
}
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
{ {

View File

@ -8,7 +8,7 @@
public partial class TButtonTextBox : RyzStudio.Windows.ThemedForms.TUserControl public partial class TButtonTextBox : RyzStudio.Windows.ThemedForms.TUserControl
{ {
protected readonly Padding defaultPadding = new Padding(6, 5, 6, 5); protected readonly Padding defaultPadding = new Padding(6, 5, 6, 6);
protected readonly Padding defaultMargin = new Padding(10, 0, 0, 10); protected readonly Padding defaultMargin = new Padding(10, 0, 0, 10);