trzeba wykryć, kiedy użytkownik naciśnie Ctrl + V (niezależnie od ostrości oknie - moja aplikacja może zostać zminimalizowany), ale nie musi zatrzymać rzeczywistą operację wklejania .Wykrywanie Ctrl + V z RegisterHotKey ale nie przechwytując ją
Próbowałem kilka rzeczy: (ja z powodzeniem wiązanie z klawiszy z RegisterHotKey)
mam:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x312)
hotKey();
base.WndProc(ref m);
}
i próbowałem następujące:
void hotKey()
{
SendKeys.SendWait("^v"); //just puts 'v' instead of clipboard contents
}
i
void hotKey()
{
SendKeys.SendWait(ClipBoard.GetText());
/* This works, but since Ctrl is still down, it triggers
* all the shortcut keys for the app, e.g. if the keyboard
* contains 's' then instead of putting 's' in the app, it
* calls Ctrl+S which makes the app think the user wants
* to save.
*/
}
Obecnie jedynym działającym rozwiązaniem, które mam, jest powiązanie z czymś innym, np. Ctrl + B, a następnie zadzwoń pod numer SendKeys.SendWait("^v");
, jednak nie jest to idealne rozwiązanie.
Idealnym rozwiązaniem byłoby, gdyby moje okno nie przechwyciło klawisza po prostu zareagowało.
Czy możesz wyjaśnić swoje pytanie? Mam problem ze zrozumieniem Twojego zamiaru. Wspomniałeś, że chcesz zatrzymać samą operację wklejania, ale dlaczego próbujesz ponownie wysłać Ctrl + V w swojej pierwszej implementacji skrótu(). Czy mam rację, zakładając, że chcesz przechwycić obejmujące cały system operacje wklejania i zapisać wartości schowka w swojej aplikacji? –
Nie, napisałem "Nie mogę * zatrzymać rzeczywistej operacji wklejania". Chcę wykryć systemowe operacje wklejania i później zastąpić zawartość schowka, aby użytkownik mógł wielokrotnie naciskać Ctrl + V i za każdym razem, gdy następny element został wklejony. Program ma na celu przyspieszenie (i zapobieganie błędom) osoby wprowadzającej dane. – Ozzah
Ok. Źle to przeczytałem. Możesz użyć do tego hooków Windows. Zobacz moją odpowiedź poniżej. –