C#在移动文本后运行屏幕保护程序预览(如弹跳球)

C#在移动文本后运行屏幕保护程序预览(如弹跳球),c#,gdi+,screensaver,C#,Gdi+,Screensaver,从[], 我导出了以下代码: // *********************************** show_bubble_scr_preview [ DllImport ( "user32.dll" ) ] static extern IntPtr SetParent ( IntPtr clild_window_handle, IntPtr parent_window_handle ); [ DllImport (

从[], 我导出了以下代码:

// *********************************** show_bubble_scr_preview

[ DllImport ( "user32.dll" ) ]
static extern IntPtr SetParent ( IntPtr clild_window_handle, 
                                 IntPtr parent_window_handle );

[ DllImport ( "user32.dll" ) ]
static extern bool MoveWindow ( IntPtr  window_handle, 
                                int     x, 
                                int     y, 
                                int     width, 
                                int     height, 
                                bool    repaint );

public static void show_bubble_scr_preview ( Control control )
{
    string  path = @"C:\Windows\System32\Bubbles.scr";

    if ( File.Exists ( path ) )
    {
        try
        {
            IntPtr  window_handle;
            Process process = new Process ( );

            process.StartInfo.FileName = path;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.Arguments = "/P " + control.Handle;

            process.Start();

            window_handle = process.MainWindowHandle;
            process.WaitForInputIdle ( );

            if ( window_handle != IntPtr.Zero )
            {
                Rectangle client_rectangle = control.
                ClientRectangle;

                SetParent ( window_handle, control.Handle );
                MoveWindow ( window_handle, 
                             client_rectangle.Left, 
                             client_rectangle.Top, 
                             client_rectangle.Width, 
                             client_rectangle.Height, 
                             true);
            }
        }
        catch ( Exception ex )
        {

        }
    }
}
父窗体包含用户指定的文本,该文本在 形式。在父窗体的初始化过程中,会发生以下操作:

  • InitializeComponent()
  • SetStyle
    updatestyle
  • 窗体设置为全屏模式
  • 窗体背景色设置为黑色
  • 计算将在屏幕上移动的文本大小
  • 计算文本的初始x和y位置
  • 创建并启动
    系统.计时器.Timer
  • 最后调用
    show\u bubble\u scr\u preview(this)
计时器事件处理程序是:

// ****************************************************** tick

void tick ( object source, ElapsedEventArgs e )
{
    try
    {
        if ( this.InvokeRequired )
        {
            this.Invoke ( 
                new EventHandler ( 
                    delegate
                    {
                        this.Refresh ( );
                    } 
                ) 
            );
        }
        else
        {
            this.Refresh ( );
        }
    }
    catch ( Exception ex )
    {

    }
}
OnPaint
中重新定位和重画文本

我试图实现的是让气泡漂浮 当文本移动时,在表格周围移动。我得到的是,非常简单, 气泡.scr图像出现,然后是全屏黑色窗体 出现。文本按预期移动。但没有泡沫。这个
process.MainWindowHandle
始终为零


我很感激你的想法。

我只是猜测,也许屏幕保护程序会出现在表单后面。如果不全屏显示,会发生什么?@jszigeti,不幸的是,如果表单没有最大化,它只会在监视器的左上角显示为一个小表单。谢谢你的尝试。