HWND jako int – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

HWND jako int – C / C++ – Fórum – Programujte.comHWND jako int – C / C++ – Fórum – Programujte.com

 

LJ10240
Stálý člen
19. 6. 2010   #1
-
0
-

Ahoj, mám na vás dotaz:
Je tohle:

HWND hwnd;

hwnd=FindWindow("notepad", NULL);
int i_hwnd=(int)hwnd;
hwnd=(HWND)i_hwnd;
SendMessage(hwnd, WM_CLOSE, 0, 0);
stejné jako tohle:
HWND hwnd;

hwnd=FindWindow("notepad", NULL);
SendMessage(hwnd, WM_CLOSE, 0, 0);


a jestli je taky tohle stejné:
HWND hwnd;

hwnd=FindWindow("notepad", NULL);
char mem[100];
sprintf(mem, "%d", hwnd);
int i_hwnd=atoi(mem);
hwnd=(HWND)i_hwnd;
SendMessage(hwnd, WM_CLOSE, 0, 0);
jako tohle:
HWND hwnd;

hwnd=FindWindow("notepad", NULL);
SendMessage(hwnd, WM_CLOSE, 0, 0);


Pokud ne, tak jak by to mělo být. Jde mi o to, aby to bylo na 100% vždycky funkční.

Nahlásit jako SPAM
IP: 217.30.64.–
Jura
~ Anonymní uživatel
637 příspěvků
19. 6. 2010   #2
-
0
-

Čau,

když si uvědomíš, že HWND a jiné typy jsou ve skutečnosti jen ukazatele a co vlastně vůbec ukazatel je, tak do doby, co si kdekoliv a v jakékoliv formě budeš pamatovat adresu, kam ty původní ukazatele ukazovaly(a taky na co vlastně ukazovaly), tak výše zmíněné věci fungovat budou. Nicméně jediné správné použítí bych osobně viděl, jako většina ostatních, v podobě jáká se používá už léta.
Tedy ve stylu:

HWND hwnd; 

hwnd=FindWindow("notepad", NULL);
SendMessage(hwnd, WM_CLOSE, 0, 0);

Nahlásit jako SPAM
IP: 85.207.192.–
liborb
~ Redaktor
+18
Guru
19. 6. 2010   #3
-
0
-

HWND není ukazatel, ale handle (manipulátor). Definován je, pokud se nepletu, jako UINT. Takže s ním lze v podstatě dělat stejné operace jako s jakýmkoliv číslem. Všechny možnosti by tak měly fungovat.
Problém je ovšem v tom, a to trochu nakousnul Jura, že jaký bude mít okno HWND neovlivníš a při příštím spuštění bude s největší pravděpodobností jiné. Ale jeho platnost po dobu spuštění je zaručená.

Nahlásit jako SPAM
IP: 91.203.96.–
Jura
~ Anonymní uživatel
637 příspěvků
19. 6. 2010   #4
-
0
-

To liborb :
Tak například v mé implemtaci to je buď ukazatel na void nebo na nějakou strukturu(aby to bylo podle normy a kompilátor se s tím nějakymý způsobem vyrovnal).
Takže by se spíše hodilo vytvětlení, že tyto typu ve skutečností ukazují někam do paměti, tj. obsahují pouze adresu a ta je vyjádřena číslem. Každopádně pro použítí je znalost toho, co vůbec manipulátor je zač, je zbytečná

Nahlásit jako SPAM
IP: 85.207.192.–
LJ10240
Stálý člen
19. 6. 2010   #5
-
0
-

Ano, vím, že handle okna nezměním - o to tu ani nejde... jde mi jen o to, jestli s tím opravdu můžu pracovat jako s číslem... Pokud jsem vás správně pochopil, tak to možné je. Díky za odpovědi...

Nahlásit jako SPAM
IP: 217.30.64.–
KIIV
~ Moderátor
+43
God of flame
19. 6. 2010   #6
-
0
-

HWND je cislo .. akorat ted nevim jestli uint32 nebo 64 spis prvni

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
LJ10240
Stálý člen
20. 6. 2010   #7
-
0
-

KIIV napsal:
HWND je cislo .. akorat ted nevim jestli uint32 nebo 64 spis prvni



i tobě díky... :)

Nahlásit jako SPAM
IP: 217.30.64.–
zdenda
~ Anonymní uživatel
257 příspěvků
21. 6. 2010   #8
-
0
-

1. Konverze handlů (jejichž velikost a rozsah nejsou ničím zaručeny) na jiné typy je celkově nesmysl.
2. HWND je deklarován jako ukazatel, stejně jako ostatní typy HANDLE, a jako takový se ti do intu nemusí vejít.

Prakticky by konverze signed int / pointer snad měla být bezproblémová, ale je to čuňárna.

A jak by to mělo být Ti neřeknu, protože nevím, proč bys něco takového dělal a jsem přesvědčený, že to dělat nepotřebuješ.

Nahlásit jako SPAM
IP: 213.211.51.–
zdenda
~ Anonymní uživatel
257 příspěvků
21. 6. 2010   #9
-
0
-

konverze signed int / pointer

Teda konverze signed int / HWND.

Nahlásit jako SPAM
IP: 213.211.51.–
LJ10240
Stálý člen
21. 6. 2010   #10
-
0
-

díky... máš pravdu, že bude asi lepší najít jinou cestu...

Nahlásit jako SPAM
IP: 217.30.64.–
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, 58 hostů

Moderátoři diskuze

 

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