Otßzky a odpov∞di
V tΘto rubrice najdete odpov∞di na svΘ otßzky, kterΘ m∙₧ete zasφlat na adresu
vbtipy@seznam.cz. Pokud nebudeme znßt odpov∞∩ na n∞jakou
otßzku, objevφ se v Φßsti Otßzky bez odpov∞di a budete-li znßt odpov∞∩ vy,
m∙₧ete nßm ji pomocφ v²Üe uvedenΘ adresy zaslat, rßdi ji zve°ejnφme.
Otßzky a odpov∞di
Otßzky bez odpov∞di
Otßzky a odpov∞di
Mohli byste mi prosφm poradit, jak vytvo°it program, kter² kdy₧ se spustφ n∞jak² jin² program, nap°. Internet
Explorer, ukonΦφ sßm sebe?
Takov² program je mo₧no vytvo°it pomocφ prvku Timer . JednoduÜe budete kontrolovat (t°eba ka₧d²ch 30
sekund) spuÜt∞nΘ programy a bude-li mezi nimi ten, kter² hledßte, ukonΦφte sv∙j program. P°φklad
zde.
Cht∞l bych z k≤du Visual Basicu vypnout t°eba Explorer. Po delÜφm bßdßnφ se mi to poda°ilo zaktivovßnφm
okna Exploreru a simulacφ stisku ALT + F4. Tento zp∙sob je ale velice zdlouhav² a nep°ehledn². Existuje
i n∞jak² jin² zp∙sob, t°eba pomocφ API? TakΘ by m∞ zajφmalo, kde lze sehnat n∞jak² p°ehled API funkcφ.
Vypnout jinou aplikaci m∙₧ete pomocφ API funkce SendMessage a zprßvou WM_CLOSE . N∞kterΘ
programy vÜak tφmto zp∙sobem vypnout nejdou, nap°. Internet Explorer. Proto ₧ßdßme Φtenß°e, vφte-li jak na Internet
Explorer, napiÜte nßm.
P°ehled API funkcφ bude trochu problΘm. Bu∩ jde o knihy, kterΘ p°φmo uΦφ programovat ve Windows (nap°. Programovanφ
ve Windows 95), ale v t∞ch nenajdete seznam API. Dßle vyÜla t°eba kniha WIN32 API (2. dφly), kde je size seznam
API funkcφ, ale tradiΦn∞ v jazyce C. N∞jakß podobnß kniha pro programßtory ve Visual Basicu u nßs zatφm nenφ.
Existuje n∞jak² popis (a v∙bec mo₧nost) jak psßt k≤d ve Visual Basicu 6 Ent. pro vφceprocesorovΘ
stroje? Mßm na mysli efektivnφ k≤d vyu₧φvajφcφ vφce resp. dvou procesor∙.
Ve verzi 6.0 ₧ßdnß podpora pro tvorbu takov²ch aplikacφ nenφ, vÜe byste musel d∞lat pomocφ API.
Na strßnce http://msdn.microsoft.com/library/psdk/winbase/prothred_0n03.htm
si m∙₧ete n∞co o tΘto problematice p°eΦφst. Na http://msdn.microsoft.com/library/psdk/winbase/prothred_4zg3.htm
najdete jeÜt∞ dalÜφ informace. VÜe by se m∞lo ·dajn∞ zlepÜit s p°φchodem VB 7.0, kter² u₧ bude mφt vytvo°enΘ vlastnφ objekty
a funkce pro tvorbu multi-threaded aplikacφ.
Jak by se dalo v mΘm programu donutit Internet Explorer k tomu, aby mi zobrazil urΦitou strßnku na Internetu? Spustit
ho pomocφ API ShellExecute nebude problΘm, ale u₧ nevφm, jak zobrazit zadanou strßnku. Jde to v∙bec?
Pou₧ijte spφÜe objekt InternetExplorer. Pomocφ metody Navigate mu m∙₧ete
urΦit strßnku k zobrazenφ. Pokud chcete nutn∞ pou₧φt API, pou₧ijte
ShellExecute , ale zadejte tyto parametry: hWnd, "open", "www.stranka.ww" ... HorÜφ je to v p°φpad∞, ₧e je
s HTML asociovßn jin² prohlφ₧eΦ ne₧ IE.
Pot°ebuji v programu simulovat stisk klßvesy ESC. ZkouÜel jsem funkci GetKeyboardState , ale po zadßnφ parametru
27 (ESC) mi program spadne.
Funkce GetKeyboardState slou₧φ k zjiÜt∞nφ stavu klßvesnice. Pokud byste
cht∞l n∞co nastavovat, je tu funkce SetKeyboardState (nebo pro kombinaci
myÜi, klßvesnice a dalÜφch vstup∙ funkce SetInput ). Ale pro VaÜe ·Φely je
mnohem lepÜφ API keybd_event . Asi n∞jak takto:
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const VK_ESCAPE = &H1B
Const KEYEVENTF_KEYUP = &H2
keybd_event VK_ESCAPE, 0, 0, 0 'dolu
keybd_event VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0 'nahoru
Pot°ebuji n∞jak ve Visual Basicu zjistit, zda je v CD-Rom mechanice vlo₧eno CD.
Zda je v mechanice CD lze zjistit t°eba tak, ₧e se pokusφte z n∞j n∞co p°eΦφst. Pomocφ API funkcφ GetLogicalDriveStrings
a GetDriveType zjistφte pφsmeno mechaniky a pak zkusφte kopφrovat.
M∙₧ete napsat pßr internetov²ch adres o Visual Basicu? NejlΘpe n∞jakou diskusnφ skupinu.
Na serveru csnews.vslib.cz je skupina cz.comp.lang.basic.visual nebo
pokud chcete p°es WWW prohlφ₧eΦ, tak t°eba na http://forums.oreilly.com/~vb/. Na
http://www.cetus-links.org/oo_visual_basic.html najdete vφce ne₧ sluÜn² p°ehled r∙zn²ch diskuznφch skupin o VB.
Pot°ebuji poradit ohledn∞ ovlßdacφho prvku Timer. Jeho interval je
pouze na minutu a jß bych pot°eboval asi tak 10 a₧ 15 minut. Nevφte o
n∞jakem jinΘm ovlßdacφm prvku? Jestli ne, pak by mi staΦil p°φkaz pro
pozastavenφ b∞hu programu na urΦitou dobu.
K pozastavenφ b∞hu programu ve VB nic nenφ, musφte pou₧φt API funkci Sleep .
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Mφsto jinΘho ovlßdacφho prvku bych pou₧il spφÜe API funkce SetTimer a KillTimer . Jak
je pou₧φt najdete v tΘto rubrice v Φφsle 6/2000.
Cht∞l bych se zeptat, jak mohu vypnout Windows do klasickΘho "Nynφ m∙₧ete
poΦφtaΦ bez obav vypnout" (bez ₧ßdnΘho dalÜφho odkliknutφ) pomocφ obyΦejnΘho tlaΦφtka (Nap°.: "CB1") na mΘm formulß°i
a takΘ jak bych mohl ukonΦit n∞jak² b∞₧φcφ program Nap°.: MS Word pomocφ druhΘho tlaΦφtka "CB2"
Vypnout Windows je mo₧nΘ pomocφ API funkce ExitWindowsEx :
Declare Function ExitWindowsEx Lib "user32.dll" (ByVal uFlags As Long, ByVal
dwReserved As Long) As Long
Prvnφ parametr nastavte na EWX_POWEROFF = 8 a pokud pot°ebujete p°idejte i EWX_FORCE = 4
(nebude se ptßt aplikacφ jestli je m∙₧e vypnout nebo ne). Tak₧e asi takto:
ExitWindowsEx EWX_POWEROFF + EWX_FORCE, 0
UkonΦit b∞₧φcφ program m∙₧ete pomocφ API funkce SendMessage se zprßvou WM_CLOSE (WM_CLOSE = &H10).
Otßzky bez odpov∞di
Nevφte jak ud∞lat, aby p°i ukonΦenφ Windows m∙j program dal hlßÜenφ, ₧e je v CD-Rom jednotce vlo₧eno CD?.
Jak se dß ud∞lat kontrolnφ souΦet (CRC32) souboru?
ZkouÜel jsem p°idat bitmapu do menu pomocφ API funkce SetMenuItemBitmaps. V normßlnφm menu
to funguje. Jakmile vÜak stejn² postup pou₧iji v PopupMenu, obrßzek se nezobrazφ.
Rßd by som zφskal informßcie o API funkcißch pre prßcu s resources, sp⌠sob ich volania
vo VB a informßcie potrebnΘ pre sprßvny chod funkcie:
loadresource, findresorce, freeresource, updateresource. Chcel by som urobi¥ mal²
lokalizßtor, a na to s· potrebnΘ tieto funkcie, v angliΦtine (MSDN) som Φosi porozumel,
ale neviem ako loadnutΘ resource zobrazi¥ v Image, txt objekte, a ako ich updatova¥ do
s·boru.
V MSDN je zmienka o pou₧itφ interfacu k objektom Windows Exploreru na vlo₧enie
objektov (Listview, treeview, combo, taskbar at∩ ) do vlastn²ch aplikßciφ, ale prilo₧enΘ
vzory s· pre C++. Chcem Vßs po₧iada¥ o nejakΘ moduly alebo prφklady pre pou₧itie t²chto
objektov, za Φo Vßm budem ve╛mi v∩aΦn² ! Zaujφma ma hlavne zobrazenie Listview, treeview,
combo z exploreru a objekty z taskbaru (tabsysview, systraj objekt, objekt hodφn a ponuky
ètart pre vytvorenie novΘho typu taskbaru). Ve╛mi Vßs prosφm o pomoc.
|