2011-11-25 6 views
2

난 내가 클립 보드에서 객체를 검색을 수정하고 다시 추가하려고에 문제가 ...다른 프로세스에서 잠긴 클립 보드를 해제하는 방법은 무엇입니까?

시간이 다시 나는

가 클립 보드에 작업이

을 수행 할 수 없습니다 요청 된가 계속

일부 프로세스에 의해 클립 보드가 잠겨져있는 것처럼 보입니다. 어떻게 클립 보드를 해제 할 수 있습니까?

+0

당신은 분명히 시겠어요. 개체를 검색 할 때 또는 수정 된 개체를 다시 설정할 때입니까? 비평을 위해 공유 할 코드 샘플이 있습니까? – BenSwayne

+0

Taskmgr.exe, 프로세스 탭을 사용하여 문제가있는 사람을 찾을 때까지 하나씩 프로세스를 시작합니다. 제거하십시오. –

+0

나는 타이머를 시작하고 timer_tick에서 검색함으로써 그것을했다. 아마도 컨텍스트 스위치가 클립 보드를 해제하는 것을 도왔다. 이유를 알지 못하지만 매력처럼 작동합니다. – GutterStink

답변

0

당신은 그것을 풀 수 없습니다. 다른 앱에 클립 보드가 열려 있으면 닫을 때까지 기다려야합니다. 클립 보드가 최근에 (과거 2 ~ 2 초 내에) 수정 된 경우 다른 응용 프로그램에서 검사를 위해 열 것이라고 예상해야하므로 즉시 열 수있을 것으로 예상되는 경우 실패가 예상됩니다. try..except 핸들러를 sleep() 및 "3 strikes"루프와 함께 사용해야합니다.
의사 코드 :이 오류 메시지를받을 때

Success := false; 
Attempts := 0; 
While (Attempts < 3) and (Success = false) do 
begin 
    Try 
    inc(Attempts); 
    OpenClipboard; 
    Success := true; 
    except 
    sleep(attempts * 1000); 
    end 
end; 
+1

나는 타이머를 시작하고 timer_tick에서 검색하여이 작업을 수행했다. 아마도 컨텍스트 스위치가 클립 보드를 해제하는 데 도움이 될 것이다. 이유를 잘 모르지만 매력처럼 작동합니다 ... – GutterStink

+0

타이머가 가끔 작동합니다. 그러나 클립 보드 모니터링이 많은 시스템은 고려할 수 없습니다. 많은 프로그램이 클립 보드를 모니터링합니다. 일부는 Google 어스 (URL을 찾고 있습니까?)와 같이 상당히 가볍습니다. 일부는 네트워크를 통해 로컬/원격 클립 보드를 동기화해야하는 RemoteDesktop과 같이 오랜 시간이 걸릴 수 있습니다. 대기 시간을 예측할 수 없으므로 타이머 자체가 안정적으로 작동하지 않습니다. except/sleep/retry 루프가 필요합니다. –