SetWindowPos对浏览器不起作用-没有MainWindowHandle?

转弯

我一直在尝试用C#创建一个简单的程序,以启动不同的软件,并将其移至特定的屏幕,以便能够在总共有12个监视器的计算机上自动设置不同的窗口。

这些窗口中的大多数是在Chrome或Internet Explorer中启动的。

我用来移动应用程序的代码如下:[DllImport(“ User32.dll”)]静态外部int SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

this.process = Process.Start(this.startInfo);
process.WaitForInputIdle();
SetForegroundWindow(this.process.MainWindowHandle);

Console.WriteLine("Process ID: "+ this.process.Handle);
this.process.Refresh();
Console.WriteLine("Main window handle: " + this.process.MainWindowHandle);

Point screenlocation = Screen.AllScreens[MonitorNum].Bounds.Location;
SetWindowPos(this.process.MainWindowHandle, -1, screenlocation.X, screenlocation.Y, Screen.AllScreens[MonitorNum].Bounds.Width, Screen.AllScreens[MonitorNum].Bounds.Height, 1);

使用Notepad似乎工作正常,但是当它是浏览器时,MainWindowHandle始终返回IntPtr.Zero,即使我刷新了Process。

有什么建议吗?

手动地

现代浏览器使用复杂的多进程体系结构。

如果在启动新的chrome.exe进程时chrome进程已经在运行,则两个进程之间会发生一些进程间通信,并且会启动新的子进程(旧的现有进程的子进程)来承载新的标签页渲染。您启动的进程然后立即退出,您无法为该已死进程获取一个主窗口。创建新的Chrome主窗口是预先存在的过程。

您可以尝试使用以下C ++源代码

#include <Windows.h>
#include <stdio.h>

int main( void ) {

    STARTUPINFO SI;
    memset( &SI, 0, sizeof SI );
    SI.cb = sizeof SI;

    PROCESS_INFORMATION PI;

    BOOL bWin32Success =
    CreateProcess( L"C:\\Users\\manuel\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe",
                   NULL, NULL, NULL, FALSE, 0, NULL,
                   L"C:\\Users\\manuel\\AppData\\Local\\Google\\Chrome\\Application",
                   &SI, &PI );
    if ( bWin32Success ) {
        printf( "PID %u\n", PI.dwProcessId );
        DWORD dwRet = WaitForInputIdle( PI.hProcess, 1000 );
        switch ( dwRet ) {
            case 0:
                printf( "WaitForInputIdle succeedeed\n" );
                break;
            case WAIT_TIMEOUT:
                printf( "WaitForInputIdle timed out\n" );
                break;
            case WAIT_FAILED:
                printf( "WaitForInputIdle Error %u\n", GetLastError() );
                break;
            default:
                printf( "WaitForInputIdle Unknown return value %d\n", dwRet );
        }
        CloseHandle( PI.hThread );
        CloseHandle( PI.hProcess );

    } else {
        printf( "CreateProcess Error %u\n", GetLastError() );
    }
    return 0;
}

使用Spy ++和Windows Task Manager或更好的Process Explorer,您将看到,当chrome已在运行时,新的Chrome主窗口由已运行的chrome.exe托管,并且启动的进程CreateProcess将终止。

解:

  1. 使用某些窗口枚举API拍摄当前显示的Chrome主窗口的快照
  2. 启动一个新的chrome.exe
  3. 拍摄新快照。新窗口是第一个快照中不存在的窗口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SetWindowPos对浏览器不起作用-没有MainWindowHandle?

来自分类Dev

Django的tinymce + Django的文件浏览器没有格拉珀利不起作用

来自分类Dev

Visual Studio 2015中的浏览器链接-不起作用/没有禁用?

来自分类Dev

按钮在Chrome浏览器中有效,但在Mozilla中不起作用

来自分类Dev

带有radialGradient的SVG在浏览器中不起作用

来自分类Dev

Javascript AJAX Click事件有时在Android本机浏览器中不起作用

来自分类Dev

单选按钮在谷歌浏览器中有效,但在Firefox中不起作用

来自分类Dev

OpenVpn-卷曲有效,但浏览器不起作用

来自分类Dev

show()hide()在Firefox中不起作用,但在所有其他浏览器中都起作用

来自分类Dev

JPlayer在Firefox Android上不起作用,但在所有其他浏览器上都起作用

来自分类Dev

将具有RegExp的CSS选择器匹配在浏览器中不起作用

来自分类Dev

将具有RegExp的CSS选择器匹配在浏览器中不起作用

来自分类Dev

css在Firefox中不起作用,但是在所有其他浏览器中都可以

来自分类Dev

jQuery在移动环境中不起作用:当我在Android浏览器中打开时,某些链接没有更改

来自分类Dev

jQuery.localScroll仅在Windows Chrome中不起作用(OSX Chrome和所有其他Windows浏览器都可以正常工作)

来自分类Dev

window.onbeforeunload在弹出窗口中的Firefox 46上不起作用,所有其他浏览器都可以工作

来自分类Dev

使用img最大宽度在浏览窗口中自动调整图像大小:父级div的位置:绝对时,Chrome浏览器中的100%有效,但IE中不起作用

来自分类Dev

没有浏览器的webrtc

来自分类Dev

vsFTPd浏览器没有列表

来自分类Dev

没有浏览器的quickbooks API

来自分类Dev

没有浏览器的jQuery

来自分类Dev

当我手动调整浏览器大小时,媒体查询有效,但当我在Chrome的“检查”中使用“响应”功能时,媒体查询不起作用

来自分类Dev

如何向用户浏览器传达它发出的POST请求没有副作用的信息?

来自分类Dev

ng include在chrome浏览器中不起作用

来自分类Dev

字体在Web浏览器控件中不起作用

来自分类Dev

必需的属性在Safari浏览器中不起作用

来自分类Dev

在Google Chrome浏览器中上传不起作用

来自分类Dev

CSS过渡/动画跨浏览器不起作用

来自分类Dev

.load()在浏览器中不起作用

Related 相关文章

  1. 1

    SetWindowPos对浏览器不起作用-没有MainWindowHandle?

  2. 2

    Django的tinymce + Django的文件浏览器没有格拉珀利不起作用

  3. 3

    Visual Studio 2015中的浏览器链接-不起作用/没有禁用?

  4. 4

    按钮在Chrome浏览器中有效,但在Mozilla中不起作用

  5. 5

    带有radialGradient的SVG在浏览器中不起作用

  6. 6

    Javascript AJAX Click事件有时在Android本机浏览器中不起作用

  7. 7

    单选按钮在谷歌浏览器中有效,但在Firefox中不起作用

  8. 8

    OpenVpn-卷曲有效,但浏览器不起作用

  9. 9

    show()hide()在Firefox中不起作用,但在所有其他浏览器中都起作用

  10. 10

    JPlayer在Firefox Android上不起作用,但在所有其他浏览器上都起作用

  11. 11

    将具有RegExp的CSS选择器匹配在浏览器中不起作用

  12. 12

    将具有RegExp的CSS选择器匹配在浏览器中不起作用

  13. 13

    css在Firefox中不起作用,但是在所有其他浏览器中都可以

  14. 14

    jQuery在移动环境中不起作用:当我在Android浏览器中打开时,某些链接没有更改

  15. 15

    jQuery.localScroll仅在Windows Chrome中不起作用(OSX Chrome和所有其他Windows浏览器都可以正常工作)

  16. 16

    window.onbeforeunload在弹出窗口中的Firefox 46上不起作用,所有其他浏览器都可以工作

  17. 17

    使用img最大宽度在浏览窗口中自动调整图像大小:父级div的位置:绝对时,Chrome浏览器中的100%有效,但IE中不起作用

  18. 18

    没有浏览器的webrtc

  19. 19

    vsFTPd浏览器没有列表

  20. 20

    没有浏览器的quickbooks API

  21. 21

    没有浏览器的jQuery

  22. 22

    当我手动调整浏览器大小时,媒体查询有效,但当我在Chrome的“检查”中使用“响应”功能时,媒体查询不起作用

  23. 23

    如何向用户浏览器传达它发出的POST请求没有副作用的信息?

  24. 24

    ng include在chrome浏览器中不起作用

  25. 25

    字体在Web浏览器控件中不起作用

  26. 26

    必需的属性在Safari浏览器中不起作用

  27. 27

    在Google Chrome浏览器中上传不起作用

  28. 28

    CSS过渡/动画跨浏览器不起作用

  29. 29

    .load()在浏览器中不起作用

热门标签

归档