あなたはそれを試すかもしれません、それはすべてのトップレベルウィンドウを通り抜け、プロセスIDに属するものを検索します:
// complle and link with: cl layout.cxx user32.lib
#include <windows.h>
#include <stdio.h>
#include <assert.h>
DWORD desiredProcId;
BOOL CALLBACK enumCallBack(HWND hwnd, LPARAM lParam) {
DWORD procId;
DWORD winThread=GetWindowThreadProcessId(hwnd, &procId);
if (procId==desiredProcId) {
HKL hkl=GetKeyboardLayout(winThread);
char buf[1000];
GetWindowText (hwnd, buf, sizeof(buf));
printf ("hwnd=%x name=%s, winThread=%x, HKL=%x\n", hwnd, buf, winThread, hkl);
return false;
}
return true;
}
int main (int argc, char *argv[]) {
if (argc==1) {
printf ("usage: %s processId (in decimal like from taskmanager)\n", argv[0]);
}
else {
sscanf (argv[1], "%d", &desiredProcId);
EnumWindows (enumCallBack, 0);
}
}