我正在尝试使用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;
}
}
我误解了什么吗? 谢谢!
答案 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
}
...