Funções WAPI no Harbour.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Funções WAPI no Harbour.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funções WAPI no Harbour.

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Funções WAPI no Harbour.

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funções WAPI no Harbour.

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Funções WAPI no Harbour.

Mensagem 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?
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funções WAPI no Harbour.

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Funções WAPI no Harbour.

Mensagem 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.
Inacio de Carvalho Neto
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Funções WAPI no Harbour.

Mensagem 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!
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Funções WAPI no Harbour.

Mensagem 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.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funções WAPI no Harbour.

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Funções WAPI no Harbour.

Mensagem 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.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funções WAPI no Harbour.

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Funções WAPI no Harbour.

Mensagem por cjp »

Funcionou, muito obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Funções WAPI no Harbour.

Mensagem 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
Inacio de Carvalho Neto
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Funções WAPI no Harbour.

Mensagem por janio »

viewtopic.php?f=4&t=15286&p=90019#p90019
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder