|
|
|
Process.Start() อยากรันโปรแกรมในโหมดเงียบ หรือไม่โชว์อะไรขึ้นมาเลยครับ |
|
|
|
|
|
|
|
สามารถเขียน ให้มันแสดงผลบน panel ได้ แต่เราซ่อน panel ไว้
https://stackoverflow.com/questions/758494/how-can-i-run-another-application-within-a-panel-of-my-c-sharp-program
หรือ เปลี่ยนไปใช้ browser object แทนก็ได้ครับ กำหนดให้มัน execute โดยไม่ต้อง show
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.webbrowser?view=netframework-4.7.2
|
|
|
|
|
Date :
2019-01-09 15:10:18 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โค้ดประมาณนี้ครับ
Code (C#)
void ExecuteApplication(string Address, string arguments, bool showWindow = true)
{
Process proc = new Process();
proc.StartInfo.FileName = Address;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.CreateNoWindow = showWindow;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.UseShellExecute = false;
return proc.Start();
}
void LoadCodeProject(object obj)
{
string cri = (string)((object[])obj)[0];
// MessageBox.Show(cri);
int i = 1;
this.Invoke(new Action(() => this.Text = cri));
System.Text.RegularExpressions.MatchCollection _Matches = null;
do
{
string url_1 = "https://www.codeproject.com/search.aspx?q=" + cri + "&doctypeid=1%3b2%3b3%3b13%3b14&pgnum=" + i;
string html_1 = Program.getHTML(url_1);
_Matches = new System.Text.RegularExpressions.Regex(@"<span class=""title""><a href=""//(www.codeproject.com/Articles/.*?)"" id="".*?"" rel=""nofollow"">.*?</a></span>", System.Text.RegularExpressions.RegexOptions.None).Matches(html_1);
foreach (System.Text.RegularExpressions.Match myMatch in _Matches)
{
string s = Program.getHTML("https://" + myMatch.Groups[1].Value);
new System.Threading.Thread(() =>
{
foreach (System.Text.RegularExpressions.Match myMatch_1 in
new System.Text.RegularExpressions.Regex(@"<li><a href=""(/.*?\.[zipar]{3,})"">.*?</a>", System.Text.RegularExpressions.RegexOptions.None).Matches(s))
{
string url = "https://www.codeproject.com/script/Articles/Download.aspx?file=" + myMatch_1.Groups[1].Value + "&rp=https://www.codeproject.com/";
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, false);
System.Threading.Thread.Sleep(100);
}
System.Threading.Thread.Sleep(100);
}).Start();
}
new System.Threading.Thread(() =>
{
System.IO.Directory.GetFiles(path, "*.zip", System.IO.SearchOption.TopDirectoryOnly).ToList<string>()
.ForEach(f =>
{
try { System.IO.File.Move(f, Program.RenameFileDup(path_b + @"\" + System.IO.Path.GetFileName(f))); }
catch { }
});
}).Start();
i++;
} while (_Matches.Count > 0);
this.Invoke(new Action(() => { this.Text = cri + " Complete... "; }));
}
เป็นการ forloop เพื่อ รัน chrome ขึ้นมา แต่ติดแค่ว่า เมื่อใช้ Start ตัว chrome มันก็จะ Active มาด้วยซึ่งทำให้ทำงานอย่างอื่นไม่ได้ครับ
มีวิธีให้มันรันเงียบๆ หรือ ส่ง link ให้มันโหลด ผ่าน command line ก้ได้ครับ
ตัว link จะมีการเข้ารหัส user ก่อน ซึ่งจะส่งไปให้ IDM หรือ โปรแกรมดาวโหลดเลยไม่ได้ครับ
ต้องผ่าน browser ที่ มีการ login ในเว็บก่อน ส่วนที่ใช้ chrome เพราะ มัน โหลดโดยไม่เพิ่ม tab เหมือน browser ตัวอื่นๆ ครับ
|
|
|
|
|
Date :
2019-01-09 16:06:03 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, true);
จากที่ลองดูก็ใช้ได้ แต่แปลกที่ว่า มันมีเด้งมาบ้าง ไม่เด้งบ้าง
ไม่แน่ใจว่าเกิดจากสาเหตุอะไรเหมือนกันครับ
|
|
|
|
|
Date :
2019-01-09 17:48:09 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตัวอย่างผลลัพธ์การใช้ Switch ร่วมกับ ProcessStartInfo เพื่อโหลด DOM จาก Chrome แบบ Silent
ดาวน์โหลด
ปล.แก้ปัญหาการหาไฟล์ไม่เจอเมื่อใช้ UseShellExecute ได้แล้ว โดย ต้องกำหนดพาธแบบเต็มเท่านั้น
|
ประวัติการแก้ไข 2019-01-10 18:07:33
|
|
|
|
Date :
2019-01-10 18:05:14 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UseShellExecute
ผมใช้ 4.0 ก็มีให้เลยนะครับ
ผมลองลดเป็น 2.0 ก็ไม่มี Error แสดงว่า ตัวนี้ มีมานานแล้วครับ
Code (C#)
public static bool ExecuteApplication(string Address, string arguments, bool showWindow = true)
{
Process proc = new Process();
proc.StartInfo.FileName = Address;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.CreateNoWindow = showWindow;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.UseShellExecute = false;
return proc.Start();
}
ส่วนโค้ดในการโหลด
ผมได้ลองใช้
Code (C#)
Program.ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe"," --headless " + url, true);
ปรากฎว่าเงียบกริบเลยครับ chrome ก็ไม่ขึ้น แถมไม่มีการโหลดไฟล์ แต่ รู้สึกได้ว่า chrome มีการทำงาน เพราะคอมหน่วงๆ ครับ
|
|
|
|
|
Date :
2019-01-10 19:19:07 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โค้ดล่าสุดในการโหลด ครับ
Code (C#)
private void Form1_Load(object sender, EventArgs e)
{
new System.Threading.Thread(LoadCodeProject).Start();
}
bool ExecuteApplication(string Address, string arguments, bool showWindow = true)
{
Process proc = new Process();
proc.StartInfo.FileName = Address;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.CreateNoWindow = showWindow;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.UseShellExecute = false;
return proc.Start();
}
void LoadCodeProject()
{
string path = @"E:\codeproject";
new List<string>() { "datagridview" }
.ForEach(cri =>
{
string path_code = path + "\\" + cri;
System.IO.Directory.CreateDirectory(path_code);
// int i = 1;
System.Text.RegularExpressions.MatchCollection _Matches = null;
for (int i = 1; i < 200; i++)
{
this.Invoke(new Action(() => this.Text = cri + " page " + i));
string url_1 = "https://www.codeproject.com/search.aspx?q=" + cri + "&doctypeid=1%3b2%3b3%3b13%3b14&pgnum=" + i;
string html_1 = Program.getHTML(url_1);
_Matches = new System.Text.RegularExpressions.Regex(@"<span class=""title""><a href=""//(www.codeproject.com/Articles/.*?)"" id="".*?"" rel=""nofollow"">.*?</a></span>", System.Text.RegularExpressions.RegexOptions.None).Matches(html_1);
foreach (System.Text.RegularExpressions.Match myMatch in _Matches)
{
string s = Program.getHTML("https://" + myMatch.Groups[1].Value);
new System.Threading.Thread(() =>
{
foreach (System.Text.RegularExpressions.Match myMatch_1 in
new System.Text.RegularExpressions.Regex(@"<li><a href=""(/.*?\.[zipar]{3,})"">.*?</a>", System.Text.RegularExpressions.RegexOptions.None).Matches(s))
{
string url = "https://www.codeproject.com/script/Articles/Download.aspx?file=" + myMatch_1.Groups[1].Value + "&rp=https://www.codeproject.com/";
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe"," --headless " + url, true);
//ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, true);
System.Threading.Thread.Sleep(100);
}
System.Threading.Thread.Sleep(100);
}).Start();
}
new System.Threading.Thread(() =>
{
System.IO.Directory.GetFiles(path, "*.zip", System.IO.SearchOption.TopDirectoryOnly).ToList<string>()
.ForEach(f =>
{
try { System.IO.File.Move(f, Program.RenameFileDup(path_code + @"\" + System.IO.Path.GetFileName(f))); }
catch { }
});
}).Start();
// i++;
System.Threading.Thread.Sleep(1000);
}
});
this.Invoke(new Action(() => this.Text = " Complete... "));
}
|
|
|
|
|
Date :
2019-01-10 19:22:01 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สอบถามครับ
ส่วนใหญ่โปรแกรมเมอร์ที่ทำหน้าที่ test code ต้องทำอะไรบ้างครับ เมื่อ เราได้โค้ดมา
|
|
|
|
|
Date :
2019-01-11 08:36:38 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|