현재 윈도우 핸들이 IntPtr
이고 Window
을 사용하려고 시도했지만 HwndSource.FromHwnd을 사용했지만 null
을 반환합니다. Window
요소를 검색 한 경우 해당 MaxWidth
특성을 설정할 수 있습니다.윈도우 핸들에서 다른 애플리케이션의 최대 너비를 설정할 수 있습니까?
외부 응용 프로그램의 창 핸들을 가지지 않고 최대 너비를 설정할 수있는 다른 방법이 있습니까?
편집 : RbMm 님의 접근 방식이 작동하는지 확인하려고합니다. 질문의 태그 C#을하지만, 이것은 C++ 사용자 지정 DLL을 사용해볼 가치가 될 수는 :
bool InitializeMaxWidthHook(int threadID, HWND destination)
{
if (g_appInstance == NULL)
{
return false;
}
SetProp(GetDesktopWindow(), "WILSON_HOOK_HCBT_MINMAX", destination);
hookMaxWidth = SetWindowsHookEx(WH_CBT, (HOOKPROC)MinMaxHookCallback, g_appInstance, threadID);
return hookMaxWidth != NULL;
}
void UninitializeMaxWidthHook()
{
if (hookMaxWidth != NULL)
UnhookWindowsHookEx(hookMaxWidth);
hookMaxWidth = NULL;
}
static LRESULT CALLBACK MinMaxHookCallback(int code, WPARAM wparam, LPARAM lparam)
{
if (code >= 0)
{
UINT msg = 0;
if (code == HCBT_MINMAX)
msg = RegisterWindowMessage("WILSON_HOOK_HCBT_MINMAX");
HWND dstWnd = (HWND)GetProp(GetDesktopWindow(), "WILSON_HOOK_HCBT_MINMAX");
if (msg != 0)
SendNotifyMessage(dstWnd, msg, wparam, lparam);
}
return CallNextHookEx(hookMaxWidth, code, wparam, lparam);
}
나는 다시 땜질 후 질문을 업데이트 할 수 있습니다.
창에는 'MaxWidth' 속성이 없습니다. 윈도우 프로 시저 핸들 ['WM_GETMINMAXINFO'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632626 (v = vs.85) .aspx) 메시지와''MINMAXINFO에서''ptMaxSize'를 반환합니다 '] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632605 (v = vs.85) .aspx) - 제어 창 프로 시저 – RbMm
가능한 유일한 방법은 이렇게 설정하십시오. WH_CALLWNDPROCRET'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644976 (v = vs.85) .aspx) - CallWndRetProc 콜백 함수를 구현하고 MINMAXINFO 구조를 변경하십시오. – RbMm
또 다른 방법은 윈도우 크기를 모니터 (폴링)하고 크기가 너무 커지면 [크기를 조절하십시오] (http://stackoverflow.com/q/8443502/1997232). – Sinatr