Página 1 de 3

Funções WAPI no Harbour.

Enviado: 07 Dez 2012 11:43
por Itamar M. Lins Jr.
Para quem precisa das funções de acesso a API do windows no Harbour.

http://pt.wikipedia.org/wiki/Windows_API
__wapi_GetACP()
__wapi_GetOEMCP()
contrib - hbwin.hbc:
wapi_AbortDoc()
wapi_AddFontResource()
wapi_AddFontResourceEx()
wapi_AppendMenu()
wapi_Arc()
wapi_CheckMenuItem()
wapi_CheckMenuRadioItem()
wapi_ComboBox_AddString()
wapi_CreateAcceleratorTable()
wapi_CreateDC()
wapi_CreateFont()
wapi_CreateFontIndirect()
wapi_CreateHatchBrush()
wapi_CreateMenu()
wapi_CreateMutex()
wapi_CreatePen()
wapi_CreatePopupMenu()
wapi_CreateSolidBrush()
wapi_CreateWindowEx()
wapi_DeleteMenu()
wapi_DestroyacceleratorTable()
wapi_DestroyMenu()
wapi_DestroyWindow()
wapi_DialogBoxParam()
wapi_DrawMenuBar()
wapi_DrawText()
wapi_Ellipse()
wapi_EnableMenuItem()
wapi_EnableScrollBar()
wapi_EndDialog()
wapi_EndDoc()
wapi_EndPage()
wapi_ExtTextOut()
wapi_FillRect()
wapi_FindWindow()
wapi_FormatMessage()
wapi_FreeLibrary()
wapi_GetACP()
wapi_GetActiveWindow()
wapi_GetBkColor()
wapi_GetBkMode()
wapi_GetCommandLine()
wapi_GetCurrentProcess()
wapi_GetCurrentProcessId()
wapi_GetCurrentThread()
wapi_GetCurrentThreadId()
wapi_GetDesktopWindow()
wapi_GetDeviceCaps()
wapi_GetDlgItem()
wapi_GetDlgItemText()
wapi_GetKeyState()
wapi_GetLastError()
wapi_GetLongPathName()
wapi_GetMapMode()
wapi_GetMenu()
wapi_GetMenuDefaultItem()
wapi_GetMenuItemCount()
wapi_GetMenuItemId()
wapi_GetMenuState()
wapi_GetModuleHandle()
wapi_GetOEMCP()
wapi_GetProcAddress()
wapi_GetScrollInfo()
wapi_GetScrollPos()
wapi_GetScrollRange()
wapi_GetShortPathName()
wapi_GetSubMenu()
wapi_GetSystemDirectory()
wapi_GetSystemMenu()
wapi_GetSystemMetrics()
wapi_GetTextAlign()
wapi_GetTextColor()
wapi_GetTextFace()
wapi_GetVolumeInformation()
wapi_GetWindowsDirectory()
wapi_ImageList_Add()
wapi_ImageList_AddMasked()
wapi_ImageList_BeginDrag()
wapi_ImageList_Copy()
wapi_ImageList_Create()
wapi_ImageList_Destroy()
wapi_ImageList_DragEnter()
wapi_ImageList_DragLeave()
wapi_ImageList_DragMove()
wapi_ImageList_DragShowNolock()
wapi_ImageList_Draw()
wapi_ImageList_DrawEx()
wapi_ImageList_Duplicate()
wapi_ImageList_GetBkColor()
wapi_ImageList_GetIcon()
wapi_ImageList_GetIconSize()
wapi_ImageList_GetImageCount()
wapi_ImageList_GetImageInfo()
wapi_ImageList_LoadImage()
wapi_ImageList_Merge()
wapi_ImageList_Remove()
wapi_ImageList_Replace()
wapi_ImageList_ReplaceIcon()
wapi_ImageList_SetBkColor()
wapi_ImageList_SetDragCursorImage()
wapi_ImageList_SetIconSize()
wapi_ImageList_SetImageCount()
wapi_InsertMenu()
wapi_IsIconic()
wapi_IsMenu()
wapi_IsUserAnAdmin()
wapi_IsWindow()
wapi_IsZoomed()
wapi_LineTo()
wapi_LoadImage()
wapi_LoadLibrary()
wapi_LoadMenu()
wapi_MessageBeep()
wapi_MessageBox()
wapi_MoveToEx()
wapi_MulDiv()
wapi_OpenMutex()
wapi_OutputDebugString()
wapi_PlaySound()
wapi_QueryPerformanceCounter()
wapi_QueryPerformanceFrequency()
wapi_Rectangle()
wapi_ReleaseMutex()
wapi_RemoveFontResource()
wapi_RemoveFontResourceEx()
wapi_RemoveMenu()
wapi_ResetDC()
wapi_RoundRect()
wapi_SelectObject()
wapi_SetActiveWindow()
wapi_SetBkColor()
wapi_SetBkMode()
wapi_SetDlgItemText()
wapi_SetErrorMode()
wapi_SetFocus()
wapi_SetLastError()
wapi_SetMapMode()
wapi_SetMenu()
wapi_SetMenuDefaultItem()
wapi_SetProcessWorkingSetSize()
wapi_SetScrollInfo()
wapi_SetScrollPos()
wapi_SetScrollRange()
wapi_SetTextAlign()
wapi_SetTextColor()
wapi_SetWindowPos()
wapi_ShellExecute()
wapi_ShowScrollBar()
wapi_Sleep()
wapi_StartDoc()
wapi_StartPage()
wapi_TabCtrl_AddItem()
wapi_TabCtrl_AdjustRect()
wapi_TabCtrl_Create()
wapi_TabCtrl_DeleteAllItems()
wapi_TabCtrl_DeleteItem()
wapi_TabCtrl_DeselectAll()
wapi_TabCtrl_GetCurFocus()
wapi_TabCtrl_GetCurSel()
wapi_TabCtrl_GetExtendedStyle()
wapi_TabCtrl_GetImageList()
wapi_TabCtrl_GetItem()
wapi_TabCtrl_GetItemCount()
wapi_TabCtrl_GetItemRect()
wapi_TabCtrl_GetRowCount()
wapi_TabCtrl_GetToolTips()
wapi_TabCtrl_GetUnicodeFormat()
wapi_TabCtrl_HighlightItem()
wapi_TabCtrl_HitTest()
wapi_TabCtrl_InsertItem()
wapi_TabCtrl_RemoveImage()
wapi_TabCtrl_SetCurFocus()
wapi_TabCtrl_SetCurSel()
wapi_TabCtrl_SetExtendedStyle()
wapi_TabCtrl_SetImageList()
wapi_TabCtrl_SetItem()
wapi_TabCtrl_SetItemExtra()
wapi_TabCtrl_SetItemSize()
wapi_TabCtrl_SetMinTabWidth()
wapi_TabCtrl_SetPadding()
wapi_TabCtrl_SetToolTips()
wapi_TabCtrl_SetUnicodeFormat()
wapi_TextOut()
wapi_TrackPopupMenu()
wapi_TreeView_CreateDragImage()
wapi_TreeView_DeleteAllItems()
wapi_TreeView_EditLabel()
wapi_TreeView_EndEditLabelNow()
wapi_TreeView_EnsureVisible()
wapi_TreeView_Expand()
wapi_TreeView_GetBkColor()
wapi_TreeView_GetCheckState()
wapi_TreeView_GetChild()
wapi_TreeView_GetCount()
wapi_TreeView_GetDropHilight()
wapi_TreeView_GetEditControl()
wapi_TreeView_GetFirstVisible()
wapi_TreeView_GetImageList()
wapi_TreeView_GetIndent()
wapi_TreeView_GetInsertMarkColor()
wapi_TreeView_GetISearchString()
wapi_TreeView_GetItem()
wapi_TreeView_GetItemHeight()
wapi_TreeView_GetItemRect()
wapi_TreeView_GetItemState()
wapi_TreeView_GetLastVisible()
wapi_TreeView_GetLineColor()
wapi_TreeView_GetNextItem()
wapi_TreeView_GetNextSibling()
wapi_TreeView_GetNextVisible()
wapi_TreeView_GetParent()
wapi_TreeView_GetPrevSibling()
wapi_TreeView_GetPrevVisible()
wapi_TreeView_GetRoot()
wapi_TreeView_GetScrollTime()
wapi_TreeView_GetSelection()
wapi_TreeView_GetTextColor()
wapi_TreeView_GetToolTips()
wapi_TreeView_GetUnicodeFormat()
wapi_TreeView_GetVisibleCount()
wapi_TreeView_HitTest()
wapi_TreeView_InsertItem()
wapi_TreeView_Select()
wapi_TreeView_SelectDropTarget()
wapi_TreeView_SelectItem()
wapi_TreeView_SelectSetFirstVisible()
wapi_TreeView_SetBkColor()
wapi_TreeView_SetCheckState()
wapi_TreeView_SetImageList()
wapi_TreeView_SetIndent()
wapi_TreeView_SetInsertMark()
wapi_TreeView_SetInsertMarkColor()
wapi_TreeView_SetItem()
wapi_TreeView_SetItemHeight()
wapi_TreeView_SetItemState()
wapi_TreeView_SetLineColor()
wapi_TreeView_SetScrollTime()
wapi_TreeView_SetTextColor()
wapi_TreeView_SetToolTips()
wapi_TreeView_SetUnicodeFormat()
wapi_TreeView_SortChildren()
wapi_WaitForMultipleObjects()
wapi_WaitForMultipleObjectsEx()
wapi_WaitForSingleObject()
wapi_WaitForSingleObjectEx()
wapi_WNetGetLastError()
__wapi_DEVMODE_Get()
__wapi_DEVMODE_New()
__wapi_DEVMODE_Set()
Saudações,
Itamar M. Lins Jr.

Funções WAPI no Harbour.

Enviado: 17 Nov 2013 13:53
por Jairo Maia
Olá Pessoal,

Como faço para linkar a função wapi_AddFontResource() no Harbour?

Se alguém puder me dar a dica agradeço.

Funções WAPI no Harbour.

Enviado: 17 Nov 2013 18:54
por Toledo
Amigo Jairo, no exemplo abaixo estou usando a função WAPI_AddFontResourceEx, que deve ter a mesma função da WAPI_AddFontResource.

Código: Selecionar todos

******************************************
* Compile: hbmk2 teste.prg -lhbwin
******************************************
Proc Main()
Local cFont:=DiskName()+":\"+CurDir()+"\KLB.TTF"
WAPI_AddFontResourceEx( cFont )

Inkey(0)

WAPI_RemoveFontResourceEx( cFont )
Return
Coloquei um Inkey(0) ai no meio deste exemplo só para dar uma pausa no programa para poder ver se a fonte realmente estava disponível no Windows, eu abri o Bloco de Notas e procurei a fonte na opção Formatar Fonte... e a fonte estava lá. Depois que o programa exemplo foi finalizado, voltei no Bloco de Notas e já não encontrava mais a fonte.

Observação: neste exemplo usei uma fonte KLB.TTF (KlingonBlade) que encontrei na Internet.

Abraços,

Funções WAPI no Harbour.

Enviado: 17 Nov 2013 20:37
por Jairo Maia
Olá Toledo,

Muito Obrigado pela dica. Funcionou certinho.

Fquei quase dois dias tentando, pesquisando e lendo como linkar a função wapi_AddFontResource(), e em momento nenhum passou pela cabeça tentar linkar a wapi_AddFontResourceEx(). Sequer lembrei que existe orientação dos desenvolvedores do Harbour, para sempre que for lançada uma função Extended significa que a antiga ficou descontinuada. Talvez seja esse o motivo que ela não tem mais no Harbour.

A fonte que preciso é a Code 128. Poxa Vida! Que Bom. Mais uma etapa vencida. Muito Obrigado.

Funções WAPI no Harbour.

Enviado: 29 Ago 2014 23:30
por cjp
Estou enfrentando um problema em algumas funções Wapi há alguns dias. Uso elas há muito tempo, mas recentemente ela tem dado alguns erros estranhos.

Exemplo:

Imagem

A função onde está dando erro está assim:

Código: Selecionar todos

RUN ("WAPI -GETAPPSINFO:exec.TXT")
ctexto:=ALLTRIM(MEMOREAD("exec.TXT"))
Já conferir que não há problema de espaço em disco.

Alguém saberia me dizer o que é isso?

Funções WAPI no Harbour.

Enviado: 30 Ago 2014 10:15
por Jairo Maia
cjp escreveu:Já conferir que não há problema de espaço em disco.
Inácio, esta falta de espaço não se refere a espaço em disco, mas sim em memória. Veja: Sem espaço para dados de segmento. Não sei se o problema pode estar sendo causado porque você está chamando o aplicativo Wapi.exe pelo Run.

Editado:
Verifique também se por acaso esse erro não está ocorrendo quando você está com o aplicativo aberto em outra CMD (RUN), acho que uma impede a outra de liberar espaço de segmentos.

Funções WAPI no Harbour.

Enviado: 30 Ago 2014 10:32
por cjp
Tem outro jeito de chamar que não pelo RUN?

É até possível que esteja sim sendo executado em outro programa, pois são dois programas rodando conjuntamente, e que eventualmente chamam a WAPI. Eu não tenho como saber se exatamente no mesmo instante os dois estão sendo chamados.

Funções WAPI no Harbour.

Enviado: 30 Ago 2014 10:56
por janio
Vc usa clipper ou harbour??

Se for harbour pode usar as funções da api do Windows sem esse executável (wapi.exe).

Se vc usar clipper... Acho q quem fez esse programa (wapi.exe) foi o Maligno e ae teria q entrar em contato com ele pra ver o q está acontecendo!

Funções WAPI no Harbour.

Enviado: 30 Ago 2014 23:07
por cjp
Eu uso o Harbour.

Realmente já li aqui no fórum algumas coisas sobre uso direto de API do Windows no Harbour. Até já uso alguma coisa, retirada daqui do fórum.

Mas fiz uma pesquisa agora, para tentar achar especificamente esta. Vi vários posts, mas não achei nenhum que resolveria especificamente meu problema.

Até vi este, que parece ter a solução: viewtopic.php?f=4&t=10061&hilit=getappsinfo&start=15. Mas, pra te ser sincero, eu não entendi como fazer.

Vc saberia me dizer como devo fazer para usar direto a API do Windows que me servisse para este caso, sem precisar usar o WAPI.EXE? Eu quero algo simples: listar os aplicativos que estão rodando no computador no momento.

Funções WAPI no Harbour.

Enviado: 31 Ago 2014 08:04
por Jairo Maia
Olá Inácio,
cjp escreveu:Eu quero algo simples: listar os aplicativos que estão rodando no computador no momento.
Acho que a rigor você quer saber se determinado programa está aberto, se for isso, use o exemplo abaixo.

Nota de Créditos:
Fiz algumas alterações na função WIN_GETPROCESSLIST() do Vailton Renato, para retornar uma matriz simples apenas com o nome do processo, e mudei o nome para Win_PegaProcessos() para não ser confundida com a função do Vailton, mas é dele todo crédito. A função WIN_GETPROCESSLIST() do Vailton retorna uma matriz bidimensional com 5 elementos. A função completa do Vailton pode ser vista neste tópico: Finalizando Aplicativo Windows.

Código: Selecionar todos

/*
  Compilar: Hbmk2 exemplo -lxhb
*/

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PTISO

Function Main()

 HB_LANGSELECT("PT")
 HB_SETCODEPAGE("PTISO")
  
 /*
   Envie por parâmetro o nome do programa que você quer saber se está aberto.
   Por exemplo:
 */
 If EstaAberto( "winlogon.exe" )
  Hb_Alert( "Programa: winlogon.exe Está Aberto!" )
 Else
  Hb_Alert( "Programa: winlogon.exe Não Está Aberto!" )
 EndIf
 
Return Nil
 
Function EstaAberto( cQuem )
 Local aProcs := {}, nReturn, nPosi := 0
 
 nReturn := Win_PegaProcessos( aProcs )
 If nReturn = 1
  Hb_Alert( "Argument error" )
 ElseIf nReturn = 2
  Hb_Alert("Unable to obtain current process list.")
 ElseIf nReturn = 3
  Hb_Alert("Error retrieving information about processes.")
 EndIf
 
 For x = 1 To Len( aProcs )  // não usei AScan() para usar Upper()
  If Upper( aProcs[ x, 1 ] ) = Upper( cQuem )
   nPosi := x
   Exit
  EndIf
 Next
 
Return ( nPosi > 0 )  // Se está aberto retorna .T.


************************
#pragma BEGINDUMP
#include <windows.h>
#include <windef.h>
#include <tlhelp32.h>
#include <hbapi.h>
#include <hbapiitm.h>

/*
  WIN_PEGAPROCESSOS( aArray ) -> nResult
  Baseada na função WIN_GETPROCESSLIST() by Vailton Renato - 15/12/2009 - 18:58:58
*/

HB_FUNC( WIN_PEGAPROCESSOS )
{
  HANDLE hProcessSnap;
  PROCESSENTRY32 pe32;
  PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY );
  const char * szAppName = hb_parcx(2);
  BOOL bCanAdd = TRUE;

   if( !pArray )
   {
      hb_retni( 1 );
      return;
   }

  // Take a snapshot of all processes in the system.
  hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

  if( hProcessSnap == INVALID_HANDLE_VALUE )
  {
    // CreateToolhelp32Snapshot (of processes)
    hb_retni( 2 );
    return;
  }

  // Set the size of the structure before using it.
  pe32.dwSize = sizeof( PROCESSENTRY32 );

  // Retrieve information about the first process,
  // and exit if unsuccessful
  if( !Process32First( hProcessSnap, &pe32 ) )
  {
    hb_retni( 3 );
    CloseHandle( hProcessSnap );          // clean the snapshot object
    return;
  }

  // Ignores a empty string on seconds argument
  if ( hb_parclen(2) < 1 )
      szAppName = NULL;

  // Now walk the snapshot of processes, and
  // display information about each process in turn
  do
  {
    PHB_ITEM pSubarray;

    if (szAppName)
      bCanAdd = ( hb_stricmp( szAppName, pe32.szExeFile ) == 0 );

    if (bCanAdd)
    {
       pSubarray = hb_itemNew( NULL );

       hb_arrayNew( pSubarray, 1 );
       hb_arraySetC    ( pSubarray, 1, pe32.szExeFile );   // Process Name

       hb_arrayAddForward( pArray, pSubarray );
    }
  } while( Process32Next( hProcessSnap, &pe32 ) );

  CloseHandle( hProcessSnap );
  hb_retni( 0 );
  return;
}

#pragma ENDDUMP

Funções WAPI no Harbour.

Enviado: 31 Ago 2014 23:18
por cjp
Funcionou, obrigado.

Mas o que eu precisaria mesmo, na verdade, não é saber se determinado programa está rodando. Eu precisaria mesmo da lista dos programas rodando.

Pelo que eu entendi analisando tua função, a array aProcs conteria a lista que eu quero. Mas, como não sei lidar muito bem com array, não consegui fazer uso da lista desta forma.

Funções WAPI no Harbour.

Enviado: 01 Set 2014 04:16
por Jairo Maia
Fça assim:

Código: Selecionar todos

cTexto := ""
For x = 1 To Len( aProcs )
 cTexto += aProcs[ x, 1 ] + Hb_Eol()
Next
Assim você terá a lista dos programas rodando na variável cTexto, como você usava antes.

Hashtag: Wapi

Funções WAPI no Harbour.

Enviado: 02 Set 2014 02:08
por cjp
Funcionou, muito obrigado.

Funções WAPI no Harbour.

Enviado: 12 Set 2014 00:28
por cjp
Amigos,

Preciso novamente da ajuda de vocês para usar API do Windows. Creio que a função que preciso é a Wapi_FindWindow(), pois quero trazer a janela do meu programa para a frente.

Até consultei este site: http://msdn.microsoft.com/pt-br/library ... 85%29.aspx, que dá a sintaxe desse comando, mas o problema é que eu ainda não entendi como colocar funções API no Harbour.

Alguém poderia me ajudar?

Tags: Wapi FindWindow

Funções WAPI no Harbour.

Enviado: 12 Set 2014 09:15
por janio
viewtopic.php?f=4&t=15286&p=90019#p90019