2016-07-22 20 views
0

Ich versuche, etwas wie die Frage in diesem Beitrag in win10 mit C# SendInput to minimized window while you're working on other windows.'GetProcessIdOfThread' immer Null zurück

Ich folgte die beste Antwort zu tun, und ich finde es nicht als „GetProcessIdOfThread“ Rückkehr immer 0.

Hier ist der Code nicht funktioniert:

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; 
    } 
} 

Habe ich falsch verstanden etwas? Vielen Dank!

+0

Wenn die Funktion erfolgreich ist, ist der Rückgabewert die Prozess-ID des Prozesses, der dem angegebenen Thread zugeordnet ist. Wenn die Funktion fehlschlägt, ist der Rückgabewert Null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie 'GetLastError' auf. – Marusyk

+0

Aber rufen Sie 'GetLastError' nicht direkt auf - verwenden Sie [' Marshal.GetLastWin32Error'] (https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getlastwin32error (v = vs. 100) .aspx) und lies die Dokumentation dort für andere Anforderungen. –

Antwort

1

MSDN über GetProcessIdOfThread:

Ruft die Prozesskennung des Prozesses mit dem Gewinde angegebenen verbunden.

Sie übergeben Handle eines Fensters (HWND) anstelle von Handle eines Threads an die Funktion. Deshalb gibt es null zurück. Sie müssen zuerst den Thread behandeln, oder Sie können direkt die GetWindowThreadProcessId Funktion aufrufen, um die Prozess-ID von HWND abzurufen.

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 
} 
... 
Verwandte Themen