Próbuję zasymulować operacje wciskania klawiszy na klawiaturze: windows-m printscreen
za pomocą winapi. Tak jak zminimalizowanie okien działa jak należy, tak z jakiegoś powodu program nie obsługuje(?) sygnału zrobienia zrzutu ekranu. Tzn. Niby SendInput()
zwraca, że zostało wykonanych tyle akcji ile mu przekazałem, jednak schowek nadal jest pusty. Myślałem, że ma na to wpływ uruchomienie aplikacji jako administrator jednak po odpaleniu go z prawami, nadal bez zmian. Jakieś pomysły dlaczego?
Kod symulowania klawiszy:
bool FillInputArrayCell(INPUT & InputCell, UINT Key, UINT KeyState) {
InputCell.type = INPUT_KEYBOARD;
InputCell.ki.wVk = Key;
InputCell.ki.wScan = 0;
InputCell.ki.dwFlags = KeyState;
InputCell.ki.time = 0;
InputCell.ki.dwExtraInfo = GetMessageExtraInfo();
return true;
}
bool GetPrintScreen() {
// Tworzymy potrzebne struktury INPUT i je wypełniamy
const UINT ArraySize = 6;
INPUT InputArray[ArraySize];
FillInputArrayCell(InputArray[0],VK_LWIN,0);
FillInputArrayCell(InputArray[1],0x4D,0); // 0x4D == M
FillInputArrayCell(InputArray[2],0x4D,KEYEVENTF_KEYUP); // 0x4D == M
FillInputArrayCell(InputArray[3],VK_LWIN,KEYEVENTF_KEYUP);
FillInputArrayCell(InputArray[4],VK_SNAPSHOT,0);
FillInputArrayCell(InputArray[5],VK_SNAPSHOT,KEYEVENTF_KEYUP);
if(SendInput(ArraySize,InputArray,sizeof(InputArray[0])) != ArraySize) return false;
return true;
}
Dalej mam ifa który powinien wywalić msgboxa jeśli GetPrintScreen()
zwróci false. Ani razu tak się nie stało.