我想在我的Web应用程序中创建一代不可见的浏览器窗口。 我知道要在不可见的窗口中打开一个新的Internet Explorer实例,我们可以使用PowerShell执行以下命令:
public void MakeReport(int jobId, int jobType)
{
var intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(AppBundle);
if (intent is null)
throw new NullReferenceException();
// Set Data
intent.PutExtra(UsernameMessage, javaUsername);
intent.PutExtra(PasswordMessage, javaPassword);
intent.PutExtra(JobIdMessage, jobId);
intent.PutExtra(JobTypeMessage, jobType);
// Test All OK
string usernameTest = intent.GetStringExtra("USER_NAME_FROM_MDO_SCHEDULE");
string passwordTest = intent.GetStringExtra("USER_PASSWORD_FROM_MDO_SCHEDULE");
int jobIdTest = intent.GetIntExtra("JOB_ID_FROM_MDO_SCHEDULE", -1);
int jobTypeTest = intent.GetIntExtra("JOB_TYPE_FROM_MDO_SCHEDULE", 0);
Forms.Context.StartActivity(intent);
}
#endregion
如何在我的应用程序中使用此脚本? 我正在使用C#和javascript编写应用程序。如何在C#中实现上述脚本? 你能帮我解决这个问题吗?提前谢谢你。
答案 0 :(得分:0)
您应该按照以下方式进行:
$iexplorer = new-object -com "InternetExplorer.Application"
$iexplorer.navigate("https://www.microsoft.com")
默认情况下,它会创建不可见的窗口。
如果需要使其可见,请更改布尔值:
$iexplorer.visible = $true
要让它再次隐身,只需执行以下操作:
$iexplorer.visible = $false
编辑 C#隐形启动 - 我很确定你会在SO上找到它 以下代码应该足够了:
ProcessStartInfo ieProcess = new ProcessStartInfo();
ieProcess.FileName = "iexplore.exe";
ieProcess.Arguments = "https://www.microsoft.com";
ieProcess.CreateNoWindow = true;
ieProcess.WindowStyle = ProcessWindowStyle.Hidden;
ieProcess.ErrorDialog = false;
Process.Start(ieProcess);
编辑2 找到另一种隐藏窗口的方法(如果上面的方法不起作用 在MSDN上,我找到了ShowWindow函数。我现在没有办法尝试,但你可以通过以下方式实现:
您需要ShowWindow
& FindWindow
在ShowWindows
函数中,tehre是两个对您的用例有效的值。
定义:
BOOL WINAPI ShowWindow(
_In_ HWND hWnd,
_In_ int nCmdShow
);
HWND - 窗口的句柄。
mCmdShow(int):
SW_HIDE 0隐藏窗口并激活另一个窗口。 SW_SHOW 5激活窗口并以当前大小和位置显示它。
FindWindow
:
HWND WINAPI FindWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName
);
参数
lpClassName [in,optional]
类型:LPCTSTR
由前一次调用RegisterClass或RegisterClassEx函数创建的类名或类原子。原子必须在 lpClassName的低位字;高阶词必须为零。
如果lpClassName指向一个字符串,它指定窗口类名。类名可以是RegisterClass或注册的任何名称 RegisterClassEx,或任何预定义的控件类名称。
如果lpClassName为NULL,则会找到标题与之匹配的任何窗口 lpWindowName参数。
lpWindowName [in,optional]
类型:LPCTSTR
窗口名称(窗口标题)。如果此参数为NULL,则所有窗口名称都匹配。
这可能是你能得到的最低价。 (源代码受technet solution启发) 使用系统; 使用System.Diagnostics; 使用System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
// meaning defined above
const int SW_HIDE = 0;
const int SW_SHOW = 5;
static void Main()
{
Process ieProcess= new Process();
ieProcess.StartInfo.FileName = "iexplore.exe";
ieProcess.StartInfo.Arguments = "https://www.microsoft.com";
ieProcess.StartInfo.UseShellExecute = false;
ieProcess.StartInfo.CreateNoWindow = true;
ieProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
ieProcess.StartInfo.LoadUserProfile = true;
ieProcess.Start();
//IntPtr hWnd = FindWindow(windowName, null);
IntPtr hWnd = FindWindow("Internet Explorer", null)
if (hWnd != IntPtr.Zero)
{
ShowWindow(hWnd, SW_HIDE); // Hide console window
ieProcess.WaitForExit(); // Tells you if the stdout or stderro should be synchronous or asynchronous
}
}
}