كتبت هذا الكود لبرنامج anti-virus ليجلب الملفات الشغالة وملفات بدء التشغيل ولكن هناك مشكلة
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Diagnostics;
using System.IO;
using Microsoft.Win32;
namespace myProcess
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Button button1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (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.listBox1 = new System.Windows.Forms.ListBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.listBox1.Location = new System.Drawing.Point(0, 35);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(536, 459);
this.listBox1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(464, 8);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(64, 24);
this.button1.TabIndex = 1;
this.button1.Text = "Fill";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(536, 494);
this.Controls.Add(this.button1);
this.Controls.Add(this.listBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
listBox1.Items.Clear();
foreach(Process a in Process.GetProcesses())
{
try
{
if (File.Exists(a.MainModule.FileName))
listBox1.Items.Add(a.MainModule.FileName);
}
catch{}
}
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
string[] val = rk.GetValueNames();
string[] file = new string[val.Length];
for (int i = 0; i < val.Length; i++)
{
file = (string)rk.GetValue(val);
}
foreach(string g in file)
{
string r = get_file(g);
if (r != "")
listBox1.Items.Add(r);
}
rk.Close();
rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
string[] val1 = rk.GetValueNames();
string[] file1 = new string[val1.Length];
for (int i = 0; i < val1.Length; i++)
{
file1 = (string)rk.GetValue(val1);
}
foreach(string g in file1)
{
string r = get_file(g);
if (r != "")
listBox1.Items.Add(r);
}
rk.Close();
this.Cursor = Cursors.Default;
}
private string get_file(string file)
{
if (file[0] == '"')
{
file = file.Substring(1);
int pos = file.IndexOf('"');
file = file.Substring(0, pos );
return (File.Exists(file)? file: "");
}
else if (!File.Exists(file))
{
int pos = file.Length-1;
while (!File.Exists(file) && (pos > 0))
{
pos = file.LastIndexOf(' ', pos) - 1;
file = file.Substring(0, (pos > 0)? pos + 1 : 0);
}
return file;
}
else
return file;
}
}
}والمشكله هي وجود ملفات مسجلة مع معاملاتها (كيف أطور الكود أكثر ليمكنه)
معرفة الملفات التي تكتب بدون مسار
مثل
rundll.exe -bluetooth
وهناك العديد من المشاكل إذا أردتم حلها
مثل كيفية قراءة إختصارات0 windows ذات الإمتداد lnk لإيجاد الملف المشار إلية
وشكراً