2015-08-08 2 views
1
Declare Function GetForegroundWindow Lib "user32.dll"() As Int32 

Declare Function GetWindowThreadProcessId Lib "user32.dll" (
    ByVal hwnd As Int32, 
    ByRef lpdwProcessId As Int32) As Int32 

Public Function RetCurTitle() As Integer 
    Dim processID As Int32 
    Return GetWindowThreadProcessId(GetForegroundWindow(), processID) 
End Function 

Я использую вышеуказанную функцию, чтобы получить идентификатор процесса активного окна. Она возвращает 4060.AppActivate не работает с идентификатором процесса

После этого я называю

AppActivate(4060) 

И сбои приложения. Я попытался использовать целочисленную переменную вместо 4060, но такую ​​же проблему.

+0

Вы не используете GetWindowThreadProcessId() правильно. Вы возвращаете * thread ID * потока, которому принадлежит окно, а не идентификатор процесса. –

ответ

1

Функция RetCurTitle() возвращает возвращаемое значение GetWindowThreadProcessId(), которое является идентификатором потока, а не идентификатором процесса. Измените свою функцию на:

Public Function RetCurTitle() As Int32 
    Dim processID As Int32 
    GetWindowThreadProcessId(GetForegroundWindow(), processID) 
    Return processID 
End Function 
Смежные вопросы