본문 바로가기

삽질인생/delphi40

[Delphi] InnoSetup : 방화벽 추가 (netsh.exe) # WIN 7 이상 [Run] Filename: {sys}\netsh.exe; Parameters: "advfirewall firewall add rule name=""MyApp"" protocol=TCP dir=in program=""{app}\MyApp.exe"" action=allow localport=""8100,443"""; StatusMsg: "MyApp"; Flags: runhidden [UninstallRun] Filename: {sys}\netsh.exe; Parameters: "advfirewall firewall delete rule name=""MyApp"" program=""{app}\MyApp.exe"""; Flags: runhidden # WIN XP 이하 [Run] Filen.. 2021. 8. 30.
[Delphi] 프로그램 활성화하기 // --------------------------------------------// 파일이 실행상태가 아니면 실행하기// 최소화 상태면 활성화시키기// 다른 창 아래에 가려졌으면 맨 앞으로 가져오기// --------------------------------------------procedure test;begin h := WindowFromProcessID(getProcessId('실행파일명.exe')); // h := FindWindow('TFormName', nil); if h = 0 then ShellExecute(handle, 'open', PChar(FileName), nil, nil, SW_SHOW) else if IsIconic(h) then ShowWindow(h, SW_RESTO.. 2020. 8. 7.
[Delphi] ComPort 오류 수정 // 델파이 xe 등에서 한글 깨질때 string -> AnsiString 변경 function WriteStr(Str: AnsiString): Integer; function WriteStrAsync(var Str: AnsiString; var AsyncPtr: PAsync): Integer; // INFINITE는 작업 종료까지 무한대 기다리기 때문에 수정 function TCustomComPort.WaitForAsync(var AsyncPtr: PAsync): Integer; // Signaled := WaitForSingleObject(AsyncPtr^.Overlapped.hEvent, INFINITE); Signaled := WaitForSingleObject(AsyncPtr^.Overlappe.. 2020. 8. 3.
[Delphi] 기본 프린터 설정 및 정보 가져오기 type TPrinterInfo = record SeverName: PChar; PrinterName: PChar; ShareName: PChar; PortName: PChar; DriverName: PChar; Comment: PChar; Location: PChar; DeviceMode: PDeviceModeW; SepFile: PChar; PrintProcessor: PChar; DataType: PChar; Parameters: PChar; SecurityDescriptor: PSecurityDescriptor; Attributes: Cardinal; DefaultPriority: Cardinal; StartTime: Cardinal; UntilTime: Cardinal; Status: Cardi.. 2020. 5. 28.
[Delphi] TStringlist를 OleVariant로 변환하기 function StreamToVariant(Stream: TStream): OleVariant; var p: Pointer; begin Result := VarArrayCreate([0, Stream.Size - 1], varByte); p := VarArrayLock(Result); try Stream.Position := 0; Stream.Read(p^, Stream.Size); finally VarArrayUnlock(Result); end; end; function StringlistToVariant(aStrlist: TStrings): OleVariant; var hStream: TStream; begin hStream := TMemoryStream.Create; try aStrlist.Sav.. 2019. 6. 14.
[Delphi] Webbrowser html 가져오기 방법1) WB.OleObject.Document.documentElement.outerHTML; 방법2) function GetHTML: String; Var E: IHTMLElement; begin result := ''; if Assigned(WB.Document) then begin E := (WB.Document as IHTMLDocument2).body; while E.parentElement nil do begin E := E.parentElement; end; result := E.outerHTML; end; end; 2019. 6. 14.
[Delphi] 중국어 번체<->간체 function StrConv(const sText: String; Conversion: DWORD): String; overload; var nSize: Integer; begin nSize := LCMapString(LOCALE_SYSTEM_DEFAULT, Conversion, PChar(sText), Length(sText), nil, 0); SetLength(Result, nSize); nSize := LCMapString(LOCALE_SYSTEM_DEFAULT, Conversion, PChar(sText), Length(sText), PChar(Result), nSize); if nSize 2019. 6. 14.
[Delphi] 듀얼모니터에 폼 띄우기 Form1 := TForm1.Create(nil);Form1.Top := screen.monitors[0].Top;Form1.Left := screen.monitors[0].Left;Form1.DefaultMonitor := dmDesktop; // 이거 못찾아서 삽질 한참했네 ㅠㅠForm1.Show; 그냥 Left값 지정한다고 되는게 아니라 dmDesktop 이거 해줘야 함! 2018. 1. 9.
[Delphi] InnoSetup : 설치 시 압축파일 풀기 [Files]Source: unzip.exe; DestDir: {userappdata}\testFolder; AfterInstall: UnzipSource: testFile.zip; DestDir: {userappdata}\testFolder [Code]procedure Unzip;var path: string; ResultCode: Integer;begin path := ExpandConstant('{userappdata}') + '\testFolder\' Exec(path + 'unzip.exe', '-u ' + path + 'testFile.zip', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); end; 2017. 10. 2.
[Delphi] InnoSetup : 설치 시 강제로 프로세스 죽이기 [Files]Source: "progtest.exe"; DestDir: "{app}"; BeforeInstall: TaskKill(progtest.exe) [Code]procedure TaskKill(FileName: String);var ResultCode: Integer;begin Exec(ExpandConstant('taskkill.exe'), '/f /im ' + '"' + FileName + '"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); end; 2017. 10. 2.
[Delphi] Embeddedwb에서 Post로 보내기, User-Agent 보내기 쓸데없이 삽질했음.. var i: Integer; strData: string; Empty: OleVariant; Header: OleVariant; Post: OleVariant;begin strData := 'id=' + UserID + '&' + 'passwd=' + UserPW; // post 보낼 값 Post := VarArrayCreate([0, Length(strData) - 1], varByte); for i := 1 to Length(strData) do Post[i - 1] := Ord(strData[i]); Header := 'Content-type: application/x-www-form-urlencoded' + #10#13 + 'User-Agent: 여기넣기' + #10#13; .. 2016. 10. 18.
[Delphi] InnoSetup : 설치 전, 설치 후 함수 호출하기 [BeforeInstall] [Files]Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstallSource: "A\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\A\MYFILE.TXT') [AfterInstall] [Files]Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstallSource: "A\MYFILE.TXT"; DestDir: "{app}"; AfterInstall: MyAfterInstall2('{app}\A\MYFILE.TXT') [Code]procedure MyBeforeI.. 2013. 8. 7.
[Delphi] InnoSetup : event 함수들 [Setup event functions] function InitializeSetup(): Boolean;Called during Setup's initialization. Return False to abort Setup, True otherwise.procedure InitializeWizard();Use this event function to make changes to the wizard or wizard pages at startup. You can't use theInitializeSetup event function for this since at the time it is triggered, the wizard form does not yet exist.procedure Deinitia.. 2013. 8. 7.
[Delphi] InnoSetup : 방화벽 추가 InnoSetup [Code] 부분에 이대로 추가하면 된다설치할때 추가하고 삭제할때 제거된다 검색해서 나오는 자료들은 죄다 예전 소스들이라 힘들었음 ㄱ- [Code] constNET_FW_SCOPE_ALL = 0;NET_FW_IP_VERSION_ANY = 2;NET_FW_ACTION_ALLOW = 1; procedure SetFirewallExceptionXP(AppName,FileName:string);var FirewallObject: Variant; FirewallManager: Variant; FirewallProfile: Variant;begin tryFirewallObject := CreateOleObject('HNetCfg.FwAuthorizedApplication');FirewallObje.. 2013. 8. 7.
[Delphi] InnoSetup : 설치/제거 할 때 프로그램 종료하기 InnoSetup [Code] 부분에 이렇게 넣으면 설치하거나 제거할 때 강제로 프로세스를 종료한다! [Code]constWM_CLOSE = $0010; // 프로그램 설치 시 function InitializeSetup: Boolean;varWnd: HWND;beginwhile(true) dobeginWnd := FindWindowByClassName('메인폼클래스명');if Wnd 0 thenbeginSendMessage(Wnd, WM_CLOSE, 0, 0);endelsebeginbreak;end;end; Result := True;end; // 프로그램 제거 시 function InitializeUninstall: Boolean;varWnd: HWND;beginwhile(true) dobeginWn.. 2013. 8. 7.
[Delphi] 윈도우 높은 권한에서 낮은 권한 메시지 받기 ChangeWindowMessageFilter 를 이용한다.이 소스 진짜 원 출처는 어딘지 모르겠지만 일단 적어놓기. type FCHANGEWINDOWMESSAGEFILTER = function(message: UINT; dwFlag: DWORD) : boolean; stdcall; procedure TForm.FormCreate(Sender: TObject);var h: HWND; MessageFilter: FCHANGEWINDOWMESSAGEFILTER;begin h := LoadLibrary('USER32.DLL'); if h 0 then begin try @MessageFilter := GetProcAddress(h, 'ChangeWindowMessageFilter'); if @MessageFil.. 2013. 8. 2.
[Delphi] 작업표시줄 시계부분 위치찾기 작업표시줄 위치에 상관없이시계부분에 팝업을 띄우기 위해서 var h: HWND; WorkRect: TRect; BarData: TAppBarData; begin h := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil); GetWindowRect(h, &WorkRect); BarData.HWND := 0; BarData.cbSize := sizeof(BarData); SHAppBarMessage(ABM_GETTASKBARPOS, BarData); case BarData.uEdge of 0: // ABE_LEFT begin self.Left := WorkRect.Right; self.Top := WorkRect.Bottom - .. 2013. 7. 30.
[Delphi] 작업표시줄 위치 찾기 uses shellapi; var pData: TAppBarData;begin pData.hWnd := 0; pData.cbSize := sizeof(pData); SHAppBarMessage(ABM_GETTASKBARPOS, pData); case pData.uEdge of 0: ShowMessage('ABE_LEFT'); 1: ShowMessage('ABE_TOP'); 2: ShowMessage('ABE_RIGHT'); 3: ShowMessage('ABE_BOTTOM'); end; end; 2013. 7. 22.
[Delphi] IdFTP 한글 인코딩 오류 기억력 나쁜 내가 또 까먹고 indy 업데이트 할까봐 급히 메모.. IdFTP.pas 수정하면 됨. 1) TIdFTP = class(TIdExplicitTLSClient)에 프로퍼티 하나 만들고 FUTFMode: boolean; property UTFMode : boolean read FUTFMode write FUTFMode; 2) 소스 수정 procedure TIdFTP.List(ADest: TStrings; const ASpecifier: string = ''; ADetails: Boolean = True); {do not localize}var LDest: TMemoryStream; LTrans : TIdFTPTransferType;begin if ADetails and UseMLIS and FC.. 2013. 4. 5.
[Delphi] StringGrid - Mouse move Cell hint procedure TFm_Test.AdvStringGridMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin AdvStringGrid.ShowHint := False; AdvStringGrid.MouseToCell(X, Y, ACol, ARow); if (ACol < 2) or (ARow < 1) then Exit; // fix and checkbox AdvStringGrid.ShowHint := True; AdvStringGrid.Hint := AdvStringGrid.Cells[ACol, ARow]; end; 2012. 1. 11.