我目前有一個窗口句柄IntPtr
,我嘗試使用HwndSource.FromHwnd得到它的Window
,但它返回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) - so only way control window procedure – RbMm
可能的方法做到這一點 - set ['] 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