## 📅2025-09-11 星期四更新

### DyLine    V2.0.2509.1101
- *.[改进]消息发送机制采用Unicode。
### VSoft    V2.0.2509.1101
- *.[新增]支持对启动软件设置是否开机启动。
- *.[改进]防止快速点击分类时激活拖放功能。
- *.[改进]主窗体软件版本号改为默认从VSoft.dll获取。
- *.[改进]针对调用流程软件的功能,直接通过主程序实现,提升打开速度。
- *.[修复]修复添加内置功能后不能直接打开,需要二次启动后才能打开的BUG。
- *.[修复]修复拖放文件到列表,图标可能无法正常显示的BUG。
- *.[修复]修复从桌面拖放到列表,图标无法马上显示的BUG。
- *.[修复]修改软件后缓存图标不会更新的BUG。
This commit is contained in:
紫林软件 2025-09-11 10:19:39 +08:00
parent df540b741e
commit c773aa54bc
34 changed files with 1979 additions and 277 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,9 +1,9 @@
[VSoft]
hwnd=395104
hwnd=1119170
width=802
height=626
ColumnId=1
TypeId=8
TypeId=2
[VSoft_Test]
hwnd=657946
width=733

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,18 @@
## :date:2025-09-11 星期四更新
### DyLine V2.0.2509.1101
- :100:[改进]消息发送机制采用Unicode。
### VSoft V2.0.2509.1101
- :cactus:[新增]支持对启动软件设置是否开机启动。
- :100:[改进]防止快速点击分类时激活拖放功能。
- :100:[改进]主窗体软件版本号改为默认从VSoft.dll获取。
- :100:[改进]针对调用流程软件的功能,直接通过主程序实现,提升打开速度。
- :lady_beetle:[修复]修复添加内置功能后不能直接打开,需要二次启动后才能打开的BUG。
- :lady_beetle:[修复]修复拖放文件到列表,图标可能无法正常显示的BUG。
- :lady_beetle:[修复]修复从桌面拖放到列表,图标无法马上显示的BUG。
- :lady_beetle:[修复]修改软件后缓存图标不会更新的BUG。
### 2024-12-17更新
------
@ -155,5 +170,4 @@
- *.[删除]删除管理员方式打开软件的警告通知。
- *.[改进]当当前路径没有填写时,默认使用软件路径所在文件夹作为当前路径。
- *.[更新]更新Newtonsoft.Json.dll到12.0.3.23909版本
- *.[更新]更新Newtonsoft.Json.dll到12.0.3.23909版本

View File

@ -23,7 +23,7 @@ namespace DyLine
var item = args[i];
if(item.StartsWith("show=",StringComparison.OrdinalIgnoreCase))
{
clsMsg ryMsg = new clsMsg();
ClsMsg ryMsg = new ClsMsg();
ryMsg.SendMsgToryProcess(0, item);//向流程软件发送连接信息
}

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.2312.0401")]
[assembly: AssemblyFileVersion("2.0.2312.0401")]
[assembly: AssemblyVersion("2.0.2509.1101")]
[assembly: AssemblyFileVersion("2.0.2509.1101")]

View File

@ -7,7 +7,7 @@ using System.Windows.Forms;
namespace DyLine
{
public class clsMsg
public class ClsMsg
{
[DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]
private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);
@ -21,24 +21,25 @@ namespace DyLine
[DllImport("user32.dll", EntryPoint = "IsWindow")]
private static extern bool IsWindow(IntPtr hWnd);
private const int WM_COPYDATA = 0x004A;
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cData;
[MarshalAs(UnmanagedType.LPStr)]
[MarshalAs(UnmanagedType.LPWStr)]
public string lpData;
}
[DllImport("User32.dll", EntryPoint = "SendMessage")]
[DllImport("User32.dll", CharSet = CharSet.Unicode, EntryPoint = "SendMessage")]
private static extern int SendMessage(int hwnd, int msg, int wParam, ref COPYDATASTRUCT IParam);
private delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);
public void SendMsg(int handle, int wParam, string str)
{
byte[] arr = System.Text.Encoding.Default.GetBytes(str);
byte[] arr = System.Text.Encoding.Unicode.GetBytes(str);
int len = arr.Length;
COPYDATASTRUCT cdata;
cdata.dwData = (IntPtr)100;
cdata.lpData = str;
cdata.cData = len + 1;
cdata.cData = (len + 1)*2;
SendMessage(handle, WM_COPYDATA, wParam, ref cdata);
}

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.2412.1701")]
[assembly: AssemblyFileVersion("2.0.2412.1701")]
[assembly: AssemblyVersion("2.0.2504.0901")]
[assembly: AssemblyFileVersion("2.0.2504.0901")]

View File

@ -19,7 +19,14 @@ namespace VSoft
private void FrmAbout_Load(object sender, EventArgs e)
{
lblTitle.Text = Soft_Info.Soft_Title + " V" + ryCommon.RySoft.VersionStr;
if (System.IO.File.Exists(Application.StartupPath + "\\VSoft.dll"))
{
lblTitle.Text = Config.Soft_Info.Soft_Title + " V" + ryCommon.RySoft.GetVersionStr(Application.StartupPath + "\\VSoft.dll");
}
else
{
lblTitle.Text = Config.Soft_Info.Soft_Title + " V" + ryCommon.RySoft.GetVersionStr(Application.ExecutablePath);
}
LblQQ_Qun.Text = Soft_Info.QQ_Qun;
if (Soft_Info.Soft_Url.Length == 0) { lblVisitUrl.Enabled = false; }
}

View File

@ -37,6 +37,7 @@
this.of_File = new System.Windows.Forms.OpenFileDialog();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.NumRunCount = new System.Windows.Forms.NumericUpDown();
this.NumWinRunDelay = new System.Windows.Forms.NumericUpDown();
this.TxtCmdId = new ryControls.TextBoxEx2();
this.label6 = new System.Windows.Forms.Label();
this.LblCustomImg = new System.Windows.Forms.Label();
@ -44,6 +45,9 @@
this.label4 = new System.Windows.Forms.Label();
this.chromeTabControl1 = new ryControls.ChromeTabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.label11 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.ChkWinStartRun = new System.Windows.Forms.CheckBox();
this.label9 = new System.Windows.Forms.Label();
this.CbbRunMode = new System.Windows.Forms.ComboBox();
this.label8 = new System.Windows.Forms.Label();
@ -64,6 +68,7 @@
this.TxtName = new ryControls.TextBoxEx2();
this.contextMenuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NumRunCount)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NumWinRunDelay)).BeginInit();
this.chromeTabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.PicImg)).BeginInit();
@ -124,6 +129,21 @@
0,
0});
//
// NumWinRunDelay
//
this.NumWinRunDelay.Enabled = false;
this.NumWinRunDelay.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.NumWinRunDelay.Location = new System.Drawing.Point(178, 198);
this.NumWinRunDelay.Maximum = new decimal(new int[] {
10,
0,
0,
0});
this.NumWinRunDelay.Name = "NumWinRunDelay";
this.NumWinRunDelay.Size = new System.Drawing.Size(74, 26);
this.NumWinRunDelay.TabIndex = 17;
this.NumWinRunDelay.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// TxtCmdId
//
this.TxtCmdId.BackColor = System.Drawing.Color.White;
@ -211,6 +231,7 @@
this.chromeTabControl1.BackTabPageImage = null;
this.chromeTabControl1.Controls.Add(this.tabPage1);
this.chromeTabControl1.Cursor = System.Windows.Forms.Cursors.Default;
this.chromeTabControl1.DrawTabBorder = true;
this.chromeTabControl1.ItemSize = new System.Drawing.Size(100, 25);
this.chromeTabControl1.Location = new System.Drawing.Point(12, 155);
this.chromeTabControl1.Name = "chromeTabControl1";
@ -218,13 +239,16 @@
this.chromeTabControl1.ShowAddButton = false;
this.chromeTabControl1.ShowCloseButton = false;
this.chromeTabControl1.Size = new System.Drawing.Size(650, 415);
this.chromeTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
this.chromeTabControl1.TabContextMenuStrip = null;
this.chromeTabControl1.TabIndex = 9;
this.chromeTabControl1.TabMaxWidth = 100;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.label11);
this.tabPage1.Controls.Add(this.label10);
this.tabPage1.Controls.Add(this.NumWinRunDelay);
this.tabPage1.Controls.Add(this.ChkWinStartRun);
this.tabPage1.Controls.Add(this.NumRunCount);
this.tabPage1.Controls.Add(this.label9);
this.tabPage1.Controls.Add(this.CbbRunMode);
@ -247,6 +271,35 @@
this.tabPage1.Text = "运行";
this.tabPage1.UseVisualStyleBackColor = true;
//
// label11
//
this.label11.AutoSize = true;
this.label11.Location = new System.Drawing.Point(256, 206);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(41, 12);
this.label11.TabIndex = 19;
this.label11.Text = "秒启动";
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(145, 206);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(29, 12);
this.label10.TabIndex = 18;
this.label10.Text = "延时";
//
// ChkWinStartRun
//
this.ChkWinStartRun.AutoSize = true;
this.ChkWinStartRun.Location = new System.Drawing.Point(8, 205);
this.ChkWinStartRun.Name = "ChkWinStartRun";
this.ChkWinStartRun.Size = new System.Drawing.Size(120, 16);
this.ChkWinStartRun.TabIndex = 16;
this.ChkWinStartRun.Text = "开机时启动该软件";
this.ChkWinStartRun.UseVisualStyleBackColor = true;
this.ChkWinStartRun.CheckedChanged += new System.EventHandler(this.ChkWinStartRun_CheckedChanged);
//
// label9
//
this.label9.AutoSize = true;
@ -258,6 +311,7 @@
//
// CbbRunMode
//
this.CbbRunMode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.CbbRunMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CbbRunMode.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.CbbRunMode.FormattingEnabled = true;
@ -273,6 +327,7 @@
//
// label8
//
this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(504, 8);
this.label8.Name = "label8";
@ -324,6 +379,8 @@
//
// TxtStartPath
//
this.TxtStartPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TxtStartPath.BackColor = System.Drawing.Color.White;
this.TxtStartPath.EmptyText = "留空则表示使用默认设置";
this.TxtStartPath.Location = new System.Drawing.Point(6, 103);
@ -355,6 +412,8 @@
//
// TxtPath
//
this.TxtPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TxtPath.BackColor = System.Drawing.Color.White;
this.TxtPath.EmptyText = "";
this.TxtPath.Location = new System.Drawing.Point(6, 23);
@ -396,6 +455,8 @@
//
// TxtRunPram
//
this.TxtRunPram.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TxtRunPram.BackColor = System.Drawing.Color.White;
this.TxtRunPram.EmptyText = "";
this.TxtRunPram.Location = new System.Drawing.Point(6, 63);
@ -511,6 +572,7 @@
this.Load += new System.EventHandler(this.FrmAddSoft_Load);
this.contextMenuStrip1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.NumRunCount)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NumWinRunDelay)).EndInit();
this.chromeTabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.tabPage1.PerformLayout();
@ -554,5 +616,9 @@
private System.Windows.Forms.Label label8;
private System.Windows.Forms.NumericUpDown NumRunCount;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.CheckBox ChkWinStartRun;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.NumericUpDown NumWinRunDelay;
private System.Windows.Forms.Label label11;
}
}

View File

@ -84,7 +84,9 @@ namespace VSoft
Json json = new Json(reader["SetJson"].ToString());
ChkRunAsAdmin.Checked = json.GetJsonValue("RunAsAdmin", false);
CbbRunMode.SelectedIndex = json.GetJsonValue("RunMode", 0);
ChkWinStartRun.Checked = reader["WinStartRun"].ToInt()==1;
NumRunCount.Value = json.GetJsonValue("RunCount", 1, NumRunCount.Maximum.ToInt(), 1);
NumWinRunDelay.Value = json.GetJsonValue("WinRunDelay", 0, NumWinRunDelay.Maximum.ToInt(), 0);
var _IconPath = reader["IconPath"].ToString();
orgion_IconPath = _IconPath;
IconPath = _IconPath;
@ -133,6 +135,17 @@ namespace VSoft
RyFiles.DeleteFile(RyFiles.GetRealPath(orgion_IconPath));
}
}
var truePath= RyFiles.GetRealPath(TxtPath.Text);
if (System.IO.File.Exists(truePath))
{
if (API.HaveRunFromRegedit(truePath))
{
if (Msg.ShowMsg("该软件已添加到注册表进行开机启动,这样会导致重复启动,是否从注册表中删除。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
API.DelRunFromRegedit(truePath);
}
}
}
DataProvider mydb = new DataProvider();
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
if (db.ConnDb(SQLConnStr) == 1)
@ -181,7 +194,9 @@ namespace VSoft
json.Add("RunAsAdmin", ChkRunAsAdmin.Checked);
json.Add("RunMode", CbbRunMode.SelectedIndex);
json.Add("RunCount", NumRunCount.Value.ToInt());
json.Add("WinRunDelay", NumWinRunDelay.Value.ToInt());
mySQL.AddField("SetJson", json.Text);//设置
mySQL.AddField("WinStartRun", ChkWinStartRun.Checked?1:0);//开机启动
mySQL.AddField("Des", TxtDes.Text);//备注
mySQL.AddField("Hotkey", hotkeyTextBox1.HaveHotKey?hotkeyTextBox1.HotKey:"");//快捷键
mySQL.AddField("Pinyin", ryCommon.PinYin.Convert(TxtName.Text) + "\r\n" + ryCommon.PinYin.ConvertFirstPY(TxtName.Text));
@ -268,5 +283,10 @@ namespace VSoft
PicImg.Image = API.GetImg(RyFiles.GetRealPath(TxtPath.Text));
LblCustomImg.Text = "自动获取";
}
private void ChkWinStartRun_CheckedChanged(object sender, EventArgs e)
{
NumWinRunDelay.Enabled = ChkWinStartRun.Checked;
}
}
}

View File

@ -43,6 +43,8 @@
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.BtnAddColumn = new System.Windows.Forms.Button();
this.MenuTabColumn = new System.Windows.Forms.ContextMenuStrip(this.components);
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -73,6 +75,7 @@
this.TabList_Column = new ryControls.TabList();
this.BtnLeftColumn = new ryControls.ButtonEx();
this.BtnRightColumn = new ryControls.ButtonEx();
this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
this.MenuList.SuspendLayout();
this.MenuTabColumn.SuspendLayout();
this.MenuTabType.SuspendLayout();
@ -91,28 +94,31 @@
this.ToolStripMenuItem,
this.ToolStripMenuItem,
this.toolStripMenuItem1,
this.ToolStripMenuItem});
this.ToolStripMenuItem,
this.ToolStripMenuItem,
this.toolStripMenuItem4,
this.ToolStripMenuItem});
this.MenuList.Name = "contextMenuStrip1";
this.MenuList.Size = new System.Drawing.Size(185, 148);
this.MenuList.Size = new System.Drawing.Size(197, 220);
this.MenuList.Opening += new System.ComponentModel.CancelEventHandler(this.MenuList_Opening);
//
// 以管理员方式启动ToolStripMenuItem
//
this.ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("以管理员方式启动ToolStripMenuItem.Image")));
this.ToolStripMenuItem.Name = "以管理员方式启动ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "以管理员方式启动";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(181, 6);
this.toolStripMenuItem2.Size = new System.Drawing.Size(193, 6);
//
// 新增软件ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "新增软件ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "添加软件";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
@ -120,36 +126,50 @@
//
this.ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("新增内置功能ToolStripMenuItem.Image")));
this.ToolStripMenuItem.Name = "新增内置功能ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "添加内置功能";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// 修改软件ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "修改软件ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "修改软件";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// 从列表删除该软件ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "从列表删除该软件ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "从列表删除选定软件";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(181, 6);
this.toolStripMenuItem1.Size = new System.Drawing.Size(193, 6);
//
// 打开软件所在位置ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "打开软件所在位置ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "打开软件所在位置";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// 开机启动该软件ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "开机启动该软件ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "开机启动该软件";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// 查看全部开机启动软件ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "查看全部开机启动软件ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(196, 22);
this.ToolStripMenuItem.Text = "查看全部开机启动软件";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// BtnAddColumn
//
this.BtnAddColumn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
@ -498,6 +518,11 @@
this.BtnRightColumn.UseVisualStyleBackColor = true;
this.BtnRightColumn.Click += new System.EventHandler(this.BtnRightColumn_Click);
//
// toolStripMenuItem4
//
this.toolStripMenuItem4.Name = "toolStripMenuItem4";
this.toolStripMenuItem4.Size = new System.Drawing.Size(193, 6);
//
// FrmVSoft
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@ -639,6 +664,7 @@
themeForm1.ShadowWidth = 1;
themeForm1.ShowShadow = false;
themeForm1.SideResizeWidth = 4;
themeForm1.TabRadius = 8;
themeForm1.TextLeftMargin = 2;
themeForm1.UseDefaultTopRoundingFormRegion = false;
themeForm1.UseShadowToResize = false;
@ -702,5 +728,8 @@
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
private ryControls.ButtonEx BtnLeftColumn;
private ryControls.ButtonEx BtnRightColumn;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;
}
}

View File

@ -9,6 +9,7 @@ using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using VSoft.Config;
using VSoft.Prams;
@ -28,7 +29,14 @@ namespace VSoft
prog_args = args;
//配置软件信息
notifyIcon1.Text = Config.Soft_Info.Soft_Title;
Text = Config.Soft_Info.Soft_Title + " V" + RySoft.GetVersionStr(Application.ExecutablePath);
if (System.IO.File.Exists(Application.StartupPath + "\\VSoft.dll"))
{
Text = Config.Soft_Info.Soft_Title + " V" + RySoft.GetVersionStr(Application.StartupPath + "\\VSoft.dll");
}
else
{
Text = Config.Soft_Info.Soft_Title + " V" + RySoft.GetVersionStr(Application.ExecutablePath);
}
#if TEST
Text +=" V内部测试版";
#endif
@ -137,6 +145,7 @@ namespace VSoft
RunPram = row["RunPram"].ToString(),
SetJson = row["SetJson"].ToString(),
StartPath = row["StartPath"].ToString(),
WinStartRun = row["WinStartRun"].ToInt()==1,
IconPath = row["IconPath"].ToString()
};
string img_path;
@ -261,7 +270,7 @@ namespace VSoft
}
}
}
Dictionary<int,SelectInfo> dict_cache_type=new Dictionary<int, SelectInfo>();
private readonly Dictionary<int, SelectInfo> dict_cache_type = new Dictionary<int, SelectInfo>();
private void LoadTypeColumn(int id)
{
TabList_Type.Items.Clear();
@ -363,6 +372,53 @@ namespace VSoft
}
db2.Free();
}
/// <summary>
/// 开机启动
/// </summary>
private void WinStart()
{
IDbInterface db2 = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
if (db2.ConnDb(SQLConnStr) == 1)
{
var ds = db2.ReadData("select * from Softs where WinStartRun=1");
if (ds.HaveData())
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
var row = ds.GetRow(i);
SoftInfo info = new SoftInfo
{
Id = row["id"].ToInt(),
SoftType = row["SoftType"].ToInt(),
ColumnId = row["ColumnId"].ToInt(),
Name = row["Name"].ToString(),
Path = row["Path"].ToString(),
RunPram = row["RunPram"].ToString(),
SetJson = row["SetJson"].ToString(),
StartPath = row["StartPath"].ToString(),
WinStartRun = row["WinStartRun"].ToInt() == 1,
IconPath = row["IconPath"].ToString()
};
Json json = new Json(row["SetJson"].ToString());
var WinRunDelay=json.GetJsonValue("WinRunDelay", 0,10, 0);
if (WinRunDelay == 0)
{
VSoft.Prams.Run.Open(info, false);
}
else
{
Task.Run(() =>
{
Task.Delay(WinRunDelay*1000);
VSoft.Prams.Run.Open(info, false);
});
}
}
}
ds.Dispose();
}
db2.Free();
}
SysFuns.WinHotReg hotkey;
private void FrmVSoft_Load(object sender, EventArgs e)
{
@ -477,6 +533,13 @@ namespace VSoft
#endif
mouse.OnMouseActivity += Mouse_OnMouseActivity;
mouse.Start();
if(prog_args.Length>0)
{
if (prog_args[0]==Soft_Info.Soft_Pram)
{
WinStart();
}
}
}
private void Hotkey_OnHotkey(int HotKeyID)
@ -948,6 +1011,7 @@ namespace VSoft
info.StartPath = row["StartPath"].ToString();
info.IconPath = row["IconPath"].ToString();
info.SoftType = row["SoftType"].ToInt();
info.WinStartRun = row["WinStartRun"].ToInt()==1;
if (info.IconPath.Length == 0)
{
info.Image = API.GetImg(info.TruePath, 128);
@ -969,6 +1033,10 @@ namespace VSoft
{
dictCacheImg.Add(img_path, info.Image);
}
else
{
dictCacheImg[img_path] = info.Image;
}
item.Text = row["Name"].ToString();
}
db.Free();
@ -1031,6 +1099,7 @@ namespace VSoft
RunPram = row["RunPram"].ToString(),
SetJson = row["SetJson"].ToString(),
StartPath = row["StartPath"].ToString(),
WinStartRun = row["WinStartRun"].ToInt()==1,
IconPath = row["IconPath"].ToString()
};
string img_path;
@ -1360,9 +1429,10 @@ namespace VSoft
RunPram = pram,
SetJson = json.Text,
StartPath = StartPath,
IconPath = ""
IconPath = icon
};
string img_path = info.TruePath;
string img_path = icon;
if (img_path.Length == 0) { img_path=path; }
if (dictCacheImg.ContainsKey(img_path))
{
info.Image = dictCacheImg[img_path];
@ -1411,7 +1481,7 @@ namespace VSoft
{
IconViewEx1.BeginUpdate();
IconViewEx1.View = View.List;
if (index == -1)
if (index == -1 || index==IconViewEx1.Items.Count-1)
{
IconViewEx1.Items.Add(soft.Name).Tag = soft;
}
@ -1611,8 +1681,10 @@ namespace VSoft
}
#endregion
#region
private DateTime dt_type_drag_time = DateTime.MinValue;
private void TabList_Type_DragEnter(object sender, DragEventArgs e)
{
dt_type_drag_time = DateTime.Now;
//判定是否现在拖动的数据是LISTVIEW项
ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
if (lvi != null)
@ -1623,10 +1695,14 @@ namespace VSoft
private void TabList_Type_DragDrop(object sender, DragEventArgs e)
{
Point pt;
IconViewEx1.InsertionMark.Index = -1;
TabList_Type.InsertionMark.Index = -1;
TabList_Column.InsertionMark.Index = -1;
if (dt_type_drag_time.AddMilliseconds(300)>DateTime.Now)
{
return;
}
Point pt;
pt = ((TabList)(sender)).PointToClient(new Point(e.X, e.Y));
var item = TabList_Type.GetItemAt(pt.X, pt.Y);
if (item == null) { return; }
@ -1966,6 +2042,7 @@ namespace VSoft
if (frm.ShowDialog(this)==DialogResult.OK)
{
var info = frm.SelectedInfo;
info.SoftType = 1;
RyQuickSQL mySQL = new RyQuickSQL("Softs");
mySQL.AddField("Name", info.Name);
mySQL.AddField("SoftType",1);//0表示运行文件,1表示执行内置命令,2表示执行脚本
@ -2073,6 +2150,12 @@ namespace VSoft
ToolStripMenuItem.Enabled = isSelected;
ToolStripMenuItem.Enabled = isSelected;
ToolStripMenuItem.Enabled = isSelected;
ToolStripMenuItem.Enabled = isSelected;
if (isSelected)
{
var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag;
ToolStripMenuItem.Checked = info.WinStartRun;
}
}
private void IconViewEx1_Resize(object sender, EventArgs e)
@ -2206,6 +2289,63 @@ namespace VSoft
//TabList_Column.item = TabList_Column.Items[index];
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (IconViewEx1.SelectedItems.Count == 0) { return; }
var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag;
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
if (db.ConnDb(SQLConnStr) == 1)
{
DataSet ds = db.ReadData("Softs", info.Id);
if (ds.HaveData())
{
DataRow reader = ds.Tables[0].Rows[0];
if (reader["WinStartRun"].ToInt()==1)
{
db.ExecuteNonQuery("update Softs set WinStartRun=0 where id=" + info.Id);
}
else
{
if (System.IO.File.Exists(info.TruePath))
{
if (API.HaveRunFromRegedit(info.TruePath))
{
if (Msg.ShowMsg("该软件已添加到注册表进行开机启动,这样会导致重复启动,是否从注册表中删除。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
API.DelRunFromRegedit(info.TruePath);
}
}
}
db.ExecuteNonQuery("update Softs set WinStartRun=1 where id=" + info.Id);
}
info.WinStartRun= reader["WinStartRun"].ToInt() == 0;
ToolStripMenuItem.Checked= reader["WinStartRun"].ToInt() == 0;
}
}
db.Free();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FrmWinStartView frm = new FrmWinStartView
{
Icon = Icon
};
frm.ShowDialog();
foreach (var item in frm.RemovesList)
{
for (int i = 0; i < IconViewEx1.Items.Count; i++)
{
var info= (SoftInfo)IconViewEx1.Items[i].Tag;
if(info.Id==item)
{
info.WinStartRun = false;
}
}
}
frm.Dispose();
}
}
class SelectInfo
{

View File

@ -0,0 +1,107 @@
namespace VSoft
{
partial class FrmWinStartView
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmWinStartView));
this.IconViewEx1 = new ryControls.IconViewEx();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuStrip1.SuspendLayout();
this.SuspendLayout();
//
// IconViewEx1
//
this.IconViewEx1.AllowDrop = true;
this.IconViewEx1.BackColor = System.Drawing.Color.White;
this.IconViewEx1.BadgeListImage = ((System.Collections.Generic.List<System.Drawing.Image>)(resources.GetObject("IconViewEx1.BadgeListImage")));
this.IconViewEx1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.IconViewEx1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
this.IconViewEx1.ContextMenuStrip = this.contextMenuStrip1;
this.IconViewEx1.Dock = System.Windows.Forms.DockStyle.Fill;
this.IconViewEx1.HideSelection = false;
this.IconViewEx1.Icon = ((System.Drawing.Image)(resources.GetObject("IconViewEx1.Icon")));
this.IconViewEx1.IconSize = 64;
this.IconViewEx1.IsDrawGridLines = false;
this.IconViewEx1.IsDrawIcon = true;
this.IconViewEx1.Location = new System.Drawing.Point(1, 27);
this.IconViewEx1.MultiSelect = false;
this.IconViewEx1.Name = "IconViewEx1";
this.IconViewEx1.OwnerDraw = true;
this.IconViewEx1.SelectedBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(195)))), ((int)(((byte)(101)))));
this.IconViewEx1.SelectedEndBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(236)))), ((int)(((byte)(181)))));
this.IconViewEx1.SelectedForeColor = System.Drawing.Color.Black;
this.IconViewEx1.SelectedStartBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(251)))), ((int)(((byte)(237)))));
this.IconViewEx1.ShowGroups = false;
this.IconViewEx1.Size = new System.Drawing.Size(821, 516);
this.IconViewEx1.TabIndex = 1;
this.IconViewEx1.TextHeight = 20;
this.IconViewEx1.TileSize = new System.Drawing.Size(100, 100);
this.IconViewEx1.UseCompatibleStateImageBehavior = false;
this.IconViewEx1.View = System.Windows.Forms.View.Tile;
//
// contextMenuStrip1
//
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(181, 48);
//
// 移除开机启动ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "移除开机启动ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.ToolStripMenuItem.Text = "移除开机启动";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// FrmWinStartView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(823, 544);
this.Controls.Add(this.IconViewEx1);
this.Name = "FrmWinStartView";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "开机启动列表";
this.Load += new System.EventHandler(this.FrmWinStartView_Load);
this.contextMenuStrip1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private ryControls.IconViewEx IconViewEx1;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
}
}

View File

@ -0,0 +1,88 @@
using ryCommon;
using ryCommonDb;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VSoft.Prams;
using VSoft.Skins;
namespace VSoft
{
public partial class FrmWinStartView : SKinForm
{
public FrmWinStartView()
{
InitializeComponent();
}
private void LoadDb()
{
IconViewEx1.Items.Clear();
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
if (db.ConnDb(Itrycn_Db.SQLConnStr) == 1)
{
var sql = "select * from Softs where WinStartRun=1";
DataSet ds = db.ReadData(sql + " order by sortindex asc,AddTime desc");
IconViewEx1.BeginUpdate();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
DataRow row = ds.Tables[0].Rows[i];
SoftInfo info = new SoftInfo
{
Id = row["id"].ToInt(),
SoftType = row["SoftType"].ToInt(),
ColumnId = row["ColumnId"].ToInt(),
Name = row["Name"].ToString(),
Path = row["Path"].ToString(),
RunPram = row["RunPram"].ToString(),
SetJson = row["SetJson"].ToString(),
StartPath = row["StartPath"].ToString(),
WinStartRun = row["WinStartRun"].ToInt() == 1,
IconPath = row["IconPath"].ToString()
};
string img_path;
if (info.IconPath.Length == 0)
{
img_path = info.TruePath;
}
else
{
img_path = RyFiles.GetRealPath(info.IconPath);
}
info.Image = API.GetImg(img_path, 128);
Application.DoEvents();
IconViewEx1.Items.Add(info.Name).Tag = info;
}
IconViewEx1.EndUpdate();
db.Free();
}
db.Free();
}
private void FrmWinStartView_Load(object sender, EventArgs e)
{
LoadDb();
}
/// <summary>
/// 移除开机启动的ID列表
/// </summary>
public List<int> RemovesList = new List<int>();
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (IconViewEx1.SelectedItems.Count == 0) { return; }
var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag;
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
if (db.ConnDb(Itrycn_Db.SQLConnStr) == 1)
{
db.ExecuteNonQuery("update Softs set WinStartRun=0 where id=" + info.Id);
RemovesList.Add(info.Id);
IconViewEx1.SelectedItems[0].Remove();
}
db.Free();
}
}
}

View File

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<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="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="IconViewEx1.BadgeListImage" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAKABU3lzdGVtLkRyYXdpbmcsIFZlcnNpb249NC4wLjAuMCwgQ3Vs
dHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhXV0sIG1zY29ybGliLCBW
ZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0
ZTA4OQwDAAAAUVN5c3RlbS5EcmF3aW5nLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwg
UHVibGljS2V5VG9rZW49YjAzZjVmN2YxMWQ1MGEzYQUBAAAAN1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbU3lzdGVtLkRyYXdpbmcuSW1hZ2UDAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQA
ABZTeXN0ZW0uRHJhd2luZy5JbWFnZVtdAwAAAAgIAgAAAAkEAAAAAAAAAAAAAAAHBAAAAAABAAAAAAAA
AAQUU3lzdGVtLkRyYXdpbmcuSW1hZ2UDAAAACw==
</value>
</data>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="IconViewEx1.Icon" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -24,21 +24,27 @@ namespace VSoft.Prams
}
public static Image GetImg(string url,int maxSize)
{
var ext = System.IO.Path.GetExtension(url).ToLower();
var iPos = url.LastIndexOf(".");
var ext = iPos>=0?url.Substring(iPos).ToLower():"";
var _url = url;
if(_url.IndexOfEx("<")>=0)
{
_url =RyFiles.GetRealPath(_url);
}
var img_ext = ";.jpg;.png;.bmp;.gif;.jpeg;.jfif;.jpe;.tif;.ico;";
if (img_ext.IndexOfEx(";" + ext + ";") >= 0)
{
return RyFiles.LoadPicFromFile(url);
return RyImage.LoadPic(_url);
}
else
{
var exe_ext = ";.exe;.dll;";
if (exe_ext.IndexOfEx(";" + ext + ";") >= 0)
{
var img= RyFiles.GetFileIcon(url, 0, out _, maxSize);
var img= RyFiles.GetFileIcon(_url, 0, out _, maxSize);
if (img == null)
{
var icon = ShellIcon.GetLargeIcon(url);
var icon = ShellIcon.GetLargeIcon(_url);
return icon;
}
return img;
@ -46,7 +52,7 @@ namespace VSoft.Prams
//FileIcon ico = new FileIcon(url);
//ico.GetInfo();
//var icon2 = ico.ShellIcon;
var icon2 = ShellIcon.GetLargeIcon(url);
var icon2 = ShellIcon.GetLargeIcon(_url);
return icon2;
}
}
@ -90,5 +96,71 @@ namespace VSoft.Prams
Description = shortcut.Description
};
}
/// <summary>
/// 该路径在注册表里是否存在启动项
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static bool HaveRunFromRegedit(string filePath)
{
return CheckRootPath(RegistryHive.LocalMachine, @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run")
|| CheckRootPath(RegistryHive.LocalMachine, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
|| CheckRootPath(RegistryHive.CurrentUser, @"Software\Microsoft\Windows\CurrentVersion\Run");
bool CheckRootPath(RegistryHive RegRoot,string RegPath)
{
try
{
RegistryKey LMach = RegistryKey.OpenBaseKey(RegRoot, RegistryView.Registry64);
RegistryKey softwareRun = LMach.OpenSubKey(RegPath, true);
var names= softwareRun.GetValueNames();
foreach (var name in names)
{
var value = softwareRun.GetValue(name).ToString();
if (value.IndexOfEx(filePath).IsInRange(0,2))
{
return true;
}
}
}
catch (Exception)
{
}
return false;
}
}
public static bool DelRunFromRegedit(string filePath)
{
var del1 = DelPath(RegistryHive.LocalMachine, @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run");
var del2 = DelPath(RegistryHive.LocalMachine, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
var del3= DelPath(RegistryHive.CurrentUser, @"Software\Microsoft\Windows\CurrentVersion\Run");
return del1 || del2 || del3;
bool DelPath(RegistryHive RegRoot, string RegPath)
{
var isdel = false;
try
{
RegistryKey LMach = RegistryKey.OpenBaseKey(RegRoot, RegistryView.Registry64);
RegistryKey softwareRun = LMach.OpenSubKey(RegPath, true);
var names = softwareRun.GetValueNames();
foreach (var name in names)
{
var value = softwareRun.GetValue(name).ToString();
if (value.IndexOfEx(filePath).IsInRange(0, 2))
{
isdel = true;
softwareRun.DeleteValue(name);
}
}
}
catch (Exception)
{
}
return isdel;
}
}
}
}

View File

@ -21,14 +21,11 @@ namespace VSoft.Prams
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_MOUSEMOVE)
if (TheMouseMoved != null)
TheMouseMoved();
TheMouseMoved?.Invoke();
if (m.Msg == WM_MBUTTONDOWN)
if (TheMouseMDown != null)
TheMouseMDown();
TheMouseMDown?.Invoke();
if (m.Msg == WM_MBUTTONUP)
if (TheMouseMUp != null)
TheMouseMUp();
TheMouseMUp?.Invoke();
// Always allow message to continue to the next filter control
return false;
}

View File

@ -17,10 +17,10 @@ namespace VSoft.Prams
}
[StructLayout(LayoutKind.Sequential)]
private struct POINT
private readonly struct POINT
{
int x;
int y;
readonly int x;
readonly int y;
}
[StructLayout(LayoutKind.Sequential)]

View File

@ -168,6 +168,7 @@ namespace VSoft.Prams
mySQL.AddField("Hotkey", "");//快捷键
mySQL.AddField("PinYin", "");//拼音
mySQL.AddField("ColumnId", 0);//栏目ID
mySQL.AddField("WinStartRun", 0);//是否开机运行
mySQL.AddField("sortindex", 0);
mySQL.AddField("editTime", DateTime.Now);
mySQL.AddField("addTime", DateTime.Now);
@ -214,7 +215,6 @@ namespace VSoft.Prams
}
public static void CreateTable_Logs(DataProvider.DataProviderType dataType)
{
DataProvider mydb = new DataProvider();
IDbInterface db = CreateDataProvider(dataType);
if (db.ConnDb(SQLConnStr_Logs) == 1)
{

View File

@ -68,6 +68,7 @@ namespace VSoft.Prams
}
db.Free();
}
db.Free();
#endregion
}
if (StartPath.Length == 0)
@ -125,6 +126,12 @@ namespace VSoft.Prams
}
else
{
if (parm.StartsWith("show=") && path==Application.StartupPath+ "\\DyLine.exe")
{
DyLine.ClsMsg ryMsg = new DyLine.ClsMsg();
ryMsg.SendMsgToryProcess(0, parm);//向流程软件发送连接信息
continue;
}
if (RyFiles.RunFile(path, parm, StartPath, json.GetJsonValue("RunMode", 0)) < 36)
{
run_result = -1; break;
@ -146,12 +153,14 @@ namespace VSoft.Prams
{
try
{
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = CurrentDirectory;
startInfo.FileName = exeName;
startInfo.Verb = "runas";
switch(RunMode)
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo
{
UseShellExecute = true,
WorkingDirectory = CurrentDirectory,
FileName = exeName,
Verb = "runas"
};
switch (RunMode)
{
case 0:
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;

View File

@ -113,7 +113,7 @@ namespace VSoft.Prams
/// <returns></returns>
public static Bitmap GetLargeIcon(string fileName)
{
var icon = c_icon_of_path.icon_of_path_large(fileName, true, true);
var icon = C_icon_of_path.icon_of_path_large(fileName, true, true);
if (icon == null) { return null; }
return icon.ToBitmap();
//SHFILEINFO shinfo = new SHFILEINFO();

View File

@ -71,6 +71,10 @@ namespace VSoft.Prams
/// </summary>
public string Des { get; set; } = "";
/// <summary>
/// 是否开机运行
/// </summary>
public bool WinStartRun { get; set; } = false;
/// <summary>
/// 文件图标
/// </summary>
public Image Image { get; set; } = null;

View File

@ -6,10 +6,11 @@ using System.Runtime.InteropServices;
using System.Windows;
using System.Diagnostics;
using System.Drawing;
#pragma warning disable CS0649 // 不需要赋值
#pragma warning disable IDE1006 // 不需要赋值
namespace VSoft.Prams
{
public static class c_icon_of_path
public static class C_icon_of_path
{
private struct RECT
{
@ -407,9 +408,8 @@ namespace VSoft.Prams
// Get the System IImageList object from the Shell:
Guid iidImageList = new Guid("46EB5926-582E-4017-9FDF-E8998DAA0950");
IImageList iml;
int size = jumbo ? SHIL_JUMBO : SHIL_EXTRALARGE;
var hres = SHGetImageList(size, ref iidImageList, out iml); // writes iml
SHGetImageList(size, ref iidImageList, out IImageList iml); // writes iml
//if (hres == 0)
//{
// throw (new System.Exception("Error SHGetImageList"));
@ -417,7 +417,7 @@ namespace VSoft.Prams
IntPtr hIcon = IntPtr.Zero;
int ILD_TRANSPARENT = 1;
hres = iml.GetIcon(iconIndex, ILD_TRANSPARENT, ref hIcon);
iml.GetIcon(iconIndex, ILD_TRANSPARENT, ref hIcon);
//if (hres == 0)
//{
// throw (new System.Exception("Error iml.GetIcon"));

View File

@ -0,0 +1,111 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace DyLine
{
public class ClsMsg
{
[DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]
private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);
[DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]
private static extern IntPtr GetParent(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);
[DllImport("user32.dll", EntryPoint = "IsWindow")]
private static extern bool IsWindow(IntPtr hWnd);
private const int WM_COPYDATA = 0x004A;
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cData;
[MarshalAs(UnmanagedType.LPWStr)]
public string lpData;
}
[DllImport("User32.dll", CharSet = CharSet.Unicode, EntryPoint = "SendMessage")]
private static extern int SendMessage(int hwnd, int msg, int wParam, ref COPYDATASTRUCT IParam);
private delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);
public void SendMsg(int handle, int wParam, string str)
{
byte[] arr = System.Text.Encoding.Unicode.GetBytes(str);
int len = arr.Length;
COPYDATASTRUCT cdata;
cdata.dwData = (IntPtr)100;
cdata.lpData = str;
cdata.cData = (len + 1)*2;
SendMessage(handle, WM_COPYDATA, wParam, ref cdata);
}
readonly string msgText = "";
readonly int _wParam = 0;
//public void SendMsgToryProcess(int wParam,string str)
//{
// IntPtr ptrWnd = IntPtr.Zero;
// Process[] items = Process.GetProcessesByName("ryProcessManager");
// msgText = str;
// _wParam = wParam;
// for (int i = 0; i < items.Length; i++)
// {
// uint uiPid = (uint)items[i].Id; // 进程 ID
// bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid);
// }
//}
public void SendMsgToryProcess(int wParam, string str)
{
for (int i = 1; i < 5; i++)
{
object mainHandle =QuickMsg.RyMemoryShare.ReadFromMemory(1024, typeof(int), "ryProcessManager" + i.ToString());
if (mainHandle != null)
{
SendMsg((int)mainHandle, wParam, str);
break;
}
}
}
public void SendMsgToryProcess(int wParam, string MemoryId, string str)
{
if (MemoryId == null || MemoryId.Length == 0)
{
SendMsgToryProcess(wParam, str);
}
else
{
object mainHandle = QuickMsg.RyMemoryShare.ReadFromMemory(1024, typeof(int), MemoryId);
if (mainHandle != null)
{
SendMsg((int)mainHandle, wParam, str);
}
}
}
public static string GetMsg(Message m)
{
COPYDATASTRUCT cdata = new COPYDATASTRUCT();
Type mytype = cdata.GetType();
cdata = (COPYDATASTRUCT)m.GetLParam(mytype);
return cdata.lpData;
}
private bool EnumWindowsProc(IntPtr hwnd, uint lParam)
{
uint uiPid = 0;
if (GetParent(hwnd) == IntPtr.Zero)
{
GetWindowThreadProcessId(hwnd, ref uiPid);
if (uiPid == lParam) // 找到进程对应的主窗口句柄
{
SendMsg(hwnd.ToInt32(), _wParam, msgText);
//return false; // 返回 false 以终止枚举窗口
}
}
return true;
}
}
}

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.2412.1701")]
[assembly: AssemblyFileVersion("2.0.2412.1701")]
[assembly: AssemblyVersion("2.0.2509.1101")]
[assembly: AssemblyFileVersion("2.0.2509.1101")]

View File

@ -1,8 +1,10 @@
using Newtonsoft.Json.Bson;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.Serialization;
using System.Windows.Forms;
namespace ryControls
@ -59,56 +61,56 @@ namespace ryControls
}
}
}
private List<TabItem> _Tabs { get; set; } = new List<TabItem>();
public List<TabItem> Tabs {
get
{
return _Tabs;
}
set
{
_Tabs = value;
DrawTabs(false);
}
}
private int TabStartIndex { get; set; } = 0;
private void DrawTabs(bool clearList=true)
{
var selected_index = this.SelectedItems.Count == 0 ? -1 : this.SelectedItems[0].Index;
if (clearList)
{
this.Items.Clear();
for (int i = TabStartIndex; i < Tabs.Count; i++)
{
this.Items.Add(Tabs[i].Text).Tag = Tabs[i];
}
}
else
{
for (int i = 0; i < this.Items.Count; i++)
{
var tab_index = TabStartIndex + i;
if (tab_index < Tabs.Count)
{
this.Items[i].Text = Tabs[tab_index].Text;
this.Items[i].Tag = Tabs[tab_index];
}
else
{
//private List<TabItem> _Tabs { get; set; } = new List<TabItem>();
//public List<TabItem> Tabs {
// get
// {
// return _Tabs;
// }
// set
// {
// _Tabs = value;
// DrawTabs(false);
// }
//}
//private int TabStartIndex { get; set; } = 0;
//private void DrawTabs(bool clearList=true)
//{
// var selected_index = this.SelectedItems.Count == 0 ? -1 : this.SelectedItems[0].Index;
// if (clearList)
// {
// this.Items.Clear();
// for (int i = TabStartIndex; i < Tabs.Count; i++)
// {
// this.Items.Add(Tabs[i].Text).Tag = Tabs[i];
// }
// }
// else
// {
// for (int i = 0; i < this.Items.Count; i++)
// {
// var tab_index = TabStartIndex + i;
// if (tab_index < Tabs.Count)
// {
// this.Items[i].Text = Tabs[tab_index].Text;
// this.Items[i].Tag = Tabs[tab_index];
// }
// else
// {
for (int m = this.Items.Count-1; m >=i; m--)
{
this.Items.RemoveAt(m);
}
break;
}
}
}
if(selected_index>=0 && this.Items.Count< selected_index)
{
this.Items[selected_index].Selected = true;
}
}
// for (int m = this.Items.Count-1; m >=i; m--)
// {
// this.Items.RemoveAt(m);
// }
// break;
// }
// }
// }
// if(selected_index>=0 && this.Items.Count< selected_index)
// {
// this.Items[selected_index].Selected = true;
// }
//}
protected override void OnItemSelectionChanged(ListViewItemSelectionChangedEventArgs e)
{
if(e.IsSelected)
@ -317,6 +319,7 @@ namespace ryControls
return flags;
}
}
[Serializable]
public class TabItem
{
/// <summary>

View File

@ -100,6 +100,13 @@
<DependentUpon>FrmVSoft.cs</DependentUpon>
</Compile>
<Compile Include="Config\Soft_Info.cs" />
<Compile Include="FrmWinStartView.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmWinStartView.Designer.cs">
<DependentUpon>FrmWinStartView.cs</DependentUpon>
</Compile>
<Compile Include="Prams\clsMsg.cs" />
<Compile Include="Prams\c_icon_of_path.cs" />
<Compile Include="Prams\GlobalMouseHandler.cs" />
<Compile Include="Prams\Json.cs" />
@ -165,6 +172,9 @@
<EmbeddedResource Include="FrmVSoft.resx">
<DependentUpon>FrmVSoft.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmWinStartView.resx">
<DependentUpon>FrmWinStartView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Skins\FrmMessageBox.resx">
<DependentUpon>FrmMessageBox.cs</DependentUpon>
</EmbeddedResource>