我用EnumWindows得到了qq每个聊天窗口的句柄,然后得到了他们的进程和进程名,想为每个窗口设置键盘钩子,但是SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId)的参数老是设置错误,请问需要调用全局dll吗?假设句柄参数为:IntPtr hwnd 进程为:int id
解决方案 »
- excel数据批量导入sql数据库
- winform的进 高分 在线等
- 开发一个类似Microsoft Visual SourceSafe的软件
- 用Show如何让子窗体显示在父窗体的中间?
- 怎样查看本机的端口信息(c#)
- 本人已经熟悉VB、C、C++,今想转向C#,翻了翻《C#入门经典》和《C#高级编程》,觉得书太厚,篇幅太长,因此不得要领,请诸位根据我的情况
- C#中是否能调用VC++6写的动态库
- 用c#如何提取搜索引擎返回的链接
- 怎样保持数据的正确性(一致性),在使用try的时候
- 怎么做excel报表比较方便啊?
- 自定义控件在窗体设计中怎么用拖拉(resize)不动?
- .vshost.exe的一个问题
{
List<WindowInfo> wndList = new List<WindowInfo>(); //enum all desktop windows
EnumWindows(delegate(IntPtr hWnd, int lParam)
{
WindowInfo wnd = new WindowInfo();
StringBuilder sb = new StringBuilder(256);
//get hwnd
wnd.hWnd = hWnd;
//get window name
GetWindowTextW(hWnd, sb, sb.Capacity);
wnd.szWindowName = sb.ToString();
//get window class
GetClassNameW(hWnd, sb, sb.Capacity);
wnd.szClassName = sb.ToString();
//add it into list
wndList.Add(wnd);
return true;
}, 0); //return wndList.ToArray();
return wndList;
}
void kaishi()
{
int i = 0;
List<WindowInfo> wndList1 = new List<WindowInfo>();
wndList1 = GetAllDesktopWindows();
int id=0;
foreach (WindowInfo one in wndList1)
{
i = 0;
int pid_zhuandao = 0;
string s1 = "";
string s2 = one.szClassName.ToString();
GetWindowThreadProcessId(one.hWnd, out pid_zhuandao);
foreach (Process thisproc in System.Diagnostics.Process.GetProcesses())
{
if (thisproc.Id == pid_zhuandao)
{
s1 = thisproc.ProcessName.ToString();
}
}
if ((one.szWindowName.ToString().IndexOf("交谈") > -1) && (s1 == "QQ"))
{
i = 1;
Console.Write(one.hWnd.ToString() + "**** ");
Console.Write(s2 + "*****");
Console.Write(one.szWindowName.ToString() + "**** ");
Console.Write(pid_zhuandao.ToString() + " *****");
Console.WriteLine(s1); ;
Console.WriteLine("正在监视 " + one.szWindowName.ToString() + " 窗口");
id = pid_zhuandao;
}
if(i==1)
HookStart(one.hWnd, id);
}
Console.ReadKey();
}
public void HookStart(IntPtr one, int two)
{
if (hKeyboardHook == 0)
{
// 创建HookProc实例
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
// 设置线程钩子
hKeyboardHook = SetWindowsHookEx(2, KeyboardHookProcedure, one,
two);
//textBox1.SelectionStart = textBox1.Text.Length;
// 如果设置钩子失败
if (hKeyboardHook == 0)
{
Console.WriteLine("创建失败");
HookStop();
//throw new Exception("SetWindowsHookEx failed.");
}
} }