在没有指向MSDN的情况下,有人可以简明扼要地解释每个问题的目的以及何时使用它们.(IntPtr,SafeHandle和HandleRef)
Microsoft在.NET框架中包含一个非常好的Windows API包装器.它存储在Microsoft.Win32.UnsafeNativeMethods,Microsoft.Win32.SafeNativeMethods和Microsoft.Win32.NativeMethods中.但遗憾的是,它们无法访问,因为它们被声明为私有.有没有办法轻松访问它们?
我正在尝试执行以下操作之一1.打开所需程序并以编程方式按键2.找到程序打开窗口并以编程方式按键(或者很好)
我尝试了很多SendKeys.SendWait(),PostMessage()和SendMessage()的实现失败.以下是我的代码片段
//included all these for attempts
[DllImport("User32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll")]
static extern int SetForegroundWindow(IntPtr hWnd);
[DllImport("User32.Dll", EntryPoint = "PostMessageA")]
static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern byte VkKeyScan(char ch);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
Run Code Online (Sandbox Code Playgroud)
获取sendmessage/postmessage/sendkeys使用的窗口,变量的句柄
IntPtr ptrOBS = proc.Handle;//this works properly, proc is instantiated properly
//IntPtr ptrOBS = FindWindow(null, "Open Broadcaster Software v0.472b");
SetForegroundWindow(ptrOBS);
const UInt32 WM_CHAR …Run Code Online (Sandbox Code Playgroud)