#include <windows.h>
#include <malloc.h>
#define SHIFTED 0x8000
MSG message;
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
int code;
HANDLE data;
const char* text;
char* newtext;
int len;
HGLOBAL hMem;
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_KEYDOWN:
code = (int)wParam;
if(code >= 65 && code <= 90)
{
if(!(GetKeyState(VK_SHIFT) & SHIFTED))
{
code += 32;
}
if(IsClipboardFormatAvailable(CF_TEXT))
{
OpenClipboard(hwnd);
data = GetClipboardData(CF_TEXT);
if(data != NULL)
{
text = (const char*)data;
len = GlobalSize(data);
newtext = (char*)malloc((len+1)*sizeof(char));
for(int i = 0;i<len-1;i++)
{
newtext[i] = text[i];
}
newtext[len-1] = code;
newtext[len] = 0;
hMem = GlobalAlloc(GHND, len + 1);
memcpy(GlobalLock(hMem), newtext, len + 1);
GlobalUnlock(hMem);
SetClipboardData(CF_TEXT, hMem);
}
CloseClipboard();
}
}
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
WNDCLASSEX window;
LPSTR WClass = "ASDF";
window.cbSize = sizeof( WNDCLASSEX );
window.style = 0;
window.lpfnWndProc = WndProc;
window.cbClsExtra = 0;
window.cbWndExtra = 0;
window.hInstance = hInstance;
window.hIcon = LoadIcon(NULL, IDI_APPLICATION);
window.hCursor = LoadCursor(NULL, IDC_ARROW);
window.hbrBackground =(HBRUSH)(COLOR_WINDOW + 1);
window.lpszMenuName = NULL;
window.lpszClassName = (LPCWSTR)WClass;
window.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&window))
{
return 1;
}
HWND hwnd;
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, (LPCWSTR)WClass, L"Aplikacja", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
return 2;
}
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return 0;
}
I2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgojZGVmaW5lIFNISUZURUQgMHg4MDAwIAoKTVNHIG1lc3NhZ2U7CgpMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKewogICAgaW50IGNvZGU7CglIQU5ETEUgZGF0YTsKCWNvbnN0IGNoYXIqIHRleHQ7CgljaGFyKiBuZXd0ZXh0OwoJaW50IGxlbjsKCUhHTE9CQUwgaE1lbTsKCiAgICBzd2l0Y2gobXNnKQogICAgewogICAgY2FzZSBXTV9DTE9TRToKICAgICAgICBEZXN0cm95V2luZG93KGh3bmQpOwogICAgICAgIGJyZWFrOwogICAgICAgCiAgICBjYXNlIFdNX0RFU1RST1k6CiAgICAgICAgUG9zdFF1aXRNZXNzYWdlKDApOwogICAgICAgIGJyZWFrOwoKCWNhc2UgV01fS0VZRE9XTjoKCQljb2RlID0gKGludCl3UGFyYW07CgkJaWYoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDkwKQoJCXsKCQkJaWYoIShHZXRLZXlTdGF0ZShWS19TSElGVCkgJiBTSElGVEVEKSkKCQkJewoJCQkJY29kZSArPSAzMjsKCQkJfQoJCQkKCQkJaWYoSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoQ0ZfVEVYVCkpCgkJCXsKCQkJCU9wZW5DbGlwYm9hcmQoaHduZCk7CgkJCQlkYXRhID0gR2V0Q2xpcGJvYXJkRGF0YShDRl9URVhUKTsKCQkJCWlmKGRhdGEgIT0gTlVMTCkKCQkJCXsKCQkJCQl0ZXh0ID0gKGNvbnN0IGNoYXIqKWRhdGE7CgkJCQkJbGVuID0gR2xvYmFsU2l6ZShkYXRhKTsKCQkJCQluZXd0ZXh0ID0gKGNoYXIqKW1hbGxvYygobGVuKzEpKnNpemVvZihjaGFyKSk7CgkJCQkJZm9yKGludCBpID0gMDtpPGxlbi0xO2krKykKCQkJCQl7CgkJCQkJCW5ld3RleHRbaV0gPSB0ZXh0W2ldOwoJCQkJCX0KCgkJCQkJbmV3dGV4dFtsZW4tMV0gPSBjb2RlOwoJCQkJCW5ld3RleHRbbGVuXSA9IDA7CgoJCQkJCWhNZW0gPSBHbG9iYWxBbGxvYyhHSE5ELCBsZW4gKyAxKTsKCQkJCQltZW1jcHkoR2xvYmFsTG9jayhoTWVtKSwgbmV3dGV4dCwgbGVuICsgMSk7CgkJCQkJR2xvYmFsVW5sb2NrKGhNZW0pOwoJCQkJCVNldENsaXBib2FyZERhdGEoQ0ZfVEVYVCwgaE1lbSk7CgkJCQl9CgkJCQlDbG9zZUNsaXBib2FyZCgpOwoJCQl9CgkJfQoJCWJyZWFrOwogICAgICAgCiAgICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKICAgIH0KICAgCiAgICByZXR1cm4gMDsKfQoKaW50IFdJTkFQSSBXaW5NYWluKCBISU5TVEFOQ0UgaEluc3RhbmNlLCBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgTFBTVFIgbHBDbWRMaW5lLCBpbnQgbkNtZFNob3cgKQp7CglXTkRDTEFTU0VYIHdpbmRvdzsKCUxQU1RSIFdDbGFzcyA9ICJBU0RGIjsKCgl3aW5kb3cuY2JTaXplID0gc2l6ZW9mKCBXTkRDTEFTU0VYICk7Cgl3aW5kb3cuc3R5bGUgPSAwOwoJd2luZG93LmxwZm5XbmRQcm9jID0gV25kUHJvYzsKCXdpbmRvdy5jYkNsc0V4dHJhID0gMDsKCXdpbmRvdy5jYlduZEV4dHJhID0gMDsKCXdpbmRvdy5oSW5zdGFuY2UgPSBoSW5zdGFuY2U7Cgl3aW5kb3cuaEljb24gPSBMb2FkSWNvbihOVUxMLCBJRElfQVBQTElDQVRJT04pOwoJd2luZG93LmhDdXJzb3IgPSBMb2FkQ3Vyc29yKE5VTEwsIElEQ19BUlJPVyk7Cgl3aW5kb3cuaGJyQmFja2dyb3VuZCA9KEhCUlVTSCkoQ09MT1JfV0lORE9XICsgMSk7Cgl3aW5kb3cubHBzek1lbnVOYW1lID0gTlVMTDsKCXdpbmRvdy5scHN6Q2xhc3NOYW1lID0gKExQQ1dTVFIpV0NsYXNzOwoJd2luZG93LmhJY29uU20gPSBMb2FkSWNvbihOVUxMLCBJRElfQVBQTElDQVRJT04pOwoKCWlmKCFSZWdpc3RlckNsYXNzRXgoJndpbmRvdykpCgl7CgkJcmV0dXJuIDE7Cgl9CgoJSFdORCBod25kOwoJaHduZCA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX0NMSUVOVEVER0UsIChMUENXU1RSKVdDbGFzcywgTCJBcGxpa2FjamEiLCBXU19PVkVSTEFQUEVEV0lORE9XLCBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCAyNDAsIDEyMCwgTlVMTCwgTlVMTCwgaEluc3RhbmNlLCBOVUxMKTsKCWlmKGh3bmQgPT0gTlVMTCkKCXsKCQlyZXR1cm4gMjsKCX0KCglTaG93V2luZG93KGh3bmQsbkNtZFNob3cpOwoJVXBkYXRlV2luZG93KGh3bmQpOwoKCXdoaWxlKEdldE1lc3NhZ2UoJm1lc3NhZ2UsIE5VTEwsIDAsIDApKQoJewoJCVRyYW5zbGF0ZU1lc3NhZ2UoJm1lc3NhZ2UpOwoJCURpc3BhdGNoTWVzc2FnZSgmbWVzc2FnZSk7Cgl9CgkKCXJldHVybiAwOwp9