Любое ли окно можно подвинуть?

Тема в разделе "WASM.WIN32", создана пользователем Asterix, 1 дек 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Любое ли окно можно подвинуть, т.е. послать WM_MOVE или

    использовать MoveWindow?



    Что-то с calc.exe из win98 у меня не прокатывает..
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Был не прав, MoveWindow работает!



    Но не работает установка параметров окна через STARTUPINFO структуру при запуске через CreateProcess.
     
  3. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Вроде уже же выясняли, что на эту структуру всем наложить. В том числе и ее изобретателям. Структура, бесспорно, полезная, но не необходимая и потому на ее обработку в таких мега-прогах, как блокнот, калк, паинт и прочая, все забили. Осмелюсь заметить, что правильно сделали. :)
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    n0p

    Только калькулятор ;)
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    n0p

    > потому на ее обработку в таких мега-прогах, как блокнот, калк,



    А мне вот надоело что он где попало появляется, да ещё нужно каждый раз в HEX режим переключать после старта, решил написать ему loader :derisive:
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6.  
    7. INFINITE   =   0FFFFFFFFh  ; Infinite timeout
    8.  
    9.  
    10. section '.code' code readable executable
    11.  
    12. align 4
    13. proc EnumChildWindowsFunc, hwnd, lParam
    14. .Buff  rb  64
    15. enter
    16.   lea eax, [.Buff]
    17.   invoke GetWindowText, [hwnd], eax, 64
    18.   lea eax, [.Buff]
    19.   invoke lstrcmpi, ButtonText, eax
    20.   test eax, eax
    21.   jnz @F
    22.   invoke SendMessage, [hwnd], WM_LBUTTONDOWN, 1, 0
    23.   invoke SendMessage, [hwnd], WM_LBUTTONUP, 1, 0
    24.   xor eax, eax
    25.   jmp .finish
    26. @@:
    27.   xor eax, eax
    28.   inc eax
    29. .finish:
    30.   return
    31. endp
    32.  
    33. align 4
    34. proc EnumWindowsFunc, hwnd, lParam
    35. .Buff  rb  256
    36. .WndRect   RECT
    37. enter
    38.   lea eax, [.Buff]
    39.   invoke GetWindowText, [hwnd], eax, 256
    40.   lea eax, [.Buff]
    41.   invoke lstrcmpi, WindowText, eax
    42.   test eax, eax
    43.   jnz @F
    44.   lea eax, [.WndRect]
    45.   invoke GetWindowRect, [hwnd], eax
    46.   push TRUE
    47.   mov eax, [.WndRect.bottom]
    48.   sub eax, [.WndRect.top]
    49.   push eax
    50.   mov eax, [.WndRect.right]
    51.   sub eax, [.WndRect.left]
    52.   push eax
    53.   push 150
    54.   push 200
    55.   push [hwnd]
    56.   call [MoveWindow]
    57.   invoke EnumChildWindows, [hwnd], EnumChildWindowsFunc, 0
    58.   xor eax, eax
    59.   jmp .finish
    60. @@:
    61.   xor eax, eax
    62.   inc eax
    63. .finish:
    64.   return
    65. endp
    66.  
    67. align 4
    68. start:
    69.   mov edi, sBuff
    70.   invoke GetWindowsDirectory, edi, 260
    71.   test eax, eax
    72.   jz @exit
    73.   invoke lstrcat, edi, szFileName
    74.   test eax, eax
    75.   jz @exit
    76.   mov [StartupInfo.cb], sizeof.STARTUPINFO
    77.   xor esi, esi
    78.   invoke CreateProcess, esi, edi, esi, esi, esi, NORMAL_PRIORITY_CLASS,\
    79.                         esi, esi, StartupInfo, ProcessInfo
    80.   test eax, eax
    81.   jz @exit
    82.   invoke WaitForInputIdle, [ProcessInfo.hProcess], INFINITE
    83.   invoke CloseHandle, [ProcessInfo.hThread]
    84.   invoke CloseHandle, [ProcessInfo.hProcess]
    85.   invoke EnumWindows, EnumWindowsFunc, esi
    86. @exit:
    87.   invoke ExitProcess, esi
    88.  
    89.  
    90. section '.data' data readable writeable
    91.  
    92. szFileName   db   '\Calc.exe',0
    93. WindowText   db   'Калькулятор',0
    94. ButtonText   db   'Hex',0
    95.  
    96.  
    97. section '.udata' readable writeable
    98.  
    99. StartupInfo    STARTUPINFO
    100. ProcessInfo    PROCESSINFO
    101. sBuff          rb  260
    102.  
    103.  
    104. section '.idata' import data readable
    105.  
    106. library kernel32,'KERNEL32.DLL',\
    107.           user32,'USER32.DLL'
    108.  
    109. include '%fasminc%\APIA\KERNEL32.INC'
    110. include '%fasminc%\APIA\USER32.INC'
     
  6. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Ну а почему не сделать все руками? MoveWindow() там, еще кое-чего, если надо. Дешево и сердито.
     
  7. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    Asterix, лоадер это сильно, но calc с исходниками винды есть :)