wklejanie do konsoli

0

Mam problem z wklejaniem do konsoli. Napisałem sobie programik ale żeby użytkownik się nie męczył z wpisywaniem długich łańcuchów chciałbym mu umożliwić wklejenie do konsoli. Crtl+v nie działa shift+insert tez. Co zrobić?

0

wklejanie działa z menu pod PPM

//unsigned int index - indeks polecenia w menu, które chcesz wybrać, dla wklej masz bodajże indeks 2 (czyli 3 pozycja - liczone od góry)
bool Console_PasteText(unsigned int index)
{
  HWND hMenu, hConsole = GetConsoleWindow();
  if(!hConsole) return false;
  SetForegroundWindow(hConsole);
  
  RECT rc, clrc;
  if(!GetWindowRect(hConsole, &rc) || !GetClientRect(hConsole, &clrc) ||
     !AdjustWindowRectEx(&clrc,GetWindowLongPtr(hConsole, GWL_STYLE), GetMenu(hConsole), GetWindowLongPtr(GWL_EXSTYLE))
    ) return false;
  int x = rc.left - clrc.left + 1, y = rc.top - clrc.top + 1;
  if(!SetCursorPos(x, y)) return false;
  mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTDOWN, x, y, 0, GetMessageExtraInfo());
  mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTUP, x, y, 0, GetMessageExtraInfo());
  Sleep(50);
  
  hMenu = FindWindow(TEXT("#32768"), NULL);
  if(!hMenu) return;
  if(!GetWindowRect(hMenu, &rc)) return false;
  x = rc.left + ((rc.right - rc.left) >> 1);
  int h = (rc.bottom - rc.top) / items.size(); //calc item height
  y = rc.top + index * h + (h >> 1);
  if(!SetCursorPos(x, y)) return false;
  mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, x, y, 0, GetMessageExtraInfo());
  mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, x, y, 0, GetMessageExtraInfo());
}

Kod wklepany bez sprawdzania czy się kompiluje :P

chociaż lepiej sprawdzić jaki ID w WM_COMMAND ma polecenia wklejenia z tego menu i wysłać bezpośrednio, byłoby bez otwierania menu

oczywiście powyższy kod zakłada, że chodzi o konsolę w tym programie
inną opcją jest po prostu pobranie tego co jest w clipboardzie i dopisanie
możliwości jest naprawdę dużo...

0

może ctrl+shift+v ? ja tak mam

1 użytkowników online, w tym zalogowanych: 0, gości: 1