2017-02-27 10 views
1

나는 양식을하고 난 내가 글로벌 낮은 수준의 키보드 후크 사용이 튜토리얼에 따라 노력하고, F1을 누르면 내 폼을 표시하고 숨기고 싶은 : 나는 1 배 형태의 가죽을 눌러 https://www.codeproject.com/articles/19004/a-simple-c-global-low-level-keyboard-hook쇼 숨기기 형태

을 , 잠시 후 다시 누르면 양식이 작동하지 않습니다. 어떤 도움

namespace MyForm 
{ 
    public partial class Form1 : MetroForm 
    {  
     public Form1() 
     { 
      InitializeComponent();     
     } 

     globalKeyboardHook gkh = new globalKeyboardHook(); 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      gkh.HookedKeys.Add(Keys.F1); 
      gkh.KeyDown += new KeyEventHandler(gkh_KeyDown); 

      gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);    
     } 

     void gkh_KeyUp(object sender, KeyEventArgs e) 
     { 
      this.Show(); 
      e.Handled = true;     
     } 

     void gkh_KeyDown(object sender, KeyEventArgs e) 
     { 
      this.Hide(); 
      e.Handled = true;  
     } 

     private void Form1_Closing(object sender, EventArgs e) 
     { 
      gkh.unhook(); 
     } 
    } 
} 

들으

답변

0

무엇을 당신이 동시에 두 이벤트를 트리거 할 수 있도록 버튼을 누르고 동시에 단추를 풀어 놓고 일을 대신

public static bool flag = true; 
     public Form1() 
     { 
      InitializeComponent(); 

     } 
     globalKeyboardHook gkh = new globalKeyboardHook(); 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      gkh.HookedKeys.Add(Keys.F1); 
      gkh.KeyDown += new KeyEventHandler(gkh_KeyDown); 

     } 

     void gkh_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (flag) 
      { 
       this.Hide(); 
       flag = false; 
      } 
      else 
      { 
       this.Show(); 
       flag = true; 
      } 

      e.Handled = true; 
     } 

     private void Form1_Closing(object sender, EventArgs e) 
     { 
      gkh.unhook(); 
     } 
그런 짓을하는

f1을 누르기 때문에 keydown이 될 하나의 이벤트에서 처리해야하며 양식이 숨겨져 있는지 확인하고 양식이 숨겨져 있는지 확인하기 위해 플래그를 추가했습니다.

+0

thx가 완벽하게 작동합니다. –