2009-02-20 218 views
-2

每當我按下鍵在我的服務器系統,我會的correspondingaction應在客戶機上happend後的KeyEvent發送到另一個系統..幫我得到一個更好的辦法來解決這個問題鍵盤事件

thanx

回答

1

如果我理解正確,那麼你有什麼聽起來不太糟糕。你是說:

  • 你有一個客戶端服務器體系結構。
  • 在服務器(大概在命令控制檯或管理應用程序),您按下一個鍵。
  • 該鍵對應於一個動作。該操作需要在客戶端調用。

您可以使用異步WCF實現此功能。有關更多信息,請參閱herehere。看待這個問題的一種方法是作爲分佈式觀察者模式。你的服務器是主題,客戶是觀察者。


更新:在.net

處理按鍵事件的

你可以嘗試添加KeyDown事件處理程序,以您的形式:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control & e.KeyCode == Keys.C) 
    { 
     MessageBox.Show("Ctrl + C pressed"); 
     // Swallow key event, i.e. indicate that it was handled. 
     e.Handled = true; 
    } 
} 

但是,如果你有你的窗體上的任何控件,那麼你贏了沒有事件發生。您可能需要做的是使用消息過濾器來嗅探Windows消息。例如。

public class KeyDownMessageFilter : IMessageFilter 
{ 
    public const int WM_KEYDOWN = 0x0100; 

    public bool PreFilterMessage(ref Message m) 
    { 
     if (m.Msg == WM_KEYDOWN) 
     { 
      // Key Down 
      return true; // Event handled 
     } 
     return false; 
    } 
} 

使用AddMessageFilter方法將此消息過濾器添加到應用程序。如果您想檢查按下CTRL鍵是否按下了按鍵信息,請檢查lparam

如果有任何不明確的地方,請告訴我。

+0

您能告訴我如何從我的應用程序中獲取組合鍵,如Ctrl + c Ctrl + v等。 – 2009-02-20 12:05:01

1

請給我們更多關於你想要做什麼的細節。 要模擬Windows窗體中的按鍵,我會使用SendKeys類。

+0

如何通過SendKeys使用發送值 – 2009-02-20 12:03:15