gpt4 book ai didi

c# - 获取进程 ID 时出错

转载 作者:太空狗 更新时间:2023-10-30 00:55:01 26 4
gpt4 key购买 nike

我正在创建一个剪贴板监视器作为一个项目,在剪贴板更改上,应用程序通过调用 GetClipboardOwner 检测哪个程序使用了剪贴板。

这是代码的摘录:

protected override void WndProc(ref Message m)
{
const int WM_DRAWCLIPBOARD = 0x308;
const int WM_CHANGECBCHAIN = 0x030D;

switch (m.Msg)
{
case WM_DRAWCLIPBOARD:
Debug.Indent();
//Process the clipboard here
uint processId;
IntPtr ownerHwnd = GetClipboardOwner();
GetWindowThreadProcessId(ownerHwnd, out processId);
Process proc = Process.GetProcessById((int)processId);
Debug.WriteLine(String.Format("Window Title: {0} Filename: {1}", proc.MainWindowTitle, process.MainModule.FileName));
SendMessage(_NextClipboardViewer, m.Msg, m.WParam, m.LParam);
break;

case WM_CHANGECBCHAIN:
if (m.WParam == _NextClipboardViewer)
_NextClipboardViewer = m.LParam;
else
SendMessage(_NextClipboardViewer, m.Msg, m.WParam, m.LParam);
break;

default:
base.WndProc(ref m);
break;
}
}

和 DLLImports:

[DllImport("User32.dll")]
public static extern IntPtr SetClipboardViewer(IntPtr _newviewerhandle);

[DllImport("User32.dll")]
public static extern bool ChangeClipboardChain(IntPtr removehandle, IntPtr nexthandle);

[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);

[DllImport("User32.dll")]
public static extern IntPtr GetClipboardOwner();

[DllImport("kernel32.dll")]
public static extern int GetWindowThreadProcessId(IntPtr handle, out uint threadid);

输出窗口中的异常是 - 在 Something.exe 中发生类型为“System.EntryPointNotFoundException”的第一次机会异常

更新 2 将“Kernel32”更改为“User32”后,它可以正常工作,但对于某些应用程序,如 Word、Excel,我会遇到此异常; System.dll 中发生类型为“System.ComponentModel.Win32Exception”的第一次机会异常

有什么想法吗?

UPDATE 3 以上异常是由于32位进程(我的应用程序)访问64位进程(Word、Excel等)的模块引起的将配置更改为 x64 有效。

最佳答案

GetWindowThreadProcessIdDllImport 应该使用user32.dll,而不是kernel32.dll

根据 MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms633522(v=vs.85).aspx

或者简单地使用 PInvoke.Net:GetWindowThreadProcessId

关于c# - 获取进程 ID 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com