利用RegisterWindowMessage在不同程序窗体间传递消息

功能:程序间传递消息,获得屏幕图形。代码如下,同时运行这两个程序,在form1中按下按纽,则在form2中会出现form1的图形。   
   
Form1代码:
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;   
          procedure   FormCreate(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
      private   
          UserMessage : UINT;  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.DFM}  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin   
      UserMessage  :=   RegisterWindowMessage('WM_SAMPLE');  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      sendmessage(HWND_BROADCAST,UserMessage ,handle,0);  
  end;  
   
  end.  


Form2代码:


  unit   Unit2;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      ExtCtrls;  
   
  type  
      TForm2   =   class(TForm)  
          Image1:   TImage;  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }   
          UserMessage  :   UINT;  
          procedure   GetImage(Form1Window   :   HWND);  
      public  
          {   Public   declarations   }  
      protected  
          procedure   WndProc(var   Message:   TMessage);   override;  
      end;  
   
  var  
      Form2:   TForm2;  
   
  implementation  
   
  {$R   *.DFM}  
   
  procedure   TForm2.FormCreate(Sender:   TObject);  
  begin   
      UserMessage   :=   RegisterWindowMessage('WM_SAMPLE');  
  end;  
   
  procedure   TForm2.WndProc(var   Message:   TMessage);  
  begin  
      if   Message.Msg   =   UserMessage   then  
          GetImage(Message.WParam)  
      else   inherited;  
  end;  
   
  procedure   TForm2.GetImage(Form1Window   :   HWND);  
  var  
          Form1DC:   HDc;  
          Form1Rect:   TRect;  
  begin  
      image1.Picture   :=   nil;  
      Form1DC   :=   GetWindowDC(Form1Window);  
      GetWindowRect(Form1Window,Form1Rect);  
      image1.Width   :=   Form1Rect.Right-Form1Rect.Left;  
      image1.Height   :=   Form1Rect.Bottom   -   Form1Rect.Top;  
      BitBlt(Image1.Canvas.Handle,0,0,image1.Width,  
                    image1.Height,  
                    Form1DC,   0,  
                    0,   SRCCOPY);  
      Image1.Refresh;  
      ReleaseDC(Form1Window,   Form1DC);  
      SetForegroundWindow(handle);  
      beep;   

  end;  
   
  end.  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Creating Windows CreateMDIWindow CreateWindow CreateWindowEx RegisterClass RegisterClassEx UnregisterClass Message Processing BroadcastSystemMessage CallNextHookEx CallWindowProc DefFrameProc DefMDIChildProc DefWindowProc DispatchMessage GetMessage GetMessageExtraInfo GetMessagePos GetMessageTime GetQueueStatus InSendMessage PeekMessage PostMessage PostQuitMessage PostThreadMessage RegisterWindowMessage ReplyMessage SendMessage SendMessageCallback SendMessageTimeout SendNotifyMessage SetMessageExtraInfo SetWindowsHookEx TranslateMessage UnhookWindowsHookEx WaitMessage Window Information AnyPopup ChildWindowFromPoint ChildWindowFromPointEx EnableWindow EnumChildWindows EnumPropsEx EnumThreadWindows EnumWindows FindWindow FindWindowEx GetClassInfoEx GetClassLong GetClassName GetClientRect GetDesktopWindow GetFocus GetForegroundWindow GetNextWindow GetParent GetProp GetTopWindow GetWindow GetWindowLong GetWindowRect GetWindowText GetWindowTextLength IsChild IsIconic IsWindow IsWindowEnabled IsWindowUnicode IsWindowVisible IsZoomed RemoveProp SetActiveWindow SetClassLong SetFocus SetForegroundWindow SetParent SetProp SetWindowLong SetWindowText WindowFromPoint Processes and Threads CreateEvent CreateMutex CreateProcess CreateSemaphore CreateThread DeleteCriticalSection DuplicateHandle EnterCriticalSection ExitProcess ExitThread GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetExitCodeProcess GetExitCodeThread GetPriorityClass GetThreadPriority GetWindowThreadProcessId InitializeCriticalSection InterlockedDecrement InterlockedExchange InterlockedIncrement LeaveCriticalSection OpenEvent OpenMutex OpenProcess OpenSemaphore PulseEvent ReleaseMutex ReleaseSemaphore ResetEvent ResumeThread SetEvent SetPr

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值