2016-07-22 2 views
0

Я пытаюсь сделать что-то вроде вопроса, заданного в этом сообщении в win10 с C# SendInput to minimized window while you're working on other windows.'GetProcessIdOfThread' всегда возвращает ноль

я последовал за лучший ответ, чтобы сделать, и я считаю, что не работает, как «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

Если функция завершается успешно, возвращаемое значение является идентификатором процесса процесса, связанного с указанным потоком. Если функция не работает, возвращаемое значение равно нулю. Чтобы получить расширенную информацию об ошибке, вызовите 'GetLastError'. – Marusyk

+0

Но прямо не вызывайте 'GetLastError' - используйте [' Marshal.GetLastWin32Error'] (https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getlastwin32error (v = vs. 100) .aspx) и прочитайте там документацию для других требований. –

ответ

1

MSDN о GetProcessIdOfThread:

Получает идентификатор процесса процесса, связанного с указанного потока.

Вы передаете ручку окна (HWND) вместо рукоятки потока к функции. Вот почему он возвращает ноль. Вам нужно сначала обработать поток, или вы можете напрямую вызвать функцию GetWindowThreadProcessId, чтобы получить идентификатор процесса из HWND.

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 
} 
... 
Смежные вопросы