Změna pohybu myši – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Změna pohybu myši – Delphi – Fórum – Programujte.comZměna pohybu myši – Delphi – Fórum – Programujte.com

 

Majlow0
Duch
12. 1. 2015   #1
-
0
-

Dobrý den, potřeboval bych poradit jak změnit směr pohybu myši. Tzn. například převrátit směry - pohyb nahoru, myš se pohybuje dolů atd.

Děkuju za pomoc

Nahlásit jako SPAM
IP: 90.182.21.–
Sniper
~ Anonymní uživatel
215 příspěvků
13. 1. 2015   #2
-
0
-
Nahlásit jako SPAM
IP: 90.179.201.–
Majlow
~ Anonymní uživatel
8 příspěvků
13. 1. 2015   #3
-
0
-

#2 Sniper
Potřebuju vytvořit program, který bude simulovat chování viru (neškodného). Tzn. po spuštění bych rád aby prohodil strany pohybu kurzoru myši.

Nahlásit jako SPAM
IP: 90.182.21.–
Sniper
~ Anonymní uživatel
215 příspěvků
13. 1. 2015   #4
-
0
-

V tom případě máš alespoň část řešení v těch odkazech. RawInput použít na odchyt pohybu myšky a pomocí SendInput pak poslat kurzor na opačnou stranu. Asi bude problém v tom, zabránit systému v původním pohybu, ale nemíním to teď zkoušet. Až budeš něco mít tak možná popojedem.

Nahlásit jako SPAM
IP: 90.179.201.–
Majlow
~ Anonymní uživatel
8 příspěvků
13. 1. 2015   #5
-
0
-

#4 Sniper
No nejsem moc zkušenej programátor. Kdybych nemusel, nedělám to. Ale samozřejmě to zkusím. Koukal jsem na odkazy a je tam syntaxe pro C++. Ta je stejná jako v Delphi?

Nahlásit jako SPAM
IP: 90.182.21.–
Sniper
~ Anonymní uživatel
215 příspěvků
13. 1. 2015   #6
-
0
-

To pochopitelně není, ale když se pouštíš do něčeho takového tak jsem předpokládal že už v dané oblasti něco znáš. Nevadí, zkusím napsat jednoduchou ukázku jak na to.

Nahlásit jako SPAM
IP: 90.179.201.–
Majlow
~ Anonymní uživatel
8 příspěvků
13. 1. 2015   #7
-
0
-

#6 Sniper
Děkuju za pomoc.

Nahlásit jako SPAM
IP: 90.182.21.–
Sniper
~ Anonymní uživatel
215 příspěvků
15. 1. 2015   #8
-
0
-

Prvotní řešení, u mě to funguje. Je to dělaný v okně protože je ho potřeba na záchyt a zpracování WM_INPUT, ale pokud nechceš okenní aplikaci tak se to dá obejít pomocí AllocateHWND. Tady je kód: 

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,
  WinRawInput;

type
  TfMainForm = class(TForm)
    tmrOffTimer: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure tmrOffTimerTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OnRawInput(var Msg: TMessage); message WM_INPUT;
    procedure ProcessMouseInput(Mouse: TRawMouse);
  end;

var
  fMainForm: TfMainForm;

implementation

{$R *.dfm}

procedure TfMainForm.OnRawInput(var Msg: TMessage);
var
  RawInputSize: LongWord;
  RawInput:     PRawInput;
begin
GetRawInputData(HRAWINPUT(Msg.lParam),RID_INPUT,nil,@RawInputSize,SizeOf(TRawInputHeader));
If RawInputSize > 0 then
  begin
    RawInput := AllocMem(RawInputSize);
    try
      If GetRawInputData(HRAWINPUT(Msg.lParam),RID_INPUT,RawInput,@RawInputSize,SizeOf(TRawInputHeader)) = RawInputSize then
        case RawInput^.header.dwType of
          RIM_TYPEMOUSE:    ProcessMouseInput(RawInput^.mouse);
          RIM_TYPEKEYBOARD:;
          RIM_TYPEHID:;
        end;
    finally
      FreeMem(RawInput,RawInputSize);
    end;
  end;
end;

procedure TfMainForm.ProcessMouseInput(Mouse: TRawMouse);
var
  SimInput: TInput;
begin
If ((Mouse.lLastX <> 0) or (Mouse.lLastY <> 0)) and (Mouse.ulExtraInformation <> DWORD(-1)) then
  begin
    FillChar(SimInput,SizeOf(SimInput),0);
    SimInput.Itype := INPUT_MOUSE;
    SimInput.mi.dx := -2 * Mouse.lLastX;
    SimInput.mi.dy := -2 * Mouse.lLastY;
    SimInput.mi.dwFlags := MOUSEEVENTF_MOVE;
    SimInput.mi.dwExtraInfo := DWORD(-1);
    SendInput(1,SimInput,SizeOf(SimInput));
  end;
end;

procedure TfMainForm.FormCreate(Sender: TObject);
var
  RawInputDevice:  PRawInputDevice;
begin
New(RawInputDevice);
try
  RawInputDevice^.usUsagePage := $01;
  RawInputDevice^.usUsage := $02; //mouse
  RawInputDevice^.dwFlags := RIDEV_INPUTSINK;
  RawInputDevice^.hwndTarget := Handle;
  If not RegisterRawInputDevices(RawInputDevice,1,SizeOf(TRawInputDevice)) then
    raise Exception.Create('Raw input registration failed.');
finally
  Dispose(RawInputDevice);
end;
end;

procedure TfMainForm.tmrOffTimerTimer(Sender: TObject);
begin
close;
end;

end.

WinRawInput je moje unita, tak ji kdyžtak vymaž - mám ji tam protože moje delphi (7) podle všeho nemaj nikde věci potřebný pro RawInput, v novějších už to snad je. Timer tam je pro jistotu - automaticky to vypne kdyby něco.

Nahlásit jako SPAM
IP: 90.179.201.–
majlow
~ Anonymní uživatel
8 příspěvků
16. 1. 2015   #9
-
0
-

#8 Sniper
Podívám se a vyzkouším..kuju

Nahlásit jako SPAM
IP: 109.72.5.–
Václav
~ Anonymní uživatel
31 příspěvků
9. 7. 2015   #10
-
0
-

Dobrý den, nejsem programátor a potřeboval bych pomoc. Jednou se mi obrátil směr kurzoru kterým se pohybuje (otočil), zkoušel jsem různá nastavení ale nikde jsem nenašel odpověď. Děkuji za odpověď

Nahlásit jako SPAM
IP: 88.101.7.–
Václav
~ Anonymní uživatel
31 příspěvků
9. 7. 2015   #11
-
0
-

#8 Sniper
[-]

Dobrý den, nejsem programátor a potřeboval bych pomoc. Jednou se mi obrátil směr kurzoru kterým se pohybuje (otočil), zkoušel jsem různá nastavení ale nikde jsem nenašel odpověď. Děkuji za odpověď

Nahlásit jako SPAM
IP: 88.101.7.–
Sniper
~ Anonymní uživatel
215 příspěvků
9. 7. 2015   #12
-
0
-

A otázka je...?

Potřebuješ pomoc s programem, nebo ti hapruje systém, nebo co vlastně? Rozepiš se trochu.

Nahlásit jako SPAM
IP: 90.179.201.–
Václav
~ Anonymní uživatel
31 příspěvků
9. 7. 2015   #13
-
0
-

Když jsem vyzkoušel jiný výrobek tak normálně na mém počítači fungoval. Jen chci potvrdit jestli je myš opravdu rozbitá nebo jsem omylem změnil osu y.

Nahlásit jako SPAM
IP: 88.101.7.–
Sniper
~ Anonymní uživatel
215 příspěvků
9. 7. 2015   #14
-
0
-

Takže se tu bavíme o potenciální poruše hardwaru? Trochu špatná sekce fóra ne?

Jináč možnost otočit osy tu pochopitelně je, takže být tebou podívám se do nastavení systému a případně ovládací aplikace pokud nějaká je. A samozřejmě do manuálu daného zařízení. Víc ti neporadím, protože tohle je silně OT a já nejsem žádnej guru.

Nahlásit jako SPAM
IP: 90.179.201.–
Radovan
~ Anonymní uživatel
1 příspěvek
27. 7. 2015   #15
-
0
-

Dobry den 

Chcem sa spytat, ked pohybujem myskou smerom hore a dolu tak mi ide nalavo a napravo a ked idem s myskou nalavo a napravo ide smerom hore a dolu poradite mi ako to napravim?

Nahlásit jako SPAM
IP: 188.123.100.–
Sniper
~ Anonymní uživatel
215 příspěvků
27. 7. 2015   #16
-
0
-

Prohodíš osy. Neuvádíš žádné detaily, takže víc těžko radit. A taky mám ten pocit že se tu opět nebavíme o programování v delphi.

Nahlásit jako SPAM
IP: 90.179.201.–
peter
~ Anonymní uživatel
4009 příspěvků
28. 7. 2015   #17
-
0
-

Uvedomte si, ze zakladni tema je to, co napsal Majlow nahore, chtel zamerne zmenit smer mysi. Pokud resite stale jeho problem a divite se, ze smer mysi je jinak, tak je to zamerne, ne? Pokud jeho problem neresite, pak musite o svem problemu napsat vic, vlastni kod programu, u hw popis, co jste s tim zkouseli. Pokud kdysi zlobila my a jina jela, tak byl problem
- v nespravnem ovladaci (to je celkem logicke, ze mys se spatnym ovladacem nepojede; obvykle je to problem starsich mysi, ovladacu)
- prepnuta mys z rezimu 2 tlacitka na 3 (tak to je celkem logicke, ze pro 2 tlacitkovy rezim se pouziva jina sada ovladacu na starem pc - tuhle zakernost nam delali spoluzaci ve skole)
- ps2 mys nejede, za chodu jsem ji vytahl a zasunul (presne tak se ale ps2 chova, je treba restart pc)
- mate mys skutecne dobre zasunutou ve spravne dire?
- jeste by mohlo byt spatne zapojeni uvnitr pc, ale kdyz jina mys jede, tak je problem jen mys nebo ovladac
Pokud se nejedna o tento problem, ale problem sw, tak je treba kod nebo nazev, pripadne reklamovat u vyrobce sw / mys.

Pozor, u novych pc jsou taky pekne zakernosti. Treba lze otacet display. Cili, co monitor zobrazuje, zobrazovat prevracene nebo otocit o 90 stupnu. Lze otacet i monitor a on se pak bud prizpusobi sam a prevrati displej nebo je treba to udelat rucne. Tusim je na to klavesova zkratka ctrl+shift+sipka(nahoru, dolu,vpravo,vlevo). Tusim jde dokonce u win primo nastavi, ze mys jde obracene. (ma to sve vyhody, uz jsem toho parkrat vyuzil k prospechu, ale bezneho uzivatele to vyleka, kdyz si omylem pres klavesnici prehodi zobrazovani monitoru opacne)
Take existuje dualni rezim, dva displeje, kde lze nastavit, ze smerem doprava pres okraj se prejde na druhy. Jenze, kdyz je druhy monitor vlevo a ne vpravo, tak je to takove divne :)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:4fb:e06...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Zmena polohy kurzoru myši — založil lukas.balaz

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý