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.