2012-05-12 19 views
4

我的C#程序有一個非常奇怪的行爲。我在這個程序中使用了四個'hacky'pinvoke方法:GlobalKeyHooking,HotKey Registering,SetForegroundWindow/GetForegroundWindow和SendKeys.Send/SendWait。來自P/Invoke函數的奇怪行爲 - Magic loop

這裏有一個我不明白的行爲。我在一個程序中盜取了Ctrl + V,其中標準剪切/複製&粘貼例程由出現和消失的列表框中的自動完成列表替換。在一些裝有Windows 7的計算機上,我的程序就像一個魅力一樣,在其他50%的裝有Windows 7的計算機上運行(可惜沒有VS2010進行調試),出現了一個非常奇怪的循環---內部---一種方法。由於Ctrl和V本身被鉤住,我已經阻止了該方法被無限觸發。沒關係。但是另一個循環出現在方法內部。

簡而言之:myDebugValue增加到23-24-25!所以有些東西在決定停止之前試圖執行很多次函數。

有沒有人已經見過類似的不需要的循環?即使沒有try/catch塊,它也會在函數內跳動。

一些P/Invokes函數可以在某些Windows 7上崩潰而不是其他?

P/Invokes是否有自己的不可見的低級別彙編錯誤處理程序try/catch,比我的C#程序執行更強?

從視覺上看,當我這樣做時,我發現我的程序界面很快就閃爍了25次,我想。

private bool getOutOfHere = false; 

    private int myDebugValue = 0; 

    private void globalKeyHooking_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (getOutOfHere) return; 
     myDebugValue = 0; 
     if (e.KeyCode == Keys.LControlKey) 
     { 
      getOutOfHere = true; 
      SendKeys.SendWait("^v"); 
      getOutOfHere = false; 
      myDebugValue++; 
     }     
    } 

我試着用2.0,3.0和4.0,並於同4臺電腦編制,在所有情況下,它仍然同樣的速度:50層%的崩潰,50%的作品。

[編輯]

我真的覺得SendKeys.Send不同的作用在不同的計算機與Windows 7

回答

0

本來不想回答我的問題,但總是有第一次。 我決定使用類似於InputSimulator的方法來實現我的目標並避免使用SendKeys。現在,所有機器上的一切都完美無缺。

我看到InputSimulator與使用Windows 7的所有機器兼容,並且使用SendInput而不是SendMessage或SendKeys,所以我在我的應用程序中使用了SendInput。