dll,它会抓住一个窗口句柄,然后阻止窗口重绘?

Jrdnoland

会员
已加入
2016年5月15日
留言内容
5
编程经验
10+
我有一个远程桌面应用程序,我想在其中创建一个窗口,以使其在加载时停止重新绘制,然后重新开始绘制。

我当时以为C#dll项目可以工作,但是我很难找到此API调用的C#示例。


C#:
 class DrawingControl

    {

        [DllImport("user32.dll")]

        public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);

   

        private const int WM_SETREDRAW = 11;

   

        public static void SuspendDrawing( Control parent )

        {

            SendMessage(parent.Handle, WM_SETREDRAW, false, 0);

        }

   

        public static void ResumeDrawing( Control parent )

        {

            SendMessage(parent.Handle, WM_SETREDRAW, true, 0);

            parent.Refresh();

        }

    }

我对使用和制作可以在其他应用程序中工作的.dll并没有真正的了解。我不是100%不确定这是否是执行我需要的正确API。我还想找到说明整个过程的教程,文章和书。也就是说,查找API,构建c#.dll,在其他应用程序中使用dll等。

我在Stack Overflow上发布了一个类似的问题,但他们拒绝了我的问题而没有任何解释。所以我要在这里尝试。


谢谢,
杰夫
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
The code there assumes, if you'll pardon the pun, that you control the WinForms Control. Since you want to control another window's redrawing, then you will need to get the window handle for that window, and then pass that handle to SendMessage(). None of this requires having your code to be called by their code.
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
现在,如果要在自己的进程空间中运行代码,则必须学习如何进行DLL注入。自从停止使用黑帽技术以来,至今已有许多文章,而充其量是灰帽技术。

使您复杂化的事实是,您想用C#而不是C或C ++来实现。回想一下,除非您具有C#编译器选项来一次全部生成本机代码,否则C#依赖于.NET Framework。一个进程只能加载并运行一个版本的Framework。如果您要注入的进程已经加载并正在运行一个版本的框架,则您的代码必须使用该版本。

我只能说这是好运。我建议使用C或C ++。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
我有一个远程桌面应用程序
而对于这最后的难题。搜索Windows终端服务API。那里可能存在某些东西,这些东西充其量只能为您提供一种从远程计算机获取窗口句柄并将消息发送到该窗口句柄的方法,或者最糟的是将您的代码从计算机发送至远程计算机的方法。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
最佳 底部