' GetProcessIdOfThread'总是归零

时间:2016-07-22 06:20:20

标签: c# visual-studio-2015 windows-10

我正在尝试使用C#SendInput to minimized window while you're working on other windows在win10的这篇文章中提出的问题。

我遵循了最佳答案,我发现它并没有像#34; GetProcessIdOfThread"总是返回0。

以下是代码:

public MainWindow()
{
    InitializeComponent();

    IntPtr NotepadHandle = FindWindow("Notepad", "Untitled - Notepad");
    if (NotepadHandle == IntPtr.Zero)
    {
        MessageBox.Show("Notepad is not running.");
        return;
    }
    uint noteid = GetProcessIdOfThread(NotepadHandle);
    uint selfid = GetCurrentThreadId();
    bool attach = AttachThreadInput(selfid, noteid, true);
    if (attach == false)
    {
        MessageBox.Show("attach fail");
        return;
    }
}

我误解了什么吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

关于GetProcessIdOfThread的MSDN:

  

检索与该关联的进程的进程标识符   指定的线程。

您正在将窗口句柄(HWND)而不是线程句柄传递给该函数。这就是它返回零的原因。您需要先处理该线程,或者直接调用GetWindowThreadProcessId函数从HWND获取进程ID。

IntPtr notepadHandle = FindWindow("Notepad", "Untitled - Notepad");
if (notepadHandle == IntPtr.Zero) {
    MessageBox.Show("Notepad is not running.");
    return;
}
uint noteId;
uint threadId = GetWindowThreadProcessId(notepadHandle , out noteId);
if (threadId != 0) {
   // Succeed
}
...