因為公司程式,還需要用IE開啟
故將之前VBS寫的set IE = CreateObject("InternetExplorer.Application")
改用C#寫, 並編譯成EXE,
讓公司程式可以傳URL呼叫, 以便開啟特殊URL
且 是免安裝的綠色程式
將EXE檔COPY到任何WIN OS 上都可以馬上用
找到最大化方法了
用 GetSystemMetrics
並將程式簡潔化, 少了很多行
不囉嗦! 上SOURCE CODE
using System;
using System.Reflection;
using System.Runtime.InteropServices;
namespace IE.NET
{
internal class Program
{
//呼叫 WIN 元件取得螢幕大小
[DllImport("user32.dll")]
public static extern int GetSystemMetrics(int screensize);
const int SM_CXSCREEN = 0;
const int SM_CYSCREEN = 1;
//主程式
static void Main(string[] args)
{
//首頁
string StartURL = "http://IP/XXXX.asp";
//讓第三方傳參數呼叫, 帶入所需開啟的URL
if (args.Length > 0)
{
StartURL = args[0];
//如果URL很長要組合起來
if (args.Length > 1)
{
for (int i = 1; i < args.Length; i++)
{
StartURL = StartURL + "%20" + args[i];
}
}
}
//使用 GetSystemMetrics 取得螢幕大小
double wWidth = GetSystemMetrics(SM_CXSCREEN);
double wHeight = GetSystemMetrics(SM_CYSCREEN);
// 使用 GetTypeFromProgID 呼叫IE
var MemberAccess = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.IgnoreCase;
var type = Type.GetTypeFromProgID("InternetExplorer.Application");
var ie = Activator.CreateInstance(type);
//設定IE視窗全螢幕
ie.GetType().InvokeMember("Visible", MemberAccess | BindingFlags.SetProperty, null, ie, new object[1] { true });
ie.GetType().InvokeMember("Top", MemberAccess | BindingFlags.SetProperty, null, ie, new object[1] { 0 });
ie.GetType().InvokeMember("Left", MemberAccess | BindingFlags.SetProperty, null, ie, new object[1] { 0 });
ie.GetType().InvokeMember("Height", MemberAccess | BindingFlags.SetProperty, null, ie, new object[1] { wHeight });
ie.GetType().InvokeMember("Width", MemberAccess | BindingFlags.SetProperty, null, ie, new object[1] { wWidth });
ie.GetType().InvokeMember("Navigate", MemberAccess | BindingFlags.InvokeMethod, null, ie, new object[] { StartURL });
}
}
}
感謝多位邦友幫幫忙!
提供很多方向!
謝謝!
參考:
https://welkingunther.pixnet.net/blog/post/26821658
https://blog.darkthread.net/blog/run-iexplore-in-win11/
ShellExecute(Handle, 'open', 'Excel', PChar(s), nil, SW_SHOWMAXIMIZED);
ShellExecute(Handle, 'open', 'Excel', PChar(s), nil, SW_MAXIMIZE);
Google 到的看看合不合用AcadApp.GetType().InvokeMember("WindowState", BindingFlags.SetProperty, Nothing, AcadApp, New Object() {1}, Nothing)
資料來源
幫你問問ChatGPT大神,他回答如下,希望可以幫到你。
您可以使用 C# 的 Process.Start 方法啟動 Internet Explorer,並使用 Process 類的其他成員控制 Internet Explorer 視窗的大小和位置。
以下是一個示例代碼,可在 C# 中啟動 Internet Explorer,將其最大化,並將其移動到屏幕左上角:
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
Process process = Process.Start(startInfo);
process.WaitForInputIdle();
IntPtr handle = process.MainWindowHandle;
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
}
const int SWP_NOSIZE = 0x0001;
const int SWP_NOZORDER = 0x0004;
const int SWP_SHOWWINDOW = 0x0040;
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
}
這段代碼使用 ProcessStartInfo 來指定要啟動的應用程序和窗口樣式。在這種情況下,我們將 WindowStyle 屬性設置為 ProcessWindowStyle.Maximized,這將使 Internet Explorer 在啟動時最大化。
接下來,使用 Process.Start 方法來啟動 Internet Explorer 進程。使用 process.WaitForInputIdle 方法等待進程變得可交互,這樣我們才能夠操縱它的窗口。
使用 process.MainWindowHandle 屬性獲取 Internet Explorer 窗口的句柄,然後使用 SetWindowPos 函數來將其移動到屏幕左上角,同時保持其大小不變。
感謝邦忙
但呼叫"iexplore.exe"
開啟的是EDGE啊!
不行喔!
謝謝!
ChatGPT表示:
確實,在 Windows 10/11 上,預設情況下使用 iexplore.exe 啟動的是 Microsoft Edge 瀏覽器,而不是 Internet Explorer。如果您需要啟動 Internet Explorer,您需要使用 Internet Explorer 的可執行文件 iexplore.exe 的完整路徑,而不是僅僅使用應用程式名稱。
通常情況下,Internet Explorer 的可執行文件位於 C:\Program Files\Internet Explorer 目錄下。因此,您可以將示例代碼中的 iexplore.exe 修改為 C:\Program Files\Internet Explorer\iexplore.exe 來啟動 Internet Explorer。
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
Process process = Process.Start(startInfo);
process.WaitForInputIdle();
IntPtr handle = process.MainWindowHandle;
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
}
const int SWP_NOSIZE = 0x0001;
const int SWP_NOZORDER = 0x0004;
const int SWP_SHOWWINDOW = 0x0040;
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
}
請注意,如果您的系統上的 Internet Explorer 安裝路徑與上述路徑不同,請相應地修改代碼中的路徑,希望這對您有所幫助。
感謝邦忙
但還是開啟EDGE啊!
不行喔!
謝謝!
我已找到方法了
還是用老方法(呼叫WIN OS元件 user32.dll)!