
Francis carlos
Membros-
Total de itens
10 -
Registro em
-
Última visita
Tudo que Francis carlos postou
-
Converter Codigo c+ para delphi
pergunta respondeu ao Francis carlos de Francis carlos em Delphi, Kylix
não é bem isso esse programa parece que da load em dll c+ o que eu quero é comverter o code esse programa num converte .cpp nem .h -
Ola!! já tentei usar um programa C2 Delphi pra converter + não ficou muito bom. quero por este code em uma dll
-
ola ajudem com esse code gostaria que convertecem em delphi...
-
ola !! tenho um driver.sys estou dando load no driver virtual meu problema é como colocar umas função dentro desse driver ex: //para dar load no driver var Res: boolean; r: dword; begin drPath := ExtractFilePath(paramstr(0)) + 'Driver.sys'; InstallDriver(drName, PChar(drPath)); LoadDriver(drName); Res := OpenDriver(); if Res then begin end else begin end; end; //função que quero dentro do driver function processExists(exeFileName: string): Boolean; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); Result := False; while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin Result := True; end; ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
-
Ola !! eu axei um code, e estava faltando umas paradinha e tentei corrigir mas ainda não funciona 100% eu aperto f11 a aplicação fica em 800x600 mas quando aperto f12 não ta copiando e criando o icon da outra aplicação no systray e não da hide na aplicação. gostaria que decem uma olhada e comentacem que ta errado. unit minim; interface uses Windows, Messages,SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ShellApi; const IDT_RESET = (WM_USER+WM_TIMER+255); SC_SENDTOTRAY = -9; TRAYICONID = 4; WS_HOOKEDWINDOW = (WS_CAPTION or WS_SYSMENU); SWP_HOOKED = (SWP_DRAWFRAME or SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOZORDER or SWP_SHOWWINDOW); type WNDDATA = record m_hWnd: HWND; m_OrigWndProc:LRESULT; m_niData: NOTIFYICONDATA; m_Subclassed: BOOL; m_Hidden: BOOL; m_Minimize: BOOL; end; {<div>#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")</div> } var ghModule: HINST = 0; function IH: BOOL; cdecl; function UIH: BOOL; cdecl; function GetFileIconHandle(lpszFileName: LPCTSTR; bSmallIcon: BOOL): HICON; function SubClassWindowProc(hWnd: HWND): BOOL; function RestoreWindowProc: BOOL; function IsMu(hWnd: HWND): BOOL; function SCWinProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; function KBHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall; procedure SetWindowRect(hWnd: HWND); procedure SR(Width, Height: Integer); cdecl; function WindowValid: BOOL; implementation procedure MyDllProc(Reason: Integer); var SWM_TRAYMSG:UINT; begin //Flesh out the entry point pending full implimentation // reserve the DLL handle ghModule := HInstance; // register system-wide message SWM_TRAYMSG := RegisterWindowMessage('TRAY_ACTIVATED'); case Reason of DLL_PROCESS_ATTACH: begin end; DLL_THREAD_ATTACH: begin end; DLL_THREAD_DETACH: begin end; DLL_PROCESS_DETACH: begin end; end; end; function KBHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var hWnd1: HWND; g_KBHook: HHOOK; g_bKeyF12,g_bKeyF11,g_InUse: BOOL; sDispMode: DevMode; g_Window:WNDDATA; HandleJan: THandle; begin //Flesh out the function pending implimentation if nCode < 0 then begin Result := CallNextHookEx(g_KBHook, nCode, wParam, lParam); Exit; end; case wParam of VK_F11: begin if HIWORD(lParam) <> 0 then // the Key is down begin if not g_bKeyF11 then // key is not already down begin if not (g_InUse and WindowValid) then // a window is not subclassed or previous window is invalid begin // ok the hook has been requested to drop program to window hWnd1 := GetForegroundWindow; // get the handle for the forground window if IsMu(hWnd1) then begin g_InUse := SubClassWindowProc(hWnd1); // subclass the window and get its icon for its minimization if g_InUse then begin ChangeDisplaySettings(sDispMode,0); // drop back to windows settings SetWindowRect(hWnd1); end; SetTimer(hWnd1, IDT_RESET, 100, @TimerProc); g_bKeyF11 := True; end; end; end; end else begin // the key is up g_bKeyF11 := False; end; end; VK_F12: begin if HIWORD(lParam) <> 0 then // the Key is down begin if not g_Window.m_Hidden then begin g_Window.m_Hidden := True; Shell_NotifyIcon(NIM_ADD, @g_Window.m_niData); // hide window ShowWindow(g_Window.m_hWnd, SW_HIDE); end; end; end; end; Result := CallNextHookEx(g_KBHook, nCode, wParam, lParam); end; function SCWinProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var rct: TRect; pos: TPOINT; g_Window:WNDDATA; SWM_TRAYMSG:UINT; begin case uMsg of WM_DESTROY: begin KillTimer(g_Window.m_hWnd, IDT_RESET); RestoreWindowProc; end; WM_SIZE, WM_ACTIVATE, WM_SETFOCUS, WM_KILLFOCUS: begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_CLOSE: begin KillTimer(g_Window.m_hWnd, IDT_RESET); RestoreWindowProc; end; WM_ACTIVATEAPP: begin if wParam <> 0 then SetCapture(g_Window.m_hWnd) else ReleaseCapture; Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_SETCURSOR, WM_NCACTIVATE: begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_COMMAND: begin if wParam = EN_KILLFOCUS then begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; end; WM_MOUSEMOVE: begin rct := Rect(0, 0, 0, 0); pos := POINT(0, 0, ); GetClientRect(hWnd, rct); if pos.x <= rct.right then begin if pos.y <= rct.bottom then begin ShowCursor(False); // Break; end; end; ShowCursor(True); Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_MOUSELEAVE: begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_SYSCOMMAND: // Intercept System Commands begin case wParam and $FFF0 of // Check System Calls SC_SCREENSAVE, // Screensaver Trying To Start? SC_MONITORPOWER: begin // Monitor Trying To Enter Powersave? Result := 0; // Prevent From Happening Exit; end; else if uMsg = SWM_TRAYMSG then begin if lParam = WM_LBUTTONDOWN then begin Shell_NotifyIcon(NIM_DELETE, @g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden := False; end; end; end; //Flesh out the function pending implimentation //Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Result := CallWindowProc(TFNWndProc(g_Window.m_OrigWndProc), hWnd, uMsg,wParam, lParam); end; end; end; function IH: BOOL; cdecl; var g_KBHook: HHOOK; begin g_KBHook := SetWindowsHookEx(WH_KEYBOARD, KBHookProc, ghModule, 0); Result := (g_KBHook <> 0); end; function UIH: BOOL; cdecl; var g_InUse: BOOL; g_KBHook: HHOOK; begin if g_InUse then RestoreWindowProc; Result := UnhookWindowsHookEx(g_KBHook); end; function GetFileIconHandle(lpszFileName: LPCTSTR; bSmallIcon: BOOL): HICON; var uFlags: UINT; sfi: SHFILEINFO; begin uFlags := SHGFI_ICON or SHGFI_USEFILEATTRIBUTES; if bSmallIcon then uFlags := uFlags or SHGFI_SMALLICON else uFlags := uFlags or SHGFI_LARGEICON; SHGetFileInfo(lpszFileName, FILE_ATTRIBUTE_NORMAL, sfi, SizeOf(SHFILEINFO), uFlags); Result := sfi.hIcon; end; function SubClassWindowProc(hWnd: HWND): BOOL; var szText: array[0..254] of Char; szPath: array[0..254] of Char; hIcon1: HICON; hModule1: HMODULE; g_Window:WNDDATA; SWM_TRAYMSG:UINT; begin 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.Wnd := hWnd; hIcon1 := HICON(SendMessage(hWnd, WM_GETICON, ICON_SMALL, 0)); if hIcon1 <> 0 then begin hModule1 := HMODULE(OpenProcess(0, False, GetWindowThreadProcessId(hWnd))); GetModuleFileName(hModule1, szPath, 255); hIcon1 := GetFileIconHandle(szPath, True); end; if hIcon1 <0>= 0); end; procedure SetWindowRect(hWnd: HWND); var rct: TRect; bHasMenu: BOOL; g_YRES,g_XRES:UINT;// = 800; g_Window:WNDDATA; HandleJan: THandle; begin g_XRES := 800; g_YRES := 600; rct := Rect(0, 0, g_XRES, g_YRES); bHasMenu := True; SetWindowLongA(hWnd, GWL_STYLE, WS_HOOKEDWINDOW); SetWindowLongA(hWnd, GWL_EXSTYLE, WS_EX_OVERLAPPEDWINDOW); if GetMenu(g_Window.m_hWnd) = 0 then 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); end; procedure SR(Width, Height: Integer); cdecl; var g_YRES,g_XRES:UINT; begin g_XRES := Width; g_YRES := Height; end; function WindowValid: BOOL; var hWnd1: HWND; ErrorCode: DWORD; g_Window:WNDDATA; begin hWnd1 := GetWindow(g_Window.m_hWnd, GW_HWNDFIRST); // QUICKHACK: to check if window is still valid ErrorCode := GetLastError; Result := (ErrorCode <> ERROR_INVALID_WINDOW_HANDLE); end; procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall; var rct: TRect; bHasMenu: BOOL; g_Window:WNDDATA; g_YRES,g_XRES:UINT;// = 800; begin g_XRES := 800; g_YRES := 600; if idEvent = IDT_RESET then begin if not WindowValid then begin KillTimer(g_Window.m_hWnd, IDT_RESET); MessageBox(g_Window.m_hWnd, 'Timer killed', 'testando', MB_OK); end; if not g_Window.m_Hidden then begin rct := Rect(0, 0, g_XRES, g_YRES); bHasMenu := True; if GetMenu(g_Window.m_hWnd) = 0 then 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); end; end; end; function IsMu(hWnd: HWND): BOOL; var szText: array[0..254] of Char; szPath: array[0..254] of Char; Len: Integer; hModule1: HMODULE; begin szText[0] := #0; szPath[0] := #0; hModule1 := HMODULE(OpenProcess(0, False, GetWindowThreadProcessId(hWnd))); Len := GetWindowText(hWnd, szText, 255); if StrIComp(szText, 'MU') <> 0 then begin Result := False; Exit; end; GetModuleFileName(hModule1, szPath, 255); CloseHandle(hModule1); if not AnsiSameText(ExtractFileName(szPath), 'main.exe') then begin Result := False; Exit; end; Result := True; end; exports IH, UIH, SR; initialization DllProc := MyDllProc; MyDllProc(DLL_PROCESS_ATTACH); finalization DllProc := nil; end.
-
Mudar resolução e Minimimizar outro aplicativo
pergunta respondeu ao Francis carlos de Francis carlos em Delphi, Kylix
sim mas que eu realmente quero e por resolução nesse outro aplicativo que é um jogo quando ele ta em full resolução essa função aii não minimiza ex: handleJan := FindWindow('MU', nil); << resolução 800*600 minimize -
queria uma ajuda para minimizar e mudar resolução para 800*600 do outro aplicativo estou tentando com esse code.. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Registry,TypInfo; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private procedure WMHotkey(var Msg: TWMHotkey); message WM_HOTKEY; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation const sw : longint = 800; sh : longint = 600; procedure TForm1.WMHotkey(var Msg: TWMHotkey); var HandleJan: THandle; i , w : integer; begin w := width; // automatico ou pode usar a constante sh Scaled := true; if (Screen.width <> sw) then Scaleby(screen.width,sw); for i := ComponentCount-1 downto 0 do with Components[i] do begin if GetPropInfo(ClassInfo, 'Font') <> nil then Font.Size := (width div w) * font.Size; handleJan := FindWindow('Notepad', nil); if HandleJan <> 0 then SendMessage(HandleJan,WM_SYSCOMMAND, SC_MINIMIZE, 0); end; end; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin if not RegisterHotkey(Handle,1,0,VK_F11) then ShowMessage('Erro ao programar F11'); if not RegisterHotkey(Handle, 2, MOD_CONTROL or MOD_ALT, VK_F12) then ShowMessage('Erro ao programar Ctrl+Alt+F12'); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotkey(Handle, 1); UnRegisterHotkey(Handle, 2); end; procedure TForm1.Button1Click(Sender: TObject); var HandleJan: THandle; Registry: TRegistry; begin handleJan := FindWindow('Notepad', nil); if HandleJan <> 0 then SendMessage(HandleJan, WM_SYSCOMMAND, SC_Restore, 0); end; end. ele minimiza outro aplicativo mas não muda a resolução do outro aplicativo e sim o meu :(
-
Code não copila ajuda corrigir erro
pergunta respondeu ao Francis carlos de Francis carlos em Delphi, Kylix
amigo é que ta mal convertida, ta com muitos errinhos você poderia ajudar corrigir ex: type WNDDATA = record m_hWnd: HWND; m_OrigWndProc LRESULT; << falta : m_niData: NOTIFYICONDATA; m_Subclassed: BOOL; m_Hidden: BOOL; end; e otras coisinhas -
unit HookDLL; interface uses Windows; const IDT_RESET = (WM_USER+WM_TIMER+0xff); SC_SENDTOTRAY = -90; TRAYICONID = 4; WS_HOOKEDWINDOW = (WS_CAPTION or WS_SYSMENU); SWP_HOOKED = (SWP_DRAWFRAME or SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOZORDER or SWP_SHOWWINDOW); type WNDDATA = record m_hWnd: HWND; m_OrigWndProc LRESULT; m_niData: NOTIFYICONDATA; m_Subclassed: BOOL; m_Hidden: BOOL; end; <div>#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")</div> var ghModule: HINSTANCE = 0; function IH: BOOL; cdecl; function UIH: BOOL; cdecl; function GetFileIconHandle(lpszFileName: LPCTSTR; bSmallIcon: BOOL): HICON; function SubClassWindowProc(hWnd: HWND): BOOL; function RestoreWindowProc: BOOL; function IsMu(hWnd: HWND): BOOL; function SCWinProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; function KBHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD); stdcall; procedure SetWindowRect(hWnd: HWND); procedure SR(Width, Height: Integer); cdecl; function WindowValid: BOOL; implemenation uses ShellApi, SysUtils; procedure MyDllProc(Reason: Integer); begin //Flesh out the entry point pending full implimentation // reserve the DLL handle ghModule = HInstance; // register system-wide message SWM_TRAYMSG := RegisterWindowMessage('TRAY_ACTIVATED'); case Reason of DLL_PROCESS_ATTACH: begin end; DLL_THREAD_ATTACH: begin end; DLL_THREAD_DETACH: begin end; DLL_PROCESS_DETACH: begin end; end; end; function KBHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var hWnd: HWND; begin //Flesh out the function pending implimentation if nCode < 0 then begin Result := CallNextHookEx(g_KBHook, nCode, wParam, lParam); Exit; end; case wParam of VK_F11: begin if HIWORD(lParam) <> 0 then // the Key is down begin if not g_bKeyF11 then // key is not already down begin if not (g_InUse and WindowValid) then // a window is not subclassed or previous window is invalid begin // ok the hook has been requested to drop program to window hWnd := GetForegroundWindow; // get the handle for the forground window if IsMu(hWnd) then begin g_InUse := SubClassWindowProc(hWnd); // subclass the window and get its icon for its minimization if g_InUse then begin ChangeDisplaySettings(nil, 0); // drop back to windows settings SetWindowRect(hWnd); end; SetTimer(hWnd, IDT_RESET, 100, TimerProc); g_bKeyF11 := True; end; end; end; end else begin // the key is up g_bKeyF11 := False; end; end; VK_F12: begin if HIWORD(lParam) <> 0 then // the Key is down begin if not g_Window.m_Hidden then begin g_Window.m_Hidden := True; Shell_NotifyIcon(NIM_ADD, @g_Window.m_niData); // hide window ShowWindow(g_Window.m_hWnd, SW_HIDE); end; end; end; end; Result := CallNextHookEx(g_KBHook, nCode, wParam, lParam); end; function SCWinProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var rct: TRect; pos: POINTS; begin case uMsg of WM_DESTROY: begin KillTimer(g_Window.m_hWnd, IDT_RESET); RestoreWindowProc; end; WM_SIZE, WM_ACTIVATE, WM_SETFOCUS, WM_KILLFOCUS: begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; WM_CLOSE: begin KillTimer(g_Window.m_hWnd, IDT_RESET); RestoreWindowProc; end; WM_ACTIVATEAPP: begin if wParam <> 0 then SetCapture(g_Window.m_hWnd) else ReleaseCapture; Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_SETCURSOR, WM_NCACTIVATE: begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_COMMAND: begin if wParam = EN_KILLFOCUS then begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; end; WM_MOUSEMOVE: begin rct = Rect(0, 0, 0, 0); pos := MAKEPOINTS(lParam); GetClientRect(hWnd, rct); if pos.x <= rct.right then begin if pos.y <= rct.bottom then begin ShowCursor(False); Break; end; end; ShowCursor(True); Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_MOUSELEAVE: begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Exit; end; WM_SYSCOMMAND: // Intercept System Commands begin case wParam and $FFF0 of // Check System Calls SC_SCREENSAVE, // Screensaver Trying To Start? SC_MONITORPOWER: begin // Monitor Trying To Enter Powersave? Result := 0; // Prevent From Happening Exit; end; end; else if uMsg = SWM_TRAYMSG then begin if lParam = WM_LBUTTONDOWN then begin Shell_NotifyIcon(NIM_DELETE, @g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden := False; end; end; end; //Flesh out the function pending implimentation //Result := DefWindowProc(hWnd, uMsg, wParam, lParam); Result := CallWindowProc(TFNWndProc(g_Window.m_OrigWndProc), hWnd, uMsg,wParam, lParam); end; function IH: BOOL; cdecl; begin g_KBHook := SetWindowsHookEx(WH_KEYBOARD, KBHookProc, ghModule, 0); Result := (g_KBHook <> nil); end; function UIH: BOOL; cdecl; begin if g_InUse then RestoreWindowProc; Result := UnhookWindowsHookEx(g_KBHook); end; function GetFileIconHandle(lpszFileName: LPCTSTR; bSmallIcon: BOOL): HICON; var uFlags: UINT; sfi: SHFILEINFO; begin uFlags := SHGFI_ICON or SHGFI_USEFILEATTRIBUTES; if bSmallIcon then uFlags := uFlags or SHGFI_SMALLICON else uFlags := uFlags or SHGFI_LARGEICON; SHGetFileInfo(lpszFileName, FILE_ATTRIBUTE_NORMAL, @sfi, SizeOf(SHFILEINFO), uFlags); Result := sfi.hIcon; end; function SubClassWindowProc(hWnd: HWND): BOOL; var szText: array[0..254] of Char; szPath: array[0..254] of Char; hIcon: HICON; hModule: HMODULE; begin 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(SendMessage(hWnd, WM_GETICON, ICON_SMALL, 0)); if hIcon <> 0 then begin hModule := HMODULE(OpenProcess(0, False, GetWindowThreadProcessId(hWnd, 0))); GetModuleFileName(hModule, szPath, 255); hIcon := GetFileIconHandle(szPath, True); end; if hIcon <0>= 0); end; procedure SetWindowRect(hWnd: HWND); var rct: TRect; bHasMenu: BOOL; begin rct = Rect(0, 0, g_XRES, g_YRES); bHasMenu := True; SetWindowLongPtr(hWnd, GWL_STYLE, WS_HOOKEDWINDOW); SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_EX_OVERLAPPEDWINDOW); if GetMenu(g_Window.m_hWnd) = 0 then 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); end; procedure SR(Width, Height: Integer); cdecl; begin g_XRES := Width; g_YRES := Height; end; function WindowValid: BOOL; var hWnd: HWND; ErrorCode: DWORD; begin hWnd := GetWindow(g_Window.m_hWnd, GW_HWNDFIRST); // QUICKHACK: to check if window is still valid ErrorCode := GetLastError; Result := (ErrorCode <> ERROR_INVALID_WINDOW_HANDLE); end; procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD); stdcall; var rct: TRect; bHasMenu: BOOL; begin if idEvent = IDT_RESET then begin if not WindowValid then begin KillTimer(g_Window.m_hWnd, IDT_RESET); MessageBox(g_Window.m_hWnd, 'Timer killed', 'TIMER', MB_OK); end; if not g_Window.m_Hidden then begin rct = Rect(0, 0, g_XRES, g_YRES); bHasMenu := True; if GetMenu(g_Window.m_hWnd) = 0 then 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); end; end; end; function IsMu(hWnd: HWND): BOOL; var szText: array[0..254] of Char; szPath: array[0..254] of Char; Len: Integer; hModule: HMODULE; begin szText[0] := #0; szPath[0] := #0; hModule := HMODULE(OpenProcess(0, False, GetWindowThreadProcessId(hWnd, 0))); Len := GetWindowText(hWnd, szText, 255); if StrIComp(szText, 'mu') <> 0 then begin Result := False; Exit; end; GetModuleFileName(hModule, szPath, 255); CloseHandle(hModule); if not AnsiSameText(ExtractFileName(szPath), 'main.exe') then begin Result := False; Exit; end; Result := True; end; exports IH, UIH, SR; initialization DllProc := MyDllProc; MyDllProc(DLL_PROCESS_ATTACH.); finalization DllProc := nil; end.
-
Ola!! Ajuda Converter esse code para delphi7 // HookDLL.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "HookDLL.h" 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); } HOOKDLL_API BOOL IH() { g_KBHook = SetWindowsHookEx(WH_KEYBOARD, KBHookProc, ghModule, 0); if( g_KBHook == NULL ){ return FALSE; } return TRUE; } HOOKDLL_API BOOL UIH() { 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); } HOOKDLL_API VOID SR(INT Width,INT Height) { 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; } // 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();