process.mainwindowhandle始终返回零

时间:2016-09-25 07:29:34

标签: c# mono raspberry-pi3

我正在尝试从我的代码启动另一个程序并将其设置为屏幕大小。无论我尝试什么,我似乎无法获得窗口的正确句柄,因此SetWindowPos()失败。这是在Raspberry Pi上,我试图调整大小的窗口是运行Python脚本的LXTerminal。

代码:

Process p = Process.Start ("bash", b.command);
    p.WaitForInputIdle (100);

    Process[] procs = Process.GetProcessesByName ("/usr/bin/lxterminal");
    p.Refresh ();
    IntPtr handle = procs [0].MainWindowHandle;
    Console.WriteLine (handle);
    SetWindowPos (handle, 0, 0, 0, 1920, 1080, 0x0040);

对于句柄,它总是打印'0',并且在运行SetWindowPos后,将“SetWindowPos(nil)(nil)打印到[0,0x1920,1080] 64”。

b.command等于-c "lxterminal -e 'python3 ../../../../GameV1.py'"(但仅限于此情况。)此lxterminal代码是一个示例,程序可能会启动其他进程。

1 个答案:

答案 0 :(得分:0)

您正在等待输入空闲,最长时间为0.1秒。我真诚地怀疑这个过程是否会启动 AND 以如此短的方式创建它的主要消息循环。

我建议你改用parameterless overload,这样你就可以等到进程的消息循环进入空闲状态 - 这就是它的窗口应该被创建的时候:

p.WaitForInputIdle()

引用文档:

  

当一个进程在消息循环内等待消息时,它被称为处于空闲状态。例如,当应用程序需要 等待启动过程完成创建主窗口 ,然后应用程序与该窗口进行通信时,此状态很有用。