- Milyen CPU léghűtést vegyek?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Igencsak szerény méretekkel rendelkezik az Aetina Xe HPG architektúrás VGA-ja
- 3D nyomtatás
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Gaming notebook topik
- Házimozi haladó szinten
- Milyen pendrive-ot vegyek?
- RAM topik
- Sony MILC fényképezőgépcsalád
Hirdetés
-
Toyota Corolla Touring Sport 2.0 teszt és az autóipar
lo Némi autóipari kitekintés után egy középkategóriás autót mutatok be, ami az észszerűség műhelyében készül.
-
A személyre szabott reklám lehet a streaming következő slágere
it A jobb célzott hirdetések érdekében adatplatformot indít a Warner Bros Discovery.
-
Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
gp Továbbra is szeptemberi premierrel számolnak a fejlesztők, reméljük több halasztásra már nem kell számítanunk.
Új hozzászólás Aktív témák
-
Bumbi0
csendes tag
A segítségeteket szeretném kérni.
Egy Hotkey programot írok, de nem tudom, hogy hogy tudnám paraméternek a textbox-ból jövő karaktert, hogy az legyen a hotkey én nem amiét én előr beállítok. Jelen esetben az 'A'.
Előre is köszi asegítséget!private void textBB_TextChanged(object sender, EventArgs e)
{GlobalHotKey ghk = new GlobalHotKey(Win32.KeyCodes.VK_A, false, false, false, false);
ghk.Hotkey += new VoidEventHandler(Hotkey);
}Tehát a VK_A helyére a textBB-ből jövő karakter kódját változó formájában.
-
Bumbi0
csendes tag
válasz ArchElf #1097 üzenetére
Nem értem, hogy mi szükség van konstruktorra.
Ilyesmire gondoltál? Mert így ilyen hibaüzenete kapok:
Error 1 A local variable named 'ghk' is already defined in this scopeprivate void textBB_KeyDown(object sender, KeyEventArgs e)
{
char chrHotkey;
string strHotkey;strHotkey = e.KeyData.ToString();
chrHotkey = strHotkey[0];switch (chrHotkey)
{
case 'A':
GlobalHotKey ghk = new GlobalHotKey(Win32.KeyCodes.VK_A, false, false, false, false);
ghk.Hotkey += new VoidEventHandler(Hotkey);
break;case 'B':
GlobalHotKey ghk = new GlobalHotKey(Win32.KeyCodes.VK_B, false, false, false, false);
ghk.Hotkey += new VoidEventHandler(Hotkey);
break;default:
break;
}}
-
Bumbi0
csendes tag
Egy programot kell írnom ami futás időben 2 darab textboxban 2 darab külön Hotkeyt regisztrál. A hotkeyek a textboxban megadott billentyűre legyenek beregisztrálva. Ha megváltozik a textboxban lévő karakter akkor a hotkeynek ugyan úgy változnia kell, és a hozzájuk tartozó programrészletet ugyan úgy le kell tudniuk futtatni.
Innen vettem a Globális Hotkeyek működését, de 3 hetes kutatás után sem tudtam megcsinálni, hogy a gyorbillenytűk futás időben legyenek beregisztrálva.http://www.softwareonline.hu/Article/View.aspx?id=2279
Az oldalon található sample program:
http://data.hu/get/2056979/HotKey_lynuo.zip.htmlElőre is köszönöm szépen a segítséget!
-
Bumbi0
csendes tag
Köszönöm szépen valóban hasonló mint amilyet én szeretnék.
Azt meg tudod mondani, hogy ezzel mi lehet a baja?private GlobalHotKey ghk;
...
private void textBox_KeyDown(object sender, KeyEventArgs e)
{
ghk = new GlobalHotKey((Win32.KeyCodes)Char.ToUpper(textBoxBet.Text[0]), false, false, false, false);
ghk.Hotkey += new VoidEventHandler(Hotkey);}
Ezt a hiba üzenetet kapom futás időben: [link]
[ Szerkesztve ]
-
Bumbi0
csendes tag
Nagyon jó lett az új verzió látom, hogy mit csináltál de nem értem !
El tudod egy kicsit magyarázni. Látom hogy sokkal rövidebb lett, de nem értem hogyan.
Egyébként ennél a verziónál nem lehet gond, ha egy textboxot nem hotkey regisztrálásra akarok hasznáni, hanem szöveg mezőnek? -
Bumbi0
csendes tag
Ez így miért nem akar működni? Lefordul, csak nem csinál semmit:
private void textBox_MouseDown(object sender, MouseEventArgs e)
{
TextBox textBox1 = sender as TextBox;
textBox1.Text = "";
textBox1.BackColor = SystemColors.Window;
}Viszont, ha mindegyikre egyesével hivatkozom, akkor működik.
pl.:private void textBoxLow_MouseDown(object sender, MouseEventArgs e)
{
if (low != null)
{
low.Dispose();
}
textBoxLowt.Text = "";
textBoxLow.BackColor = SystemColors.Window; -
Bumbi0
csendes tag
Hozzá akartam addni a HotkeyManager.cs fájlt a projekthez, de amikor futtatni akarom, akkor egy ilyen hibaüzenetet kapok:
Error 1 The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?) D:\.projects\TS\TS\HotKeyManager.cs 4 14 TS
Ez mitől lehet?
-
Bumbi0
csendes tag
Köszi, igaz erre magamtól is rájöhettem volna.
Azt szeretném még kérdezni, hogy az új módszerrel meg lehet oldani, hogy ha rákattintok bármelyik textBox-ra akkor törölje a Hotkey-t.
Eddig így csináltam, de most már ugye ez nem működik:private void textBoxLow_MouseDown(object sender, MouseEventArgs e)
{
if (low != null)
{
low.Dispose();
textBoxLow.Text = "";
textBoxLow.BackColor = SystemColors.Window;
}}
És még valami. Azt hogy kell megoldani, hogy az egér billentyűit is be lehessen állítani Hotkeynek?
Előre is köszönöm a segítséget!
-
Bumbi0
csendes tag
Hogyan tudom megvalósítani, hogy ha az egeret egy külső program/window fölé viszem, akkor annak a programnak megtudjam a tulajdonságait? Jelen esetben a méreteire lennék kíváncsi, mint a magasság és szélesség.
Igazából egy programon belül szeretnék egy gombra vagy checkboxra egér kattintást küldeni.
Melyik a jobb megoldás, ha minden alkalommal nézem az ablak méretét és abból számolom a gomb helyét pixelben és oda kattintok, vagy az ablakon belül lehet kifejezetten a gombra hivatkozni pl handle-vel?Előre is köszönöm!
-
Bumbi0
csendes tag
válasz ArchElf #1153 üzenetére
Meg viszont, újabb gondom van, amit sehogy nem tudok megoldani és a Google sem segített és más fórumok sem.
Egy textboxhoz szeretnék adatot küldeni, de a WM_SETTEXT nem felüírja azt, hanem hozzáfűzi és a WM_CLEAR nem hajlandó kitörölni a tartalmát.A másik, hogy SendMessage-el és Post Message-el is próbáltam egér kattintást küldeni egy window-n lévő gombra, viszont nem kattint rá. Paintbe megnéztem és ott viszont minden gond nélkül kattint. Sajnos a gombnak nem elérhető a handle-je Spy++-al így arra nem tudok hivatkozni csak a formon lévő koordinátára. A SetCursor és Mouse_event párosítás nem jó, mert gyakran elő fordul. hogy a gomb takarásban van más program által, ezért a formra hivatkozok jelenleg.
Előre is köszi a segítséget!
Egyébként valóban többet kellett volna a Google-ben keresnem
-
Bumbi0
csendes tag
Programot kell írnom, ami folyamatosan figyeli egy alkalmazás processeit és egy stringet keres az egész memórai területén, amit ezek a processek küldenek a memóráiba. Ha megvan a string, akkor meg kell nézni, hogy a memóra melyik címén található és attól a címtől kezdve kiolvasni az egész stringet/sor/üzenetet, mert ez a keresett string az elfogni kívánt üzenetek kezdő szava.
És ezt mindannyiszor meg kell csinálni loopolva, ahányszor a program vagy proccessek hozzá akarnak férni a memóriához.De az a baj, hogy lövésem sincs hogy kezdjek neki.
Előre is köszönöm a segítséget!
-
Bumbi0
csendes tag
-
Bumbi0
csendes tag
válasz ArchElf #1161 üzenetére
Úgy néz ki elakadtam!
Ennek http://www.codeproject.com/KB/threads/winspy.aspx és a fentebb beszúrt linkeknek a segitségével próbálom megoldani, hogy más program memóriájában tudjak keresni.
A most linkelt linken a 3. módszer próbálom megvcalósitani, a kód injektálást a program memóriájába. Ott egy ilyen összegzés látható:
Now, we can summarize this technique in the following steps:
1, Retrieve a HANDLE to the remote process (OpenProces).
2, Allocate memory in the remote process's address space for injected data (VirtualAllocEx).3, Write a copy of the initialised INJDATA structure to the allocated memory (WriteProcessMemory).
4, Allocate memory in the remote process's address space for injected code.
5, Write a copy of ThreadFunc to the allocated memory.
6, Start the remote copy of ThreadFunc via CreateRemoteThread.
7, Wait until the remote thread terminates (WaitForSingleObject).
8, Retrieve the result from the remote process (ReadProcessMemory or GetExitCodeThread).
9, Free the memory allocated in Steps #2 and #4 (VirtualFreeEx).
10, Close the handles retrieved in Steps #6 and #1 (CloseHandle).Elvileg az első kettőt megcsináltam, de nem értem hogy milyen kódot kéne bejuttatnom a process memóriájába!
Az előző hozzászólásban emlitett linkenhez (http://www.codeproject.com/KB/threads/MDumpAll.aspx) hasonló dolog kellene, hogy csak simán a Process memóriában stringet keresni, az egész C-ben van megirva és nem sokat értek belőlle!
Sajnos nem tudom, hogy folytathatnám tovább. Azt nem értem, hogy a ProcDumpos linken nem is emlitenek DLL/kód injektálást és tud a memóriában olvasni, a másik módszernél akkor miért kell?
Előre is köszönöm szépen a segitségeteket!
Eddig igy néz ki a kód:
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, UInt32 dwProcessId);[Flags]
enum ProcessAccessFlags : uint
{
All = 0x001F0FFF,
Terminate = 0x00000001,
CreateThread = 0x00000002,
VMOperation = 0x00000008,
VMRead = 0x00000010,
VMWrite = 0x00000020,
DupHandle = 0x00000040,
SetInformation = 0x00000200,
QueryInformation = 0x00000400,
Synchronize = 0x00100000
}[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, UInt32 dwSize, AllocationType flAllocationType, MemoryProtection flProtect);[Flags]
public enum AllocationType : uint
{
Commit = 0x1000,
Reserve = 0x2000,
Decommit = 0x4000,
Release = 0x8000,
Reset = 0x80000,
Physical = 0x400000,
TopDown = 0x100000,
WriteWatch = 0x200000,
LargePages = 0x20000000
}[Flags]
public enum MemoryProtection : uint
{
Execute = 0x10,
ExecuteRead = 0x20,
ExecuteReadWrite = 0x40,
ExecuteWriteCopy = 0x80,
NoAccess = 0x01,
ReadOnly = 0x02,
ReadWrite = 0x04,
WriteCopy = 0x08,
GuardModifierflag = 0x100,
NoCacheModifierflag = 0x200,
WriteCombineModifierflag = 0x400
}void str_Hotkey()
{
IntPtr hwnd, processHandle, remoteBuffer;
uint threadID, procID = 0;
const uint bufferSize = 1024;hwnd = GetWindowUnderCursor(); // Window handle-jének az átadása
GetWindowThreadProcessId(hwnd, out procID); // Window handle-ből ProcessID-nek a visszakapása
processHandle = OpenProcess(ProcessAccessFlags.All, true, procID); // Elvileg a process megynitása
remoteBuffer = VirtualAllocEx(processHandle, IntPtr.Zero, bufferSize, AllocationType.Commit, MemoryProtection.ExecuteWriteCopy); // Elvileg a process memóriájában foglal le memóriát a kódnak.}
-
Bumbi0
csendes tag
Hogyan tudom megincsálni, hogy amelyik ablak fölé viszem az egeret, annak a széleit körbe rajzolja egy vonallal.
Ilyenkor nem az ablak belsejére a gondolok, hanem a bordáira a device context-re. Egy olyan megoldásra lenne szükségem, ami működik Win 7 alatt is.
Eddig egy ilyenem van, de valamiért nem akar működni Win 7 alatt, viszont XP alatt meg igen.IntPtr hwnd = GetWindowUnderCursor();
IntPtr hDC = Win32Api.GetWindowDC(hwnd);
Win32Api.Rect rc = new Win32Api.Rect();
Win32Api.GetWindowRect(hwnd, ref rc);
using (Pen pen = new Pen(Color.Red, 3))
{
using (Graphics g = Graphics.FromHdc(hDC))
{
g.DrawRectangle(pen, 0, 0, rc.Width, rc.Height); //g.DrawRectangle(pen, 9, 30, rc2.Width - 19, rc2.Height - 40);
}
}
//Win32Api.ReleaseDC(hwnd, hDC);Ahogy látszik próbáltam, nem a device contextre rajzolni, hanem a client arenába ezért beljebb vettem az értékeket és oda simán bele rajzol. Viszont ha a device contextre, akarom, hogy rajzolja ki a vonalakat, akkor nem hajlandó megcsinálni, minhta alá rajzol vagy rá se rajzolná nem tudom.
Próbáltam RelesaeDC-vel és nélkül is, de egyik se segített.
Nagyon örülnék egy kis segítségnek mert nem igazán tudok tovább jutni és fontos lenne!
Előre is köszönöm szépen!
-
Bumbi0
csendes tag
Ha bepipálom a compatibilitynál, hogy "Disable Desktop Composition", akkor megcsinálja, tehát körbe rajzolja az egész ablakot!
Hogy tudom megoldani, hogy ne kelljen Leállítani a Desktop Composition-t?
-
Bumbi0
csendes tag
DwmSetWindowAttribute a megoldás, ennek a beálltásában tud valaki segiteni?
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!