dub.json:
{
    "name": "maximize",
    "targetType": "dynamicLibrary",
    "sourceFiles": ["source/maximize.d"],
    "dependencies": {},
	"libs":["user32","kernel32"]
}
maximize.d:
module maximize;
import core.sys.windows.windows;
import core.sys.windows.windef;
import core.sys.windows.winnt;
import core.stdc.string;
import std.string;
extern (Windows) BOOL DllMain( HMODULE hModule, DWORD  ul_reason_for_call,LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    	case DLL_PROCESS_ATTACH:
   		case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
        break;
		default:break;	
    }
	
    return TRUE;
}
extern(C) int strcmp(const(char)* s1, const(char)* s2);
extern (Windows) BOOL EnumThreadWndProc(HWND hwnd, LPARAM lParam) {
    HWND* pVimWin = cast(HWND*) lParam;
	char[256] className;
	GetClassNameA(hwnd, cast(LPSTR)className.ptr, cast(int)className.length);
	
	if (strcmp(className.toStringz(), "Vim") == 0 || strcmp(className.toStringz, "GVim") == 0)
	{
		*pVimWin = hwnd;
        OutputDebugString("Found Vim/GVim window\n");
	    return FALSE; // Stop enumeration
    }
    return TRUE; // Continue enumeration
}
extern (C) export LONG Maximize(LONG param) {
    HWND vimwin = null;
    DWORD threadid = GetCurrentThreadId();
    OutputDebugString("Starting EnumThreadWindows\n");
	// Enumerate all windows in the current thread
    EnumThreadWindows(threadid, cast(WNDENUMPROC)&EnumThreadWndProc, cast(LPARAM)&vimwin);
    if (vimwin != null) {
        OutputDebugString("Vim/GVim window found\n");
        if (param == 1) {
            ShowWindow(vimwin, SW_MAXIMIZE); // Maximize window
        }
        else if (param == 0) {
            ShowWindow(vimwin, SW_RESTORE); // Restore window
        }
        return 1; // Success
    } else {
        OutputDebugString("Vim/GVim window not found\n");
        return 0; // Failure: Vim window not found
    }
}
maximize.vim:
" Vim plugin file
" Maintainer: kAtremer <katremer@yandex.ru>
" Last changed: 2007 Oct 16
"
" maximize.vim
" maximize gVim's window on startup on Win32
"
" to install, put the script and maximize.dll
" in $VIM\vimfiles\plugin
" Execute only once {{{
if exists("g:loaded_maximize")
    finish
endif
let g:loaded_maximize = 1
" }}}
" Set the default compatibility options {{{
" (don't know if they do any difference, in such a small script...)
let s:save_cpoptions = &cpoptions
set cpoptions&vim
" }}}
" Define the path to the DLL file
let s:dllfile = expand('<sfile>:p:h') . './maximize.dll'
" Maximize GVim window on startup
 autocmd GUIEnter * call libcallnr(s:dllfile, 'Maximize', g:loaded_maximize)
" ToggleVimResize function
function! ToggleVimResize()
    " Checking the current value of g:loaded_maximize
    if g:loaded_maximize == 1
        " If the window is maximized, change the value to 0 (reduce the window)
        let g:loaded_maximize = 0
    else
        " If the window is not maximized, change the value to 1 (maximize the window)
        let g:loaded_maximize = 1
    endif
    " Call the Maximize function with the new value g:loaded_maximize
      call libcallnr(s:dllfile, 'Maximize', g:loaded_maximize)
endfunction
" Restore the saved compatibility options {{{
let &cpoptions = s:save_cpoptions
" }}}
" vim:fdm=marker:fmr={{{,}}}
" Binding the ToggleVimResize() function to the F11 key in various modes
nnoremap <F11> :call ToggleVimResize()<CR>
inoremap <F11> <C-o>:call ToggleVimResize()<CR>
vnoremap <F11> :<C-u>call ToggleVimResize()<CR>
 Permalink
Permalink Reply
Reply