
DelpheroMn
Membros-
Total de itens
41 -
Registro em
-
Última visita
Tudo que DelpheroMn postou
-
Jhonas como sempre me salvando rs Muito obrigado era isso mesmo
-
Olá pessoal. Eu tenho um sistema um tanto complexo, com inúmeras funções (15000 linhas). E meus usuários ao usárem o sistema, se deparam com um "erro" um tanto estranho, após algum tempo o sistema ligado ele abre a tela para desligar o pc do windows (só ocorre do windows 7 pra cima) não é possivel eu analisar função por função porque são muitas, eu queria saber como é possivel fazer essa chamada , eu devo ter feito sem querer, e queria saber como eu faço pra chamar essa tela? talvez entendendo como é a chamada dela eu consigo eliminar a parte do código.
-
mas nesse caso ele tira tipo um "print" do fundo e grava até fechar o form. Então se caso você minimizar a janela que estava no fundo , o fundo que ele iniciou continuará. Teria alguma forma que fosse em tempo real? porque fica meio esquisito, ao mover o form a imagem de fundo ficar travada
-
Nesse caso também não funciona Jhonas, porque no fundo da imagem que era pra ficar transparente por ela ser em png, fica preto com essa função.. Estava pesquisando sobre componentes do gênero também e não achei nada :/
-
Não Jhonas, oque essa função faz é aumentar a transparencia do form inteiro. Provavelmente foi feita para as versões do delphi anteriores ao 4 , porque após essa versão eles criaram a propriedade AlphaBlendValue e AlphaBlend. Posso fazer fácilmente oque esta função fez ultilizando o seguinte código: Self.AlphaBlend := true; Self.AlphaBlendValue := 120; No caso ele coloca a transparência no form inteiro, se houvesse um método de colocar a transparencia sómente no fundo do form, deixando os componentes visiveis me ajudaria da forma que quero. Exemplo: O Form por inteiro transparente, porém o Componente TImage Visível.
-
Self.TransparentColor := True; Self.TransparentColorValue := ColorToRGB(Self.Color);
-
Olá galera, eu estou com um problema. Meu programa eu quero que tenha uma borda modelada, com transparencias nessas bordas, pra ficar algo mais bonito e agradável, no entanto estou tendo problemas com a propriedade transparentcolor. Observem: http://i50.tinypic.com/j96n8z.png A função em si funciona perfeitamente, porém a parte que imagem é semi transparente, como uma sombra ou algo do tipo ele não aplica a propriedade. Existe algum componente que possa me ajudar?
-
(Resolvido) Separar dados de TStringList
pergunta respondeu ao DelpheroMn de DelpheroMn em Delphi, Kylix
Depois de muitos pensamentos filosóficos resolvi fazer uma "gambiarrinha" básica né?! HAHA quem quiser ta aí.. procedure TForm1.Button1Click(Sender: TObject); var lista:TStringList; i,l1,l2,l3,l4,l5,l6 : integer; begin lista := TStringlist.create; lista.loadfromfile('sys.db'); for i := 0 to lista.Count -1 do begin if lista.Strings[i] = '#1' then begin l1 := i; end; if lista.Strings[i] = '#2' then begin l2 := i; end; if lista.Strings[i] = '#3' then begin l3 := i; end; if lista.Strings[i] = '#4' then begin l4 := i; end; if lista.Strings[i] = '#5' then begin l5 := i; end; if lista.Strings[i] = '#6' then begin l6 := i; end; end; for i := l1 to lista.Count -1 do begin if i < l2 then begin listbox1.Items.Add(lista.Strings[i]); end else begin break; end; end; for i := l2 to lista.Count -1 do begin if i < l3 then begin listbox2.Items.Add(lista.Strings[i]); end else begin break; end; end; for i := l3 to lista.Count -1 do begin if i < l4 then begin listbox3.Items.Add(lista.Strings[i]); end else begin break; end; end; for i := l4 to lista.Count -1 do begin if i < l5 then begin listbox4.Items.Add(lista.Strings[i]); end else begin break; end; end; for i := l5 to lista.Count -1 do begin if i < l6 then begin listbox5.Items.Add(lista.Strings[i]); end else begin break; end; end; for i := l6 to lista.Count -1 do begin if i < lista.count then begin listbox6.Items.Add(lista.Strings[i]); end else begin break; end; end; end; ele grava as linhas em que os determinados dados começam e depois da o for sómente nas linhas necessárias. rodou bem legal e sem erros, tópico resolvido ! -
Eu tenho uma variável do tipo TStringList com os seguintes dados #1 dados1 dados1 dados1 dados1 #2 dados2 dados2 dados2 dados2 #3 dados3 dados3 dados3 dados3 Quero que os dados do "#1" fiquem no listbox1 os dados "#2" fiquem no listbox 2 e os "#3" fiquem no listbox3 , tentei fazer de vários métodos usando while e for mas até agora sem sucesso, por favor alguém poderia me dar uma luz? Agradeço desde já
-
Para o desenvolvimento de um sistema de Antihacker micheus. Ao altera o processo do jogo aleatóriamente os hackers não achariam o processo para ser injectado a dll e eu acabaria de vez com 90% dos hackers.. Não é nada com virus não , não trabalho com isso. Queria algo para ficar mudando o nome do meu processo aleatóriamente várias vezes por alguns segundos..
-
Olá pessoal.. Hoje eu queria saber se é possivel mudar o nome de um processo em runtime.. Alguém teria algum exemplo ou material para estudo? Não encontrei nada relacionado. Agradeço desde já
-
Amigo, o Jhonas quis dizer que os suportos erros que você encontrou não são erros e sim avisos. Nada que interfere na compilação do programa..
-
Olá meus amigos, estou desenvolvendo uma espécie de firewall , onde eu preciso de uma autenticação para acessar uma determinada porta do servidor. Assim, eu já consegui listar todos os ips que acessar minha determinada porta, agora preciso saber como bloquear ou ao menos desconectar um determinado ip da conexão dessa minha porta, vou explicar a abaixo o porque: Eu possuo um cliente Esse cliente Acessa um servidor por uma porta TCP Mas antes de acessar esse servidor, ele precisa ser autenticado pelo firewall, porque não são todos os ips que estão liberados a acessar esse determinado servidor.. Eu já consegui selecionar todos os ips que estão sendo conectados a uma determinada porta, agora preciso saber como bloquear a conexão de um determinado ip a essa minha porta. Será que alguém poderia me dar uma base para eu estudar ? Agradeço desde já !
-
use os componentes TServerSocket e TClienteSocket na aba internet após a instalação deles use a função sendsocket.. Exemplo: procedure button1.click (sender: TObject); begin ClientSocket1.Socket.SendText('DADOS A SEREM ENVIADOS'); end; com essa função ele envia os dados para o servidor, caso queira enviar a um determinado cliente é o mesmo processo com o servidor.
-
(Resolvido) Monitorar determinada porta
pergunta respondeu ao DelpheroMn de DelpheroMn em Delphi, Kylix
Jhonas o .pas do qual você passou o link está offline "Aqui os .PAS que deve usar: http://home1.stofanet.dk/nitezhifter/files/Delphi%20Pcap.zip " Poderia me passar ao menos o nome dele? seria mais fácil de procurar na net.. ----------------------------------------------------------------------------------------------------- Edit Resolvido ! Depois de muita procura consegui achar um link ainda ativo, se alguém precisar é só baixar http://nzlab.dk/files/DelphiPcap%2025-05-2005.zip -
Eu preciso fazer uma espécie de firewall , lista todas as conexões de uma determinada porta , verificar se a conexão daquele determinado ip está liberada e então liberar a conexão dele para a porta ! Eu tentei fazer com serversocket e ftpserv mas não obtive sucesso, porque toda vez que tento monitorar uma porta, eu até consigo listar todos os pacotes enviados pra ela, porém uma vez a porta sendo usada não posso abrir outro aplicativo para usa-lá também.. Assim, eu tenho um esquema: Cliente > Firewall > Conector O cliente precisa passar pelo firewall , o firewall verifica se ele está autenticado e libera a conexão para o conector. Não preciso monitorar todas as portas que nem um firewall normal, só preciso monitorar uma porta. Uma função que liste os ips que estão acessando aquela determinada porta, sem usar a porta me ajudaria de mais. Se alguém tiver uma source code de um firewall em delphi também me ajudaria bastante, eu baixei um iSafer mas não soube fazer ele funcionar, então fico ao aguardo se alguém tiver alguma experiencia no assunto.. Agradeço desde já !
-
Beleza Jhonas obrigado amigo.
-
Jhonas , seu code realmente funciona, o unico problema é que eu não consegui adaptar essa minha const para um button e armazenar os dados em outra array para editar a const, tentei fazer e só deu erros e mais erros. Se não for pedir muito você poderia adaptar o seguinte código ao um button? const Count = 1; // Cheat count type TMemDump = array[0..31] of Byte; TCheatList = record Offset : Cardinal; MemDump : TMemDump; cName : String; end; const ProcessesDumps: array[0..Count -1] of TCheatList = ( (Offset : $4C8259; MemDump :($A1, $38, $BD, $4C, $00, $8B, $00, $8B, $4D, $FC, $BA, $C0, $82, $4C, $00, $E8, $1F, $F1, $FF, $FF, $33, $DB, $E8, $F8, $BE, $F3, $FF, $33, $C0, $5A, $59, $59); cName : 'HACK') ); Assim, ele está declarado como const com seu valor certo ai , tudo bonitinho, eu preciso passar o código para um button e armazenar os dados da ProcessesDumps em outra variável e então editar o dados da mesma , Exemplo: procedure TForm1.Button1Click(Sender: TObject); var newdados : array[0..Count -1] of TCheatList; begin newdados := [AQUI O CODE PARA INSERIR VALORES SEMELHANTES AO DO CONST] changeConst(ProcessesDumps,newdados , SizeOf(integer)); end; porque eles não são lidos como string, eu tentei adaptar mas o valor retornado na memória é alterado. Se for possivel fazer isso ficarei muito grato Jhonas, agradeço desde já !
-
Não jhonas , você não intendeu ! Esse código do qual você postou é o mesmo do meu , só com algumas modificações, enfim oque eu quero fazer é o seguinte: EDITAR OS VALORES ((Offset : $4C8259; //Catastrophe MemDump :($A1, $38, $BD, $4C, $00, $8B, $00, $8B, $4D, $FC, $BA, $C0, $82, $4C, $00, $E8, $1F, $F1, $FF, $FF, $33, $DB, $E8, $F8, $BE, $F3, $FF, $33, $C0, $5A, $59, $59)), (Offset : $4C8259; //Catastrophe MemDump :($7C, $23, $8B, $45, $FC, $80, $38, $C1, $75, $1B, $8B, $45, $FC, $80, $78, $02, $F3, $75, $12, $8B, $45, $FC, $80, $78, $03, $00, $75, $09, $8B, $45, $FC, $80))); NO CASO EU QUERO MANIPULAR ELES, PARA QUE SEJA CARREGADO POR UM LISTBOX OU UM .TXT OLHE UM EXEMPLO ABAIXO unit Unit2; interface uses Windows, tlhelp32, SysUtils; const Count = 2; // Cheat count type TMemDump = array[0..31] of Byte; TCheatList = record Offset : Cardinal; MemDump : TMemDump; end; const ProcessesDumps: array[0..Count -1] of TCheatList = [CÓDIGO PRA LER OS DADOS DIRETO DO LISTBOX] implementation function ScanProcessMemory(hProcess: THandle):Boolean; var I: Integer; aTmpBuffer: array[0..31] of Byte; aBytesRead: DWORD; begin for I := 0 to count do begin aBytesRead := 0; ReadProcessMemory(hProcess, Pointer(ProcessesDumps[i].Offset),@aTmpBuffer, SizeOf(aTmpBuffer), aBytesRead); if CompareMem(@aTmpBuffer,@ProcessesDumps[i].MemDump,32) then begin Result := True; Exit; end; end; Result := False; end; procedure SystemProcessesScan; var hProcessSnap, hProcess: THandle; pe32: PROCESSENTRY32; begin hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hProcessSnap <> INVALID_HANDLE_VALUE then begin pe32.dwSize := SizeOf(PROCESSENTRY32); if Process32First(hProcessSnap, pe32) then begin repeat hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE,pe32.th32ProcessID); if not (hProcess = 0) then begin if (ScanProcessMemory(hProcess)) then begin // do somthing Here! ExitProcess(0); end; end; until not Process32Next(hProcessSnap, pe32); end; CloseHandle(hProcessSnap); end; end; end. no caso do const ProcessesDumps: array[0..Count -1] of TCheatList = QUERO QUE ELE PUCHE OS VALORES DE UM LISTBOX se você não intendeu me fale..
-
const ProcessesDumps: array[0..Count -1] of TCheatList = ( TXT CODE HERE ! ); Como seria possivel eu declarar uma constante to tipo array para ler um .txt ou qualquer outra String, até mesmo as linhas de uma listbox, eu tentei de várias formas e não obtive resultados, será que alguém poderia me ajuda? Abaixo o code pra melhor entendimento do mesmo. Preciso urgentissimo do sistema , porfavor me ajudem :S unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, tlhelp32, StdCtrls; const Count = 1; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; ListBox2: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; type TMemDump = array[0..31] of Byte; TCheatList = record Offset : cardinal; MemDump : TMemDump; cName : String; end; const ProcessesDumps: array[0..Count -1] of TCheatList = ( (Offset : $403E10; MemDump :($51, $56, $6a, $00, $ff, $15, $34, $61, $41, $00, $a3, $7c, $af, $41, $00, $e8, $bc, $00, $00, $00, $8b, $35, $bc, $60, $41, $00, $85, $c0, $75, $04, $6a, $ff); cName : 'MEUHACKO(H)') );
-
Valeu jhonas era essa api que eu estava atrás Obrigado mesmo.
-
MagicApiHook não tem o do suspendprocess nem terminateprocess essa outra não tem sentido, ela só tem umas dll na pasta com um demohook.exe , ele ao aberto faz uma api hook mas não tem exemplos em nenhuma linguagem nem .dcu nada.
-
Peguei uma source da net de um minimizador de uma aplicação.. no caso ele tem um HookDLL.cpp e um HookDLL.h Quando vou compilar ele da 3 seguintes erros: ----------------------------------------------------------------------------------------------------- HookDLL.cpp|208|error: function `BOOL IH()' definition is marked dllimport.| HookDLL.cpp|220|error: function `BOOL UIH()' definition is marked dllimport.| HookDLL.cpp|319|error: function `void SR(INT, INT)' definition is marked dllimport.| ||=== Build finished: 3 errors, 0 warnings ===| ------------------------------------------------------------------------------------------------------ Não sou programador de C++ portanto não sei fixar o erro, se alguém me ajudar ficarei muito grato, abaixo a source do mesmo: [b]HOOKDLL.cpp[/b] // HookDLL.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "HookDLL.h" __declspec (dllexport) BOOL IH(); BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //Flesh out the entry point pending full implimentation // reserve the DLL handle ghModule = (HINSTANCE)hModule; // register system-wide message SWM_TRAYMSG = RegisterWindowMessage("TRAY_ACTIVATED"); // will be used when sending window to tray switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } LRESULT CALLBACK KBHookProc(int nCode,WPARAM wParam,LPARAM lParam) { //Flesh out the function pending implimentation if(nCode < 0) { return CallNextHookEx(g_KBHook,nCode,wParam,lParam); } switch(wParam) { case VK_F11: if(HIWORD(lParam)){ // the Key is down if(g_bKeyF11) // key is already down break; if(g_InUse) // a window is already subclassed { if(WindowValid()) // check if previous window is still valid break; } // ok the hook has been requested to drop program to window HWND hWnd = GetForegroundWindow(); // get the handle for the forground window if(!IsMu(hWnd)) break; g_InUse = SubClassWindowProc(hWnd); // subclass the window and get its icon for its minimization if(g_InUse) { ChangeDisplaySettings(NULL,0); // drop back to windows settings SetWindowRect(hWnd); } SetTimer(hWnd, IDT_RESET,100,TimerProc); g_bKeyF11 = TRUE; } else { // the key is up g_bKeyF11 = FALSE; } break; case VK_F12: if(HIWORD(lParam)){ // the Key is down if(!g_Window.m_Hidden) { g_Window.m_Hidden = TRUE; Shell_NotifyIcon(NIM_ADD, &g_Window.m_niData); // hide window ShowWindow(g_Window.m_hWnd, SW_HIDE); } } break; } return CallNextHookEx(g_KBHook, nCode, wParam, lParam); } LRESULT CALLBACK SCWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch(uMsg) { case WM_DESTROY: KillTimer(g_Window.m_hWnd,IDT_RESET); RestoreWindowProc(); break; case WM_SIZE: case WM_ACTIVATE: case WM_SETFOCUS: case WM_KILLFOCUS: return DefWindowProc(hWnd,uMsg,wParam,lParam); break; case WM_CLOSE: KillTimer(g_Window.m_hWnd,IDT_RESET); RestoreWindowProc(); break; case WM_ACTIVATEAPP: if((BOOL)wParam) SetCapture(g_Window.m_hWnd); else ReleaseCapture(); return DefWindowProc(hWnd,uMsg,wParam,lParam); break; case WM_SETCURSOR: case WM_NCACTIVATE: return DefWindowProc( hWnd, uMsg, wParam, lParam ); break; case WM_COMMAND: if(wParam == EN_KILLFOCUS) return DefWindowProc( hWnd, uMsg, wParam, lParam ); break; case WM_MOUSEMOVE: { RECT rct = { 0,0,0,0 }; POINTS pos = MAKEPOINTS(lParam); GetClientRect(hWnd,&rct); if(pos.x <= rct.right) { if(pos.y <= rct.bottom) { ShowCursor(FALSE); break; } } ShowCursor(TRUE); return DefWindowProc(hWnd,uMsg,wParam,lParam); } case WM_MOUSELEAVE: return DefWindowProc(hWnd,uMsg,wParam,lParam); break; case WM_SYSCOMMAND: // Intercept System Commands { switch (wParam) // Check System Calls { case SC_SCREENSAVE: // Screensaver Trying To Start? case SC_MONITORPOWER: // Monitor Trying To Enter Powersave? return 0; // Prevent From Happening } break; // Exit } default: if(uMsg == SWM_TRAYMSG) { if(lParam == WM_LBUTTONDOWN) { Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden = FALSE; } } break; } /* switch(uMsg) { case WM_DESTROY: case WM_CLOSE: return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); break; case WM_COMMAND: if(wParam != EN_KILLFOCUS) return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); break; case WM_MOUSEMOVE: { RECT rct = { 0,0,0,0 }; POINTS pos = MAKEPOINTS(lParam); GetWindowRect(hWnd,&rct); if(pos.x <= rct.right) if(pos.y <= rct.bottom) return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); break; } default: if(uMsg == SWM_TRAYMSG) { if(lParam == WM_LBUTTONDOWN) { Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden = FALSE; } } break; }*/ //Flesh out the function pending implimentation //return DefWindowProc(hWnd,uMsg,wParam,lParam); return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); } [b]HOOKDLL_API BOOL IH()[/b] { g_KBHook = SetWindowsHookEx(WH_KEYBOARD, KBHookProc, ghModule, 0); if( g_KBHook == NULL ){ return FALSE; } return TRUE; } [b]HOOKDLL_API BOOL UIH()[/b] { if(g_InUse) RestoreWindowProc(); return UnhookWindowsHookEx(g_KBHook); } HICON GetFileIconHandle(LPCTSTR lpszFileName, BOOL bSmallIcon) { UINT uFlags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES; if (bSmallIcon) uFlags |= SHGFI_SMALLICON; else uFlags |= SHGFI_LARGEICON; SHFILEINFO sfi; SHGetFileInfo(lpszFileName, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), uFlags); return sfi.hIcon; } BOOL SubClassWindowProc(HWND hWnd) { char szText[255]; GetWindowText(hWnd, szText, 255); // prepare a NotifyData struct for this window ZeroMemory(&(g_Window.m_niData), sizeof(NOTIFYICONDATA)); g_Window.m_niData.cbSize = sizeof(NOTIFYICONDATA); g_Window.m_niData.hWnd = hWnd; HICON hIcon = (HICON)SendMessage(hWnd, WM_GETICON, ICON_SMALL,0); if(!hIcon){ char szPath[255]; HMODULE hModule = (HMODULE)OpenProcess(0, FALSE, GetWindowThreadProcessId(hWnd, 0)); GetModuleFileName(hModule, szPath, 255); hIcon = GetFileIconHandle(szPath, TRUE); } if(hIcon){ g_Window.m_niData.hIcon = CopyIcon(hIcon); } else{ g_Window.m_niData.hIcon = LoadIcon(NULL, IDI_QUESTION); } g_Window.m_niData.uID = TRAYICONID; g_Window.m_niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; strcpy(g_Window.m_niData.szTip, szText); g_Window.m_niData.uCallbackMessage = SWM_TRAYMSG; g_Window.m_hWnd = hWnd; g_Window.m_Hidden = FALSE; g_Window.m_OrigWndProc = GetWindowLongPtr(hWnd,GWL_WNDPROC); if(SetWindowLongPtr(hWnd,GWL_WNDPROC,(LONG)SCWinProc) == g_Window.m_OrigWndProc) g_Window.m_Subclassed = TRUE; else g_Window.m_Subclassed = FALSE; return g_Window.m_Subclassed; } BOOL RestoreWindowProc() { g_Window.m_Subclassed = FALSE; g_Window.m_Hidden = FALSE; Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden = FALSE; g_InUse = FALSE; return ( SetWindowLongPtr(g_Window.m_hWnd,GWL_WNDPROC,(LONG)g_Window.m_OrigWndProc) >= 0); } VOID SetWindowRect(HWND hWnd) { RECT rct = { 0,0 ,g_XRES,g_YRES }; BOOL bHasMenu = TRUE; SetWindowLongPtr(hWnd,GWL_STYLE,(LONG)WS_HOOKEDWINDOW); SetWindowLongPtr(hWnd,GWL_EXSTYLE,(LONG)WS_EX_OVERLAPPEDWINDOW); if(GetMenu(g_Window.m_hWnd) == NULL) bHasMenu = FALSE; AdjustWindowRectEx(&rct,WS_HOOKEDWINDOW,bHasMenu,WS_EX_OVERLAPPEDWINDOW); SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,rct.right - rct.left,rct.bottom-rct.top,SWP_HOOKED); ShowCursor(TRUE); } [b]HOOKDLL_API VOID SR(INT Width,INT Height)[/b] { g_XRES = Width; g_YRES = Height; } BOOL WindowValid() { HWND hWnd = GetWindow(g_Window.m_hWnd,GW_HWNDFIRST); // QUICKHACK: to check if window is still valid DWORD ErrorCode = GetLastError(); if(ErrorCode == ERROR_INVALID_WINDOW_HANDLE) return FALSE; return TRUE; } VOID CALLBACK TimerProc( HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { if(idEvent == IDT_RESET) { if(!WindowValid()) { KillTimer(g_Window.m_hWnd,IDT_RESET); MessageBox(g_Window.m_hWnd,"Timer killed","TIMER",MB_OK); } if(!g_Window.m_Hidden) { RECT rct = { 0,0, g_XRES,g_YRES }; BOOL bHasMenu = TRUE; if(GetMenu(g_Window.m_hWnd) == NULL) bHasMenu = FALSE; AdjustWindowRectEx(&rct,WS_HOOKEDWINDOW,bHasMenu,WS_EX_OVERLAPPEDWINDOW); SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,rct.right - rct.left,rct.bottom-rct.top,SWP_HOOKED); //ShowCursor(TRUE); } } } BOOL IsMu(HWND hWnd) { char szText[255]=""; char szPath[255]=""; char szTokS[] = "\\/"; char *szTokC = NULL; char szTokO[255]=""; int Len = 0; HMODULE hModule = (HMODULE)OpenProcess(0, FALSE, GetWindowThreadProcessId(hWnd, 0)); Len = GetWindowText(hWnd, szText, 255); if(strcmp(strlwr(szText),"mu") != 0 ) return FALSE; GetModuleFileName(hModule, szPath, 255); CloseHandle(hModule); szTokC = strtok(szPath,szTokS); while(szTokC != NULL) { strcpy(szTokO,szTokC); szTokC = strtok(NULL,szTokS); } if(strcmp(strlwr(szTokO),"main.exe") != 0) return FALSE; return TRUE; } [b]HOOKDLL.h[/b] // The following ifdef block is the standard way of creating macros which make exporting // from a DLL simpler. All files within this DLL are compiled with the HOOKDLL_EXPORTS // symbol defined on the command line. this symbol should not be defined on any project // that uses this DLL. This way any other project whose source files include this file see // HOOKDLL_API functions as being imported from a DLL, whereas this DLL sees symbols // defined with this macro as being exported. #ifdef HOOKDLL_EXPORTS // dont decorate the exports #define HOOKDLL_API extern "C" __declspec(dllexport) #else #define HOOKDLL_API extern "C" __declspec(dllimport) #endif #define IDT_RESET (WM_USER+WM_TIMER+0xff) #define SC_SENDTOTRAY (-90) #define TRAYICONID 4 #define WS_HOOKEDWINDOW (WS_CAPTION | \ WS_SYSMENU) #define SWP_HOOKED (SWP_DRAWFRAME | \ SWP_FRAMECHANGED | \ SWP_NOMOVE | \ SWP_NOZORDER | \ SWP_SHOWWINDOW) struct WNDDATA{ HWND m_hWnd; LRESULT m_OrigWndProc; NOTIFYICONDATA m_niData; BOOL m_Subclassed; BOOL m_Hidden; }; #pragma data_seg(".SHARE") HHOOK g_KBHook = NULL; WNDDATA g_Window; BOOL g_InUse = FALSE; BOOL g_bKeyF12 = FALSE; BOOL g_bKeyF11 = FALSE; INT g_XRES = 800; INT g_YRES = 600; // default to 800 * 600 UINT SWM_TRAYMSG; #pragma data_seg() #pragma comment(linker,"/SECTION:.SHARE,RWS") HINSTANCE ghModule = NULL; HOOKDLL_API BOOL IH(); HOOKDLL_API BOOL UIH(); HICON GetFileIconHandle(LPCTSTR lpszFileName, BOOL bSmallIcon); BOOL SubClassWindowProc(HWND hWnd); BOOL RestoreWindowProc(); BOOL IsMu(HWND hWnd); LRESULT CALLBACK SCWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // subclassed window proc LRESULT CALLBACK KBHookProc(INT nCode,WPARAM wParam,LPARAM lParam); // the KeyBoard proc VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime); VOID SetWindowRect(HWND hWnd); HOOKDLL_API VOID SR(INT Width,INT Height); BOOL WindowValid(); agradeço desde já.
-
Esse é em c++ Jhonas, eu só programo na linguagem pascal :S não saberia onde tem uma biblioteca api na pascal? não precisa ser bms eu dou um jeito ------------------- No caso eu queria um que bloqueasse o suspendprocess e o terminateprocess entende? Na net eu testei muitos , nenhum funcionou comigo ta complicado
-
Olá pessoal, se não me engano em 2004 um brasileiro chamado Nildo liberou uma Biblioteca de ApiHook na internet. Tem em vários sites de download famosos como baixaki, superdownloads , porém todos com link offline. Estou precisando urgentemente dessa biblioteca eu queria saber se alguém sabe algum mirror, estou desesperado já. Procurei em quase todos os sites de mirror, como 4shared, sendspace , rapidshare e não achei nada relacionado ao mesmo Nome do projeto - BMSApiHook nome do antigo site - www.projetobms.net Preciso urgentemente da mesma se alguém me passar ficaria muito grato, obrigado desde já !