[ coyoteugly @ 07.10.2002. 13:47 ] @
Pravim aplikaciju koja je smestena u systray-u, tako da se ne prikazuje po njenom prvom startovanju. Situacija je sledeca: zelim da, kad neko pritisne taster F2, na primer, ta aplikacija postane vidljiva. Problem je u tome sto ne znam kako da presretnem na globalnom nivou pritisnut taster. Znaci, korisnik radi u nekom drugom programu, ili se jednostavno nalazi na desktop-u, i zeli da pokrene program pritiskom na neku kombinaciju tastera. Sad, kako je moguce presresti te tastere?

Najvaznije od svega jeste da ova kombinacija radi na win2k/xp sistemima.
[ -zombie- @ 08.10.2002. 03:57 ] @
ali ljudi, jer neko od vas cuo za pretrazivace na internetu? jel neko cuo za google? samo sam pitao google: delphi hotkeys global

i kada sam video rezultate i prvu stranicu, shvatio sam da se ne zovu "globalni" hotkey-ovi, vec "sistemski", pa sam samo ono odozgo promeni i ponovo pitao google: delphi hotkeys system

ovo bi trebalo da ide faq na ovom forumu (ne resenje za tastere, vec google)..
[ Zekica @ 27.10.2002. 21:48 ] @
Pogledaj u Win32 SDK Help-u Funkcije:
RegisterHotkey i UnRegisterHotkey

Nisam ih mnogo skoro koristio, ali bi trebalo da ti odrade posao.
[ explorer0 @ 29.10.2002. 01:14 ] @
to zombie / DOG >
Sta je tebi covece ?
Pa covek lepo pita (hoce da otvori diskusiju o "delphi hotkeys global" pardon "delphi hotkeys system") i ako neko zna neka kaze nesto pa cemo razmenuti nasa iskustva ,ipak je ovo FORUM a njegova namena je DISKUSIJA , a ne upucivanje na web.
[ coyoteugly @ 29.10.2002. 17:37 ] @
sve cestitke explorer0-u
[ -zombie- @ 30.10.2002. 01:46 ] @
dobro, izvinjavam se svima koje sam mozda uvredio ili bilo na koji drugi nacin naljutio...

priznajem da sam mozda preterao. bio sam malo iznerviran, mada verovatno nisam dobro objasnio razlog. poenta FORUMA jesu DISKUSIJE o problemima.

medjutim, forum ne treba da sluzi kao prvo mesto gde ce ljudi da postavljaju pitanja. (i ocekuju resenja) na prvom mestu bi trebao da bude RTFM, pa onda razne knjige i sajtovi na srodne teme. tek posle toga dolazi pitanje na forumu, ali i to posle pregledanja (ili bar pretrazivanja) foruma da se ne bi ista pitanja ponavljala. ne kazem da je to bio slucaj ovde (ne secam se ovakve teme) ali ste i sami svesni koliko je to cest slucaj...

dakle, da rezimiram, tek nakon upoznavanja sa problemom, i probanja i nailazenja na problem, on bi trebalo da se iznese na forum, radi diskusije...

ne znam. mozda gresim, ali to je moje misljenje, i tako ja to radim....

josh jedared se izvinjavam svima, i obecavam da necu nikad vise!
[ explorer0 @ 30.10.2002. 07:59 ] @
U redu,prihvacamo izvinenje ;)
[ coyoteugly @ 30.10.2002. 09:44 ] @
OK zombie / DDG... dosta izvinjavanja

Ajde ako mozes da mi odgovoris na sledece pitanje. Hvala ti usput sto si me uputio na pravo mesto i mogu da kazem da sam delimicno pronasao ono sto sam trazio. Sve sto sam nasao radi odlicno, pa barem dok je glavni obrazac vidljiv, ili dok god ima svoje dugme u taskbar-u. Problem je (a njegovo resenje ne mogu nigde naci) sledeci: posto razvijam aplikaciju koja se nalazi u systray-u (znaci nijednu od gore navedenih osobina ne poseduje), i pritiskom na neki taster ili kombinaciju tastera ta aplikacija treba da "iskoci" i tray-a i prikaze se na ekranu. U cemu je problem sa kodom koji sam pronasao? Jedino sto mi on vraca tom prilikom jeste handle na tray (citav okvir oko sata i sve ostale ikonice programa). Na koji nacin (i kako) mogu da uzmem handle samo mog programa, i nakon toga, naravno radim sa njim sta zelim?
[ -zombie- @ 31.10.2002. 01:35 ] @
pazi ovako. nisam nikad ovo radio, pa ne mogu da govorim iz iskustva.

jesi li probao ono sto je zekica predlozio?

ovo sam ja nasao u dokumentaciji za RegisterHotkey():

Code:

The RegisterHotKey function defines a hot key for the current thread. 

BOOL RegisterHotKey(

    HWND hWnd,    // window to receive hot-key notification
    int id,    // identifier of hot key
    UINT fsModifiers,    // key-modifier flags
    UINT vk     // virtual-key code
   );    
 

Parameters

hWnd

Identifies the window that will receive WM_HOTKEY messages generated 
by the hot key. If this parameter is NULL, WM_HOTKEY messages are 
posted to the message queue of the calling thread and must be processed 
in the message loop. 


pazi sta bi ja tebi preporucio. probaj da prilikom startovanja programa napravish formu, makar to bila i dummy prazna forma, ali ocigledno mora da postoji. odmah je sakri i registruj hotkey sa ovom funkcijom (tako sto ces njen handle da prosledish ovoj funkciji).

(postoji caka da se forma sakrije, a da se ne pokazuje u task-baru. ako ovo ne znash, kazi, pa cu i to iscackati...)

ostalo bi trebalo da ti je jasno... ako nije, pitaj dalje...


inace, mozda bi mogao da probash i sa application.handle. mozda upali...

btw, nemam vremena sad, ali na www.torry.net (pa klikni na tips) ima najbolja kolekcija kratkih tip-ova na razne teme. ovakvu stvar bih prvo tamo potrazio...
[ coyoteugly @ 31.10.2002. 09:04 ] @
Vidim da se stvarno trudis, ali poenta je u tome da sam delphijev kreirani prozor kodom prepravio tako da ne sadrzi dugme u taskbar-u, i ujedno sam postavio svojstvo ShowMainForm na False. Isto tako, sakrio sam je u sys tray-u kako bi radila u pozadini...

Problem znaci kada pritisnem hotkey jeste da mi se kao svojstvo Handle (ma koji objekat da stavim) vraca sam objekat sys tray. Ako bi sad pritiskao taster Tab, prebacivao bi se izmedju svih ikona koje se nalaze u blizini sata. Sve bi to bilo OK da znam gde se nalazi ikonica mog programa, ali kako ce to znati ostali korisnici???

Sta me tacno zanima? Probao sam dosta koda koji se nalazi u Tips sekciji torry.ru sajta, ali nijedan od njih ne odgovara na moje pitanje. Veruj mi kad ti kazem, Google je premali pretrazivac za ovo pitanje... Pokusavam da iskopam nesto iz MSDN-a, ali ima previse suvisnih informacija.

Ako znas, ili bilo ko od clanova kako se dobija hnadle nad prozorom koji je smesten u tray-u (jos plus na Win2K/XP masini), bio bih zadovoljan. Mozda na 98-ici radi kako treba... ali ko to jos ima???
[ explorer0 @ 31.10.2002. 11:35 ] @
Kolko se ja razumem u windowse,to bi trebalo da ide ovako (teoretski):
Kad se neki dogadjaj desi (klick misa,pritsak na dugme na tastaturu...) onda windows salje te dogadjaje svim aplikacijama koji su momentalno u memoriju ,pa bilo da su oni u tray-u ili su sakriveni od korisnika,...
E sad sve sto treba je da ti prepoznas poruka koja tebe interesuje (pritisak F12) i soodvetno reagujes (popUP u tvom slucaju).Mislim da ti ne treba handle na taskbar ili bilo gde.
Jesam li u pravu ?
[ coyoteugly @ 31.10.2002. 13:16 ] @
To bi mozda bio slucaj u win9x sistemima. U 2000-ci i XP-u je to drugacije uradjeno. Citav sys tray se ponasao kao jedan objekat sa svojim clanovima. Problem je u tome sto ja ne znam kako da "doprem" do jednog clana, to jest, mog programa koji se nalazi u sys tray-u. Pazi... moja aplikacija se ne nalazi ni u jednom trenutku u listi aktivnih programa, ali je zato ima u listi procesa. Uradio sam ja kako mi svi predlazete, ali je problem sto dobijam fokus na sys tray, koji god da je hotkey. Nakon toga, moram da pritiskam Tab taster da bih presao na ikonicu mog programa, i vise od toga ne mogu. Ne znam da li si razumeo sta dobijam, ali to je to...

Znam neke programe, koji su ovo isto uradili, ali kod njih je situacija bila ta da se nalaze u Ctrl+Alt+Del listi aplikacija, sto kod mene nije slucaj.

Kako i sta dalje?
[ PhrozenShade @ 03.11.2002. 15:00 ] @
Jeeeee kakvi ste likovi,cekaj malo tebi treba znaci kad se pritisne neki od F-ova da ti otvori prozor a do tad on da bude skriven?

Pa evo ti code za to:
znaci stavis samo jedan timer i memo(privremeno - samo da b:byte):

procedure TForm1.Timer1Timer(Sender: TObject);
var
b: byte;
begin
asm
in al, $60
mov b, al
end;
if b=1 then beep;
memo1.lines.add(inttostr(b));
end;

i to niko nije znao da mu pokaze.
[ coyoteugly @ 04.11.2002. 08:33 ] @
fora je u tome da ce krajnji korisnik da postavi trazeni taster, a vec imam gotov kod koji proverava da li je selektovani taster vec preuzet od strane neke druge aplikacije...

da vas ne bih vise "mucio", prestacu da kukam i da se zarijem u MSDN 2003 izdanje :)
[ morlic @ 08.11.2002. 14:37 ] @
Ako sam dobro razumeo treba ti handle od tvoje aplikacije.

Da li si koristio Application.Handle? Ovo ti vraca handle od onog nevidljivog prozora ( ne od tvoje glavne forme ).

Ako ti treba od glavne forme to je onda GlavnaForma.Handle

Za HOTKEY ---------------------------------------------------------------------

Na glavnoj formi OnCreate metodi postavi
If not RegisterHotkey( Handle, 1, MOD_ALT or MOD_SHIFT, VK_F9 ) Then
ShowMessage('Neuspela operacija!');

Na OnClose sledece:

UnRegisterHotkey( Handle, 1 );

Dodaj poruku WM_HOTKEY u deklaraciji glavne forme:

private // form declaration
Procedure WMHotkey( Var msg: TWMHotkey );
message WM_HOTKEY;

Procedure TForm1.WMHotkey( Var msg: TWMHotkey );
Begin
If msg.hotkey = 1 Then Begin
If IsIconic( Application.Handle ) Then
Application.Restore;
BringToFront;
End;
End;

E sad, ovo zadnje treba menjati u skladu sa potrebama systray-a.

[ Zekica @ 14.11.2002. 08:18 ] @
Evo jedne veoma proste komponente za delphi, koju sam ja napravio, nadam se da ce vam pomoci, jer je neverovatno prosta za koriscenje:

Imate method-e Activate, Deactivate,
property-je Modifiers, VKCode i
event OnHotkey.

[ coyoteugly @ 14.11.2002. 13:50 ] @
Nisam se setio uopste za IsIconic metod... eh, ovo mi je skinulo mnogo dana posla...

Hvala puno...