2017-02-23 53 views
-2

我想嘗試使用Pinvoke從WindowsFomrs.Message獲取字符串。如何在Pinvoke中使用LParam GlobalGetAtomName

但GlobalGetAtomName需要ushort,我有LParam這是一個IntPtr。

我該如何轉換它?

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
static extern uint GlobalGetAtomName(ushort nAtom, StringBuilder lpBuffer, int nSize); 

protected override void WndProc(ref Message m) 
{ 

      Console.WriteLine("HWnd: " + m.HWnd.ToString()); 
      Console.WriteLine("LParam: " + m.LParam.ToString()); 
      Console.WriteLine("WParam: " + m.WParam.ToString()); 
      Console.WriteLine("Msg: " + m.Msg.ToString()); 
      int nSize = 514; 
      StringBuilder AtomName = new StringBuilder(nSize); 
      nSize = GlobalGetAtomName(m.LParam, AtomName, nSize); 
      Console.WriteLine("String: " + AtomName); 

    base.WndProc(ref m); 
} 
+1

對不起,是你的問題實在沒有什麼比我怎麼投的IntPtr到USHORT更多?如果是這樣,爲什麼不問這個?當然,這也是重複的。 –

+0

@DavidHeffernan我以爲我給了最小的背景。對不起,如果這是令人困惑。你有答案嗎? – ManInMoon

+0

恩,呃,施放它:'(ushort)m.LParam' –

回答

0

演員的價值,需要的類型:

(ushort)m.LParam