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

  Jak lze zjistit ve Visual Basicu adresu sφ¥ovΘ karty poΦφtaΦe, na kterΘm prßv∞ b∞₧φ aplikace?

Zjistit hardwarovou adresu sφ¥ovΘ karty nenφ a₧ tak jednoduchΘ, aby se vlezlo na tuto strßnku, proto zkuste tento p°φklad. API funkcφ, kterß vracφ takovou informaci je NetBios.


  Pot°eboval bych pomoci s programem, kter² mß detekovat, jestli je spuÜt∞no vφce oken Internet Exploreru a v p°φpad∞, ₧e jsou spuÜt∞ny 3, aby se jedno ukonΦilo. A takΘ aby program fungoval hlavn∞ pod Windows NT i 2000 a nem∞l by jφt ukonΦit.

Jestli je spuÜt∞n n∞jak² program, m∙₧ete zjistit pomocφ API funkce GetWindow. Funkce prochßzφ vÜechna "okna" ve Windows (p°esn∞ji ta, kterß si °eknete, ale vy pot°ebujete projφt vÜechna) a dßvß jejich handle (pokud vßm nevyhovuje GetWindow, zkuste EnumWindows). Z toho m∙₧ete zase pomocφ GetWindowText zjistit, jestli je to Internet Explorer a dßl u₧ zßle₧φ na Vßs. Nφ₧e uveden² p°φklad projde vÜechna "okna" a vypφÜe jejich nßzev. Jak ud∞lat, aby program neÜel ukonΦit pod NT nevφm. Ale podle toho co vφm, tak p∙jde ukonΦit v₧dy, v₧dy¥ NT jsou serverov² OS a ten by se podle mΘho nßzoru nem∞l ptßt programu, jestli chce ukonΦit nebo ne. Ale je to pouze domn∞nka, nemßm s NT moc zkuÜenostφ.

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
  (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5

Private Sub VypisOkna()
  Dim desktop As Long, hwnd As Long
  Dim title As String, delka As Long

  hwnd = GetWindow(GetDesktopWindow, GW_CHILD)
  Do While hwnd <> 0
    hwnd = GetWindow(hwnd, GW_HWNDNEXT)

    title = String(255, vbNullChar)
    delka = GetWindowText(hwnd, title, 255)
    title = Left(title, delka)

    If delka > 0 Then Debug.Print title
  Loop
End Sub


  Zajφmalo by mn∞, jak se dß ve Visual Basicu zjisit seriovΘ Φφslo disku, na kterΘm se nachßzφ m∙j program.

SeriovΘ Φφslo disku lze zjistit pouze pomocφ API, VB ₧ßdnou funkci nemß. API funkce, kterß vßm °ekne seriovΘ Φφslo je GetVolumeInformation.

Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" _
   (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, _
    ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
    lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
    ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Private Sub ZobrazSN(ByVal disk As String) 'disk - napr. C:\
  Dim sn As Long, nazev As String, i1 As Long, i2 As Long, i3 As String, hw As Long, lw As Long

  nazev = Space(14): i3 = Space(32)
  GetVolumeInformation "C:\", nazev, Len(nazev), sn, i1, i2, i3, Len(i3)

  hw = HiWord(sn) And &HFFFF&
  lw = LoWord(sn) And &HFFFF&
  MsgBox "SeriovΘ Φφslo disku: " & Format(Hex(hw), "0000") & "-" & Format(Hex(lw), "0000")
End Sub

Private Function HiWord(ByVal dw As Long) As Integer
  If dw And &H80000000 Then
    HiWord = (dw \ 65535) - 1
  Else
    HiWord = dw \ 65535
  End If
End Function

Private Function LoWord(ByVal dw As Long) As Integer
  If dw And &H8000& Then
    LoWord = &H8000 Or (dw And &H7FFF&)
  Else
    LoWord = dw And &HFFFF&
  End If
End Function


  Jak²m zp∙sobem lze ve Visual Basicu p°ehrßvat MID soubory. Nechci pou₧φt p°ehrßvaΦ integrovan² ve Windows.

Pokud chcete soubory p°ehrßvat jednoduÜe, pou₧ijte prvek z VB, Microsoft Multimedia Control. Umφ p°ehrßvat nejen MID, ale i WAV a audio CD. Chcete-li si z hudbou "hrßt" vφce, musφte pou₧φt API funkce MCI. Jejich popis by p°esahoval mo₧nosti tΘto rubriky, pokud se o tom chcete n∞co dozv∞d∞t, zkuste pro zaΦßtek strßnku Microsoftu.


Otßzky bez odpov∞di

  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.


  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.


  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φ.