네 감사합니다.
sendmessage를 postmessage로 하면 잘됩니다.
둘 간의 차이점도 찾아봤습니다.
http://sixthman23.tistory.com/entry/SendMessage%EC%99%80PostMessage%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90SendMessage%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90
정영훈 님이 쓰신 글 :
: sendmessage 와 postmessage 차이에 대해 알아보시기 바랍니다.
: 일단 응답대기 문제는 postmessage 를 사용하면 해결은 되나 서로간 차이가 있으므로 숙지할 필요가 있습니다.
:
: 예성곤 님이 쓰신 글 :
: : 아래의 소스코드로 컴파일은 완료되었으나...
: : 실행시키면
: : 어느 순간부터
: : SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device));
: : 의 응답이 없습니다.
: :
: : 어떤 문제인가요?
: :
: : 사용 OS는 Windows7 32bit 입니다.
: :
: :
: :
: : /// 원 소스코드
: :
: : procedure SetDefaultPrinter(PrinterName: string);
: : var
: : I: Integer;
: : Device: PChar;
: : Driver: PChar;
: : Port: PChar;
: : HdeviceMode: THandle;
: : aPrinter: TPrinter;
: : begin
: : Printer.PrinterIndex := -1;
: : GetMem(Device, 255);
: : GetMem(Driver, 255);
: : GetMem(Port, 255);
: : aPrinter := TPrinter.Create;
: : try
: : for I := 0 to Printer.Printers.Count - 1 do
: : begin
: : if Printer.Printers[i] = PrinterName then
: : begin
: : aprinter.PrinterIndex := i;
: : aPrinter.getprinter(device, driver, port, HdeviceMode);
: : StrCat(Device, ',');
: : StrCat(Device, Driver);
: : StrCat(Device, Port);
: : WriteProfileString('windows', 'device', Device);
: : StrCopy(Device, 'windows');
: : SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device));
: : end;
: : end;
: : finally
: : aPrinter.Free;
: : end;
: : FreeMem(Device, 255);
: : FreeMem(Driver, 255);
: : FreeMem(Port, 255);
: : end;