我正在尝试从我的代码启动另一个程序并将其设置为屏幕大小。无论我尝试什么,我似乎无法获得窗口的正确句柄,因此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代码是一个示例,程序可能会启动其他进程。
答案 0 :(得分:0)
您正在等待输入空闲,最长时间为0.1秒。我真诚地怀疑这个过程是否会启动 AND 以如此短的方式创建它的主要消息循环。
我建议你改用parameterless overload,这样你就可以等到进程的消息循环进入空闲状态 - 这就是它的窗口应该被创建的时候:
p.WaitForInputIdle()
引用文档:
当一个进程在消息循环内等待消息时,它被称为处于空闲状态。例如,当应用程序需要 等待启动过程完成创建主窗口 ,然后应用程序与该窗口进行通信时,此状态很有用。