Forum » Programiranje » aplikacija za nadzor drugih oken
aplikacija za nadzor drugih oken
miha22 ::
Pozdravljeni,
danes sem se spomnil da bi lahko napisal program, ki bi mi omogočal da prevzamem kontrolo nad nekim drugim oknom ter mu recimo določim lastnost always on top. Problem je v tem da ne vem če je to dovoljeno s strani operacijskega sistema. Torej zanima me če bo operacijski sistem dovolil da spremenim lastnost drugega programa in mu določim nove vrednosti (torej da mu posežem v naslovni prostor).
Mislim da je odgovor na moje vprašanje negativen... ampak ker se lahko tudi motim sedaj sprašujem vas. Torej kaj se vam zdi?
danes sem se spomnil da bi lahko napisal program, ki bi mi omogočal da prevzamem kontrolo nad nekim drugim oknom ter mu recimo določim lastnost always on top. Problem je v tem da ne vem če je to dovoljeno s strani operacijskega sistema. Torej zanima me če bo operacijski sistem dovolil da spremenim lastnost drugega programa in mu določim nove vrednosti (torej da mu posežem v naslovni prostor).
Mislim da je odgovor na moje vprašanje negativen... ampak ker se lahko tudi motim sedaj sprašujem vas. Torej kaj se vam zdi?
StratOS ::
Seveda se da, pa tudi programsko, z low level API-ji se dajo spremeniti tudi vsi kontrolniki deli programa in vse ostale runtime nastavitve.
"Multitasking - ability to f##k up several things at once."
"It works better if you plug it in."
"The one who is digging the hole for the other to fall in is allready in it."
"It works better if you plug it in."
"The one who is digging the hole for the other to fall in is allready in it."
miha22 ::
Hvala za odgovore, se bom lotil pisati stvari .
Napisati sem mislil točno tak program kot je cmdow->edino s to razliko,da bi imel grafični vmesnik (torej bi bil podoben kot kak winspy).
Napisati sem mislil točno tak program kot je cmdow->edino s to razliko,da bi imel grafični vmesnik (torej bi bil podoben kot kak winspy).
yeti ::
Low level apiji.. he he
Ce me spomin ne vara, SetWindowLong, GetWindowLong, preko GetWindowLong dobis trenutno nastavitev uokna, oraj jo z flagom ki bi ga rad spremenil in zadevo napiši nazaj z SetWindowLong. Nekaj vrstic kode, recimo DVE!
Sicer je pa tega po netu ze toliko spisanega, da se ze drek dela, mogoce ti bo sicer luškana vaja, samo za gui pa res ne bi zgubljal casa...
Za iskanje oken (ne vem kako si si zamislil, ampak tole bo najbolj preprosto) imas;
BOOL EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam);
hWndParent daš null (desktop) in za vsako okno (desktop je "base" parent vsem ostalim oknom) bo poklican callback lpenumfunc (static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam); ).
Na se tole, ti bos uporabljal WS_EX_TOPMOST:
#define WS_OVERLAPPED 0x00000000L
#define WS_POPUP 0x80000000L
#define WS_CHILD 0x40000000L
#define WS_MINIMIZE 0x20000000L
#define WS_VISIBLE 0x10000000L
#define WS_DISABLED 0x08000000L
#define WS_CLIPSIBLINGS 0x04000000L
#define WS_CLIPCHILDREN 0x02000000L
#define WS_MAXIMIZE 0x01000000L
#define WS_CAPTION 0x00C00000L /* WS_BORDER | WS_DLGFRAME */
#define WS_BORDER 0x00800000L
#define WS_DLGFRAME 0x00400000L
#define WS_VSCROLL 0x00200000L
#define WS_HSCROLL 0x00100000L
#define WS_SYSMENU 0x00080000L
#define WS_THICKFRAME 0x00040000L
#define WS_GROUP 0x00020000L
#define WS_TABSTOP 0x00010000L
#define WS_MINIMIZEBOX 0x00020000L
#define WS_MAXIMIZEBOX 0x00010000L
#define WS_TILED WS_OVERLAPPED
#define WS_ICONIC WS_MINIMIZE
#define WS_SIZEBOX WS_THICKFRAME
#define WS_TILEDWINDOW WS_OVERLAPPEDWINDOW
/*
* Common Window Styles
*/
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
#define WS_POPUPWINDOW (WS_POPUP | \
WS_BORDER | \
WS_SYSMENU)
#define WS_CHILDWINDOW (WS_CHILD)
/*
* Extended Window Styles
*/
#define WS_EX_DLGMODALFRAME 0x00000001L
#define WS_EX_NOPARENTNOTIFY 0x00000004L
#define WS_EX_TOPMOST 0x00000008L
#define WS_EX_ACCEPTFILES 0x00000010L
#define WS_EX_TRANSPARENT 0x00000020L
#if(WINVER >= 0x0400)
#define WS_EX_MDICHILD 0x00000040L
#define WS_EX_TOOLWINDOW 0x00000080L
#define WS_EX_WINDOWEDGE 0x00000100L
#define WS_EX_CLIENTEDGE 0x00000200L
#define WS_EX_CONTEXTHELP 0x00000400L
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0400)
#define WS_EX_RIGHT 0x00001000L
#define WS_EX_LEFT 0x00000000L
#define WS_EX_RTLREADING 0x00002000L
#define WS_EX_LTRREADING 0x00000000L
#define WS_EX_LEFTSCROLLBAR 0x00004000L
#define WS_EX_RIGHTSCROLLBAR 0x00000000L
#define WS_EX_CONTROLPARENT 0x00010000L
#define WS_EX_STATICEDGE 0x00020000L
#define WS_EX_APPWINDOW 0x00040000L
#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
#define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
Ce me spomin ne vara, SetWindowLong, GetWindowLong, preko GetWindowLong dobis trenutno nastavitev uokna, oraj jo z flagom ki bi ga rad spremenil in zadevo napiši nazaj z SetWindowLong. Nekaj vrstic kode, recimo DVE!
Sicer je pa tega po netu ze toliko spisanega, da se ze drek dela, mogoce ti bo sicer luškana vaja, samo za gui pa res ne bi zgubljal casa...
Za iskanje oken (ne vem kako si si zamislil, ampak tole bo najbolj preprosto) imas;
BOOL EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam);
hWndParent daš null (desktop) in za vsako okno (desktop je "base" parent vsem ostalim oknom) bo poklican callback lpenumfunc (static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam); ).
Na se tole, ti bos uporabljal WS_EX_TOPMOST:
#define WS_OVERLAPPED 0x00000000L
#define WS_POPUP 0x80000000L
#define WS_CHILD 0x40000000L
#define WS_MINIMIZE 0x20000000L
#define WS_VISIBLE 0x10000000L
#define WS_DISABLED 0x08000000L
#define WS_CLIPSIBLINGS 0x04000000L
#define WS_CLIPCHILDREN 0x02000000L
#define WS_MAXIMIZE 0x01000000L
#define WS_CAPTION 0x00C00000L /* WS_BORDER | WS_DLGFRAME */
#define WS_BORDER 0x00800000L
#define WS_DLGFRAME 0x00400000L
#define WS_VSCROLL 0x00200000L
#define WS_HSCROLL 0x00100000L
#define WS_SYSMENU 0x00080000L
#define WS_THICKFRAME 0x00040000L
#define WS_GROUP 0x00020000L
#define WS_TABSTOP 0x00010000L
#define WS_MINIMIZEBOX 0x00020000L
#define WS_MAXIMIZEBOX 0x00010000L
#define WS_TILED WS_OVERLAPPED
#define WS_ICONIC WS_MINIMIZE
#define WS_SIZEBOX WS_THICKFRAME
#define WS_TILEDWINDOW WS_OVERLAPPEDWINDOW
/*
* Common Window Styles
*/
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
#define WS_POPUPWINDOW (WS_POPUP | \
WS_BORDER | \
WS_SYSMENU)
#define WS_CHILDWINDOW (WS_CHILD)
/*
* Extended Window Styles
*/
#define WS_EX_DLGMODALFRAME 0x00000001L
#define WS_EX_NOPARENTNOTIFY 0x00000004L
#define WS_EX_TOPMOST 0x00000008L
#define WS_EX_ACCEPTFILES 0x00000010L
#define WS_EX_TRANSPARENT 0x00000020L
#if(WINVER >= 0x0400)
#define WS_EX_MDICHILD 0x00000040L
#define WS_EX_TOOLWINDOW 0x00000080L
#define WS_EX_WINDOWEDGE 0x00000100L
#define WS_EX_CLIENTEDGE 0x00000200L
#define WS_EX_CONTEXTHELP 0x00000400L
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0400)
#define WS_EX_RIGHT 0x00001000L
#define WS_EX_LEFT 0x00000000L
#define WS_EX_RTLREADING 0x00002000L
#define WS_EX_LTRREADING 0x00000000L
#define WS_EX_LEFTSCROLLBAR 0x00004000L
#define WS_EX_RIGHTSCROLLBAR 0x00000000L
#define WS_EX_CONTROLPARENT 0x00010000L
#define WS_EX_STATICEDGE 0x00020000L
#define WS_EX_APPWINDOW 0x00040000L
#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
#define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
Zgodovina sprememb…
- spremenil: yeti ()
yeti ::
Uf, pozabil... v callbacku bos dobil child hwndje hwndja ki si ga dal v funkcijo EnumChildWindows. Zatorej bos moral od tam klicati naprej EnumChildWindows za childe ki jih dobis.
StratOS ::
Ja za okne, to je simple, potem pa še vse gradnike na formah ...
Tudi na teh lahko programsko spreminjaš nastavitve po zagonu programa.
Tudi to se da.
Je pa res, da je takšnih primerov na netu manj kot osnovnih, ki se le ukvarjajo z pozicijo in lastnostimi ter oblikami okna, najbolj tipične so seveda Form Caption ipd ...
Za procese, ki so okenski lahko najpreprosteje uporabljaš SetWindow... API klice k že predhodno določenimi ročicami forme oz. kakršnih koli gradnikov na njej. oz. procesih.
Tudi na teh lahko programsko spreminjaš nastavitve po zagonu programa.
Tudi to se da.
Je pa res, da je takšnih primerov na netu manj kot osnovnih, ki se le ukvarjajo z pozicijo in lastnostimi ter oblikami okna, najbolj tipične so seveda Form Caption ipd ...
Za procese, ki so okenski lahko najpreprosteje uporabljaš SetWindow... API klice k že predhodno določenimi ročicami forme oz. kakršnih koli gradnikov na njej. oz. procesih.
"Multitasking - ability to f##k up several things at once."
"It works better if you plug it in."
"The one who is digging the hole for the other to fall in is allready in it."
"It works better if you plug it in."
"The one who is digging the hole for the other to fall in is allready in it."
yeti ::
"Ja za okne, to je simple, potem pa še vse gradnike na formah ..."
... ki tako ali tako dedujejo stile za svojimi parenti. Naj te razsvetlim, tudi "gradniki" (kje si našel ta nagnusen izraz?) so okna.
"SetWindow..." Long
... ki tako ali tako dedujejo stile za svojimi parenti. Naj te razsvetlim, tudi "gradniki" (kje si našel ta nagnusen izraz?) so okna.
"SetWindow..." Long
Zgodovina sprememb…
- spremenil: yeti ()
StratOS ::
Gradniki, objekti, komponente, kontrolniki,ActiveX/Com komponente, jaz bi tem z skupnim izrazom rekel gradniki najsi bo aplikacije kot celote oz. tvojih parent-child relacij.
Jaz sem samo hotel povedati, razlike med ne-oknastimi programi in oknastimi programi (windowed in non-windowed), torej forma (windowed - oknastih) kot del zase vsebuje ostale komponente,gradnike,objekte kontrolnike oz. ostale vstavljive dele objektnega dela tega dela. Hotel sem povedati, da lahko tudi tem gradnikom spreminjaš runtime nastavitve in ne samo parent delu oz. nosilcu tega - torej npr. formi sami po sebi.
Glede gnusnosti izraza bi rekel, da sem izbral dokaj primeren izraz.
Gradniki torej niso nujno okna ( Če seveda ne govorimo o GUI vmesnikih gradnika ).
Jaz sem samo hotel povedati, razlike med ne-oknastimi programi in oknastimi programi (windowed in non-windowed), torej forma (windowed - oknastih) kot del zase vsebuje ostale komponente,gradnike,objekte kontrolnike oz. ostale vstavljive dele objektnega dela tega dela. Hotel sem povedati, da lahko tudi tem gradnikom spreminjaš runtime nastavitve in ne samo parent delu oz. nosilcu tega - torej npr. formi sami po sebi.
Glede gnusnosti izraza bi rekel, da sem izbral dokaj primeren izraz.
Gradniki torej niso nujno okna ( Če seveda ne govorimo o GUI vmesnikih gradnika ).
"Multitasking - ability to f##k up several things at once."
"It works better if you plug it in."
"The one who is digging the hole for the other to fall in is allready in it."
"It works better if you plug it in."
"The one who is digging the hole for the other to fall in is allready in it."
Zgodovina sprememb…
- spremenila: StratOS ()
yeti ::
Izraz je pa grozen. Se bom prej privadil na zgoščenko.
Zgodovina sprememb…
- spremenil: yeti ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] stdafx.h, precompiled headersOddelek: Programiranje | 1117 (985) | Vesoljc |
» | [C++] preprosto risanjeOddelek: Programiranje | 1660 (1537) | popec |
» | [Win32 API]Popup menu v taskbaruOddelek: Programiranje | 939 (896) | 64202 |
» | [C] parse errorOddelek: Programiranje | 1019 (954) | ql000 |
» | Win32 API in C++Oddelek: Programiranje | 1560 (1431) | Monster |