Сбой CallWindowPro c со значением 5 - PullRequest
0 голосов
/ 20 марта 2020

Я хочу управлять другими запущенными программами напрямую CallWindowProc вместо SendMessage, мой код:

#define UNICODE
#include <Windows.h>
#include <stdio.h>
int main(){
    HWND hwnd;
    scanf("%d", &hwnd);
    WNDPROC l = (WNDPROC)GetWindowLongPtr(hwnd, GWL_WNDPROC);
    CallWindowProc(l, hwnd, WM_PAINT, NULL, NULL);
    return GetLastError();
}

Это очень просто, но после того, как я ввел получил HWND от любого другого запущенного окна с помощью spy ++, он потерпел неудачу с возвращаемым значением 5. Что означает Permission Denied на GetLastError() Я запутался. Поэтому я буду признателен, если кто-нибудь сможет мне помочь.

Я использую Visual Studio 2010 express (C ++) и открываю IDE в режиме администратора. Я также использую Windows 7 и закрыл свой UA C.

Заранее спасибо.

1 Ответ

1 голос
/ 20 марта 2020

Окно имеет сходство потоков . Его оконная процедура может напрямую вызываться только тем же потоком, который создал само окно. Таким образом, вы не можете использовать CallWindowProc() из другого потока, не говоря уже о другом процессе.

...