Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako windowsu da kažem "klikni"

[es] :: .NET :: Kako windowsu da kažem "klikni"

[ Pregleda: 3853 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.34.eunet.yu.

Sajt: www.articles411.com


+8 Profil

icon Kako windowsu da kažem "klikni"14.08.2007. u 17:59 - pre 203 meseci
Pozdrav svima.

Levi taster miša, kad se dva puta stisne, pokreće program/šta_već na čijoj se ikonici nalazi kursor. Mene interesuje kako da omogućim iz koda da se inicira taj click/double click/right_click događaj. OK, mogu da podignem OnClick event za neku kontrolu u mojem programu ali kako to da se izvede na nivou celog windowsa? Recimo da kursor stoji iznad "start" dugmeta i ja hoću u tom trenutku windowsu da "kažem": "sad klikni"... :)


I još jedno pitanje - kako da dobijem memorijsku veličinu neke klase?
 
Odgovor na temu

mirobor
Nederland

Član broj: 15124
Poruke: 43
*.cable.quicknet.nl.



Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 10:30 - pre 203 meseci
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'ovdje dolazi tvoja procedura
End Sub

Private Sub Button1_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseHover
'ako stanes misom iznad dugmeta click event startuje
Button1_Click(sender, e)

End Sub


Jesi li mislio na nesto ovako?
 
Odgovor na temu

mirobor
Nederland

Član broj: 15124
Poruke: 43
*.cable.quicknet.nl.



Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 10:32 - pre 203 meseci
U C#

private void Button1_Click(object sender, System.EventArgs e) {
// ovdje dolazi tvoja procedura
}

private void Button1_MouseHover(object sender, System.EventArgs e) {
// ako stanes misom iznad dugmeta click event startuje
Button1_Click(sender, e);
}

 
Odgovor na temu

erkan
Sarajevo

Član broj: 12339
Poruke: 267
*.team.ba.

ICQ: 238530669


Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 10:42 - pre 203 meseci
@mirobor

Nije covjek mislio na to ocigledno.
Treba mu akcija klika na 'nesto' generalno u windowsu
a ne na kontrolu u okviru forme
Samo se budala saplice na kamen iza sebe.
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 11:01 - pre 203 meseci
Hm, za klikove i slično pretpostavljam da moraš pogledati WinAPI.
Kod veličine klase pretpostavljam da si mislio na veličinu objekta? Njegova veličina je skup member-a i drugih objekata koji se inicijalizuju. Trebalo bi da radi funkcija sizeof - za detalje progooglaj... - možda http://msdn2.microsoft.com/en-us/library/y3ybkfb3.aspx ili slično
 
Odgovor na temu

mirobor
Nederland

Član broj: 15124
Poruke: 43
*.cable.quicknet.nl.



Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 12:13 - pre 203 meseci
Citat:
Nije covjek mislio na to ocigledno.
Treba mu akcija klika na 'nesto' generalno u windowsu
a ne na kontrolu u okviru forme


To bi bio pravi rshum, ako to moze vidim svrhu samo za pravljenje nekakvog virusa.
Start > Run > cmd > format c: hehe
 
Odgovor na temu

Shevchenko
Nikola Vasiljevski

Član broj: 37756
Poruke: 218
212.200.70.*

Sajt: www.vasiljevski.com


+2 Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 13:49 - pre 203 meseci
Jedini nacin da ovo izvedes je pomocu WinAPI-a. Jedna od ideja, naglasavam ideja, je da posaljes poruku dvoklika kernelu. Bio bih konkretniji ali davno sam radio sa ovim pa ne mogu da se setim detalja. Inace kosricenje WinAPI-a je vec Unmanaged kod, a cisto .NET resenje ne znam da li postoji :)
Shoot for the moon. Even if you miss, you'll land among the stars.
Les Brown
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
*.adsl.static.sezampro.yu.

Sajt: www.mika.rs


+6 Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 13:52 - pre 203 meseci
Iz C# neces moci skoro pa nista, moraces da radis invoke API funkcija. Secam se da se to moglo uraditi na dva nacina, jedan je ka vidljivim prozorima (koji nisu zaklonjeni) a drugi je prema bilo kojem prozoru. U oba slucaja na kraju pozivas PostMessage/SendMessage nad dobijenim hendlom prozora.

U prvom pristupu koristis f-ju WindowFromPoint, koja ce ti vratiti hendl na prozor kome pripadaju koordinate. Ponekad je to dovoljno, npr. simulacija klika na WinAmp-ov play, pod uslovom da je bash na tim koordinatama play dugme i da nije ispod nekog drugog prozora, ali za neke druge slucajave nije, zaklonjen ili minimizovan prozor. U tom slucaju koristis drugi pristup, a to je da nadjes prozor po nekom kriterijumu - imenu, imenu klase, hendlu instance, ID-u child kontrole ... ili kombinacijom. Pretragu pocinjes od desktop-a, sa GetDesktop() funkcijom dobijas desktopov HWND, a zatim pretrazujes sve prozore koji mu pripadaju preko EnumChildWindows. Uzmi u obzir da svaki od dobijenih prozora ima svoje child prozore.

Sve ovo mi izgleda da je veoma tesko uraditi u C#. Sta hoces da napravis ?
Citat:
I još jedno pitanje - kako da dobijem memorijsku veličinu neke klase?

Ne mozes dobiti velicinu klase, ali mozes dobiti velicinu instance klase preko interop-a kao sto je Maskvel rekao ili da tu klasu napravis da je serijabilna i serijalizujes objekat u memory stream i onda vidis koliki je.
Citat:
To bi bio pravi rshum, ako to moze vidim svrhu samo za pravljenje nekakvog virusa

Ako se 'virus' vec pokrenuo pod korisnikovim security kontekstom, nema potrebe da zonglira sa prozorima kada moze direktno da pokrene neki proces. Simulacija klika misem je meni bila jedino korisna kada sam pravio daljinski upravljac preko serijskog porta za upravljanje WinAmp-om i MediaPlayer-om. Samo, ja sam hardkodovao imena i klase WinAmp-a i MediaPlayer-a, kao i njenih prozora dugmadi za play/pause/stop i nije moglo da se radi sa vise instanci jedne aplikacije.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.212.eunet.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 14:22 - pre 203 meseci
@mirobor, @mirobor
Bah, lako je to Baš kao što reče @erkan ...


Što se tiče veličine... Nisam stigao da odogovorim da sam to "rešio". Naime, kao što @maksvel reče, može se koristiti Marshal.SizeOf ali to samo za strukture i druge unmanaged objekte. Ima takođe i operator sizeof ali i za njega isto važi. A meni je bilo potrebna veličina managed objekta. Evo kako sam to uradio( mada zahteva da objekat bude sa atributom Serializable):

Code:

BinaryFormatter bFormatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream();

bFormatter.Serialize(ms, myObject);

MessageBox.Show(ms.Length.ToString());



E sad, to za "klik" windowsu. @Shevchenko, nije problem što se mora koristiti WinAPI. A gde bih mogao da pogledam kako se šalje ta poruka kernelu? Ima ovaj sajt: http://custom.programming-in.net tu su prikazane(valjda) sve WinAPI f-je i kao se pozivaju iz neta. Ali ja ne znam kakvu funkciju da tražim


@mirobor
Nije bre za virus Poenta je da sa svog kompa mogu da uradim šta god ja hoću na nekom drugom kompu - recimo da se njegov kursor kreće onako kako ja pomeram mog miša i to sam uradio i još što šta. Ali kad ja kliknem treba i na tom remote računaru da se klikne. To je program koji treba da omogući da tvom "glupom net drugaru" nešto "na udaljeno" popraviš na kompu. Znam da ima takvih programa i uz sam win, ali poenta je da ja to uradim i naučim nešto

------------------------------
DOPUNA:
@dusty
Nevideh tvoju poruku.
Da, to za memoriju sam uradio baš na taj način
A što se tiče "klitanja", videću nešto da uradim na ovaj način što si ti rekao.


Hvala vam...

[Ovu poruku je menjao toxi_programer dana 15.08.2007. u 15:32 GMT+1]
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 15:47 - pre 203 meseci
Postoji Win32 API koji sluzi upravo za to, ali se ne secam dobro kako se zove, nesto kao SendMouseEvent ili tako nesto. (ima vise njih kojima se moze postici isti efekat)
 
Odgovor na temu

mirobor
Nederland

Član broj: 15124
Poruke: 43
*.cable.quicknet.nl.



Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 16:07 - pre 203 meseci
Citat:
using System;
using System.Runtime.InteropServices;
...


// usingAPI for mouse governing and other possibilities




enum Messages{WM_LBUTTONDOWN = 0x0201, WM_LBUTTONUP = 0x0202};
const int MK_LBUTTON = 0x0001;
[DllImport("User32.dll")]
static extern int SendMessage(IntPtr hWnd, Messages uMsg, int wParam, IntPtr lParam);


[DllImport("User32.dll")]
static extern void mouse_event(MouseFlags dwFlags, int dx, int dy, int dwData, UIntPtr dwExtraInfo);

//as a matter of convenience, use create enumeration with necessary flags (constants), which define actions of mouse:

[Flags]
enum MouseFlags
{
Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008,
RightUp = 0x0010, Absolute = 0x8000};
/// <summary>
///Click In some place of screen
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
private void TestMouse(int x, int y)
{

mouse_event(MouseFlags.Absolute | MouseFlags.Move, x, y, 0, UIntPtr.Zero);
mouse_event(MouseFlags.Absolute | MouseFlags.LeftDown , x, y, 0, UIntPtr.Zero);
mouse_event(MouseFlags.Absolute | MouseFlags.LeftUp, x, y, 0, UIntPtr.Zero);

}






Vidi imas li sta koristi od ovoga, ako sam opet promasio j****a izvini
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.137.eunet.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Kako windowsu da kažem "klikni"15.08.2007. u 17:01 - pre 203 meseci
Eto rešenja! I to iz Holandije :)

Care, upravo to radi ono što je potrebno. Vrh!

Hvala puno.
 
Odgovor na temu

[es] :: .NET :: Kako windowsu da kažem "klikni"

[ Pregleda: 3853 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.