0

Wisual Studio 2012、C++ コンソール アプリケーションを使用してプロセスを開こうとすると、87 エラーが発生します。

#include <stdio.h>
#include <tchar.h>
#include <Windows.h>

#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)

EXTERN_DLL_EXPORT int setLastObject(LPCWSTR wname) {
    LPCWSTR str = _TEXT("Name of window");
    HWND wnd = FindWindow(NULL,wname);

    LPDWORD cpid = 0;
    DWORD pid = GetWindowThreadProcessId(wnd,cpid);

    HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    int err = GetLastError();
    return err;
}

PS私はpidを正しく取得します

4

1 に答える 1

1

この関数は、ウィンドウを作成したスレッドGetWindowThreadProcessIdの ID を返します。

2 番目の引数で返される、対応するプロセス ID を使用する必要があります。だから、このようなもの

EXTERN_DLL_EXPORT int setLastObject(LPCWSTR wname) {
    LPCWSTR str = _TEXT("Name of window");
    HWND wnd = FindWindow(NULL,wname);

    DWORD dwProcessId = 0;
    DWORD dwThreadId = GetWindowThreadProcessId(wnd, &dwProcessId);

    HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS,false,dwProcessId);
    int err = GetLastError();
    return err;
}

FindWindowまた、それが成功したかどうかを実際に確認する必要があり、有効になった場合は、それをいつ終了したかHANDLEを覚えておく必要がありますCloseHandle

于 2013-05-23T13:00:29.250 に答える