0

I'm writing a web testing framework for windows that uses multiple browsers to test web apps. I want to launch the browsers hidden but it's not working.

I'm using CreateProcess to start the browsers with the SW_HIDE flag

STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
CreateProcess(NULL, const_cast<char*> (cmd.c_str()) , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

It works fine for internet explorer and other apps, but fails with firefox and other browsers. I'm aware that a process is able to choose whether or not to follow the passed flags. Is there any way i can force it to start hidden?

I can probably wait until the window shows up and then hide it by getting a handle to the open window. But I'm looking for cleaner solution.

4

5 に答える 5

1

問題は、関数がコマンドで呼び出されたwShowWindow場合にのみ、の値が使用されることです。さらに、FastAlによると、ブラウザーは追加のタスクを実行するための追加のプロセスを作成します。 あなたのアイデアとFastAlの答えに基づいて、これを実行して、作成したプロセスによって作成されたウィンドウを非表示にすることができます。1.-:、、、および;を使用 してプロセスのリストを作成します。作成したプロセスによって作成されたプロセスのみを取得します。これは、この関数の使用方法のデモです。これは、WindowsNTを除くすべてのWindowsバージョンで機能します。 2.-画面上のウィンドウを列挙するために使用しますShowWindowSW_SHOWDEFAULT

CreateToolhelp32SnapshotProcess32FirstProcess32NextCloseHandle
EnumWindowsGetWindowThreadProcessId前の手順で回復したプロセスのいずれかによってウィンドウが作成されたかどうかを確認します。
3.-ウィンドウがステップ1で定義されたプロセスの1つによって作成された場合。ShowWindow関数を使用してウィンドウを非表示にします。
自分で作成したプロセスを監視し、新しいプロセス/ウィンドウが作成されているかどうかを確認できます。

于 2010-12-22T21:18:35.750 に答える
0

サービスからプロセスを起動できます(たとえば、NETWORK SERVICEユーザーとして実行されます)。これにより、UIが表示されなくなります。ただし、後で見たい場合でも、UIをまったく見ることができなくなります。

もう1つのオプションは、ウィンドウステーションとデスクトップで何かを行うことです。MSDNのウィンドウステーションとデスクトップに関するセクションを参照してください。CreateDesktopを使用してから、このデスクトップをCreateProcessに指定されたSTARTUPINFO構造体のlpDesktopパラメーターとして指定することをお勧めします。後でUIを表示する場合は、SwitchDesktopを使用します。

于 2010-12-20T11:15:19.733 に答える
0

si.wShowWindow=0を試してください。面白いことに、これは私にとってはうまくいきましたが、同じ値を持つはずのSW_HIDEではありませんでした。

于 2010-12-22T01:25:44.387 に答える
0

アプリケーションを起動してから、WM_SIZEメッセージをメインウィンドウに送信できます。

http://msdn.microsoft.com/en-us/library/ms632646(v=vs.85).aspx

于 2010-12-22T12:08:13.283 に答える
-1

MSDNによると、dwFlagsでこのフラグを渡す必要があるようです。

STARTF_USESHOWWINDOW 0x00000001 - The wShowWindow member contains additional information.
于 2010-12-13T18:23:29.703 に答える